diff --git a/band_structure_visualization-Copy1.ipynb b/band_structure_visualization-Copy1.ipynb
deleted file mode 100644
index c78ff91f874a77ef49c5feed6f698083e86cfc78..0000000000000000000000000000000000000000
--- a/band_structure_visualization-Copy1.ipynb
+++ /dev/null
@@ -1,4968 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "code",
-   "execution_count": 1,
-   "metadata": {
-    "init_cell": true
-   },
-   "outputs": [
-    {
-     "data": {
-      "text/html": [
-       "<style>.container { width:100% !important; }</style>"
-      ],
-      "text/plain": [
-       "<IPython.core.display.HTML object>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "from IPython.core.display import display, HTML\n",
-    "display(HTML(\"<style>.container { width:100% !important; }</style>\"))\n",
-    "\n"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 2,
-   "metadata": {
-    "init_cell": true
-   },
-   "outputs": [],
-   "source": [
-    "from IPython.core.display import Javascript\n",
-    "from IPython.display import display\n",
-    "\n",
-    "def run_cell_by_tag(tags):\n",
-    "    display(Javascript(\"window.runCells('\"+tags+\"')\"))"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 3,
-   "metadata": {
-    "init_cell": true,
-    "scrolled": true
-   },
-   "outputs": [
-    {
-     "data": {
-      "text/html": [
-       "<script>\n",
-       "    code_show=true; \n",
-       "    function code_toggle() {\n",
-       "        if (code_show)\n",
-       "        {\n",
-       "            $('div.input').hide();\n",
-       "        } \n",
-       "        else \n",
-       "        {\n",
-       "            $('div.input').show();\n",
-       "        }\n",
-       "        code_show = !code_show\n",
-       "    } \n",
-       "    $( document ).ready(code_toggle);\n",
-       "</script>\n",
-       "The raw code for this notebook is by default hidden for easier reading.\n",
-       "To toggle on/off the raw code, click <a href=\"javascript:code_toggle()\">here</a>.\n"
-      ],
-      "text/plain": [
-       "<IPython.core.display.HTML object>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "%%HTML\n",
-    "<script>\n",
-    "    code_show=true; \n",
-    "    function code_toggle() {\n",
-    "        if (code_show)\n",
-    "        {\n",
-    "            $('div.input').hide();\n",
-    "        } \n",
-    "        else \n",
-    "        {\n",
-    "            $('div.input').show();\n",
-    "        }\n",
-    "        code_show = !code_show\n",
-    "    } \n",
-    "    $( document ).ready(code_toggle);\n",
-    "</script>\n",
-    "The raw code for this notebook is by default hidden for easier reading.\n",
-    "To toggle on/off the raw code, click <a href=\"javascript:code_toggle()\">here</a>."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 4,
-   "metadata": {
-    "init_cell": true,
-    "scrolled": false
-   },
-   "outputs": [
-    {
-     "data": {
-      "text/html": [
-       "\n",
-       "\n",
-       "<div align=\"left\" style=\"background-color: rgba(149,170,79, 1.0); width: 100%; height: 390px; overflow: hidden;\">\n",
-       "    <div >\n",
-       "        <table>\n",
-       "            <tr></tr>\n",
-       "            <tr>\n",
-       "                <td><img src=\"Nomad_tutorial_head.png\"></td>\n",
-       "            </tr>\n",
-       "        </table>\n",
-       "    </div>\n",
-       "\n",
-       "    <br><br>\n",
-       "    <div style=\"position:relative; left:3%\"><font size=6em  color=\"#20335d\" ><b> -  Visualization of the band structure of materials </b></font></div>\n",
-       "    <p style=\"position:relative;left:10%; \">\n",
-       "        <br>\n",
-       "        Created by:\n",
-       "\n",
-       "        Xiangyue Liu<sup>1</sup>(<a href=\"mailto:xyliu@fhi-berlin.mpg.de\">email</a>),\n",
-       "        \n",
-       "        Fawzi Mohamed<sup>1</sup>,\n",
-       "        \n",
-       "        and Luca M. Ghiringhelli<sup>1</sup>(<a href=\"mailto:ghiringhelli@fhi-berlin.mpg.de\">email</a>), <br>\n",
-       "\n",
-       "        <br><br>\n",
-       "        <sup>1</sup> Fritz Haber Institute of the Max Planck Society, Faradayweg 4-6, D-14195 Berlin, Germany <br>\n",
-       "        <br>\n",
-       "\n",
-       "\n",
-       "    </p>\n",
-       "    <br>\n",
-       "    <div style=\"position:relative;bottom:3%\">\n",
-       "        <div style=\"position:absolute;right:5%;bottom: 0%;\"><font color=\"#999999\" size=\"10em\">v2.0.0</font></div>\n",
-       "        <div style=\"position:absolute;right:5%;bottom: 0%;\"><font color=\"#666666\" size=\"2.7em\">[Last updated: August 5, 2019]</font></div>\n",
-       "    </div>\n",
-       "\n",
-       "</div>\n",
-       "\n",
-       "\n",
-       "<div style='text-align: right;'>\n",
-       "    <a href=\"https://analytics-toolkit.nomad-coe.eu/home/\" class=\"btn btn-primary\" style=\"font-size:larger;\">Back to Analytics Home</a> \n",
-       "    <a href=\"https://www.nomad-coe.eu/\" class=\"btn btn-primary\" style=\"font-size:larger; \">Back to nomad-coe</a> \n",
-       "</div>\n"
-      ],
-      "text/plain": [
-       "<IPython.core.display.HTML object>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "%%HTML\n",
-    "\n",
-    "\n",
-    "<div align=\"left\" style=\"background-color: rgba(149,170,79, 1.0); width: 100%; height: 390px; overflow: hidden;\">\n",
-    "    <div >\n",
-    "        <table>\n",
-    "            <tr></tr>\n",
-    "            <tr>\n",
-    "                <td><img src=\"Nomad_tutorial_head.png\"></td>\n",
-    "            </tr>\n",
-    "        </table>\n",
-    "    </div>\n",
-    "\n",
-    "    <br><br>\n",
-    "    <div style=\"position:relative; left:3%\"><font size=6em  color=\"#20335d\" ><b> -  Visualization of the band structure of materials </b></font></div>\n",
-    "    <p style=\"position:relative;left:10%; \">\n",
-    "        <br>\n",
-    "        Created by:\n",
-    "\n",
-    "        Xiangyue Liu<sup>1</sup>(<a href=\"mailto:xyliu@fhi-berlin.mpg.de\">email</a>),\n",
-    "        \n",
-    "        Fawzi Mohamed<sup>1</sup>,\n",
-    "        \n",
-    "        and Luca M. Ghiringhelli<sup>1</sup>(<a href=\"mailto:ghiringhelli@fhi-berlin.mpg.de\">email</a>), <br>\n",
-    "\n",
-    "        <br><br>\n",
-    "        <sup>1</sup> Fritz Haber Institute of the Max Planck Society, Faradayweg 4-6, D-14195 Berlin, Germany <br>\n",
-    "        <br>\n",
-    "\n",
-    "\n",
-    "    </p>\n",
-    "    <br>\n",
-    "    <div style=\"position:relative;bottom:3%\">\n",
-    "        <div style=\"position:absolute;right:5%;bottom: 0%;\"><font color=\"#999999\" size=\"10em\">v2.0.0</font></div>\n",
-    "        <div style=\"position:absolute;right:5%;bottom: 0%;\"><font color=\"#666666\" size=\"2.7em\">[Last updated: August 5, 2019]</font></div>\n",
-    "    </div>\n",
-    "\n",
-    "</div>\n",
-    "\n",
-    "\n",
-    "<div style='text-align: right;'>\n",
-    "    <a href=\"https://analytics-toolkit.nomad-coe.eu/home/\" class=\"btn btn-primary\" style=\"font-size:larger;\">Back to Analytics Home</a> \n",
-    "    <a href=\"https://www.nomad-coe.eu/\" class=\"btn btn-primary\" style=\"font-size:larger; \">Back to nomad-coe</a> \n",
-    "</div>\n"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 5,
-   "metadata": {
-    "init_cell": true
-   },
-   "outputs": [
-    {
-     "data": {
-      "text/html": [
-       "<script>\n",
-       "    window.findCellIndicesByTag = function findCellIndicesByTag(tagName) {\n",
-       "      return (Jupyter.notebook.get_cells()\n",
-       "        .filter(\n",
-       "          ({metadata: {tags}}) => tags && tags.includes(tagName)\n",
-       "        )\n",
-       "        .map((cell) => Jupyter.notebook.find_cell_index(cell))\n",
-       "      );\n",
-       "    };\n",
-       "\n",
-       "\n",
-       "    window.runCells = function runPlotCells(tags) {\n",
-       "        var c = window.findCellIndicesByTag(tags);\n",
-       "        Jupyter.notebook.execute_cells(c);\n",
-       "    };\n",
-       "</script>\n"
-      ],
-      "text/plain": [
-       "<IPython.core.display.HTML object>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "%%HTML\n",
-    "<script>\n",
-    "    window.findCellIndicesByTag = function findCellIndicesByTag(tagName) {\n",
-    "      return (Jupyter.notebook.get_cells()\n",
-    "        .filter(\n",
-    "          ({metadata: {tags}}) => tags && tags.includes(tagName)\n",
-    "        )\n",
-    "        .map((cell) => Jupyter.notebook.find_cell_index(cell))\n",
-    "      );\n",
-    "    };\n",
-    "\n",
-    "\n",
-    "    window.runCells = function runPlotCells(tags) {\n",
-    "        var c = window.findCellIndicesByTag(tags);\n",
-    "        Jupyter.notebook.execute_cells(c);\n",
-    "    };\n",
-    "</script>"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 6,
-   "metadata": {
-    "init_cell": true,
-    "tags": [
-     "search_materials"
-    ]
-   },
-   "outputs": [
-    {
-     "data": {
-      "text/html": [
-       "<br><br>\n",
-       "\n",
-       "<p style=\"color: #20335d;font-weight: 450; font-size: 14pt;font-family: Arial;\"> This tutorial visulizes the band structures and density of states (DOS) of the NOMAD materials.</p>\n",
-       "<br><br>\n",
-       "\n",
-       "<style>\n",
-       ".button {\n",
-       "    background-color: #e7e7e7;\n",
-       "    border: 0.5px solid #A4A4A4;\n",
-       "    color: black;\n",
-       "    padding: 15px 32px;\n",
-       "    text-align: center;\n",
-       "    text-decoration: none;\n",
-       "    display: inline-block;\n",
-       "    font-family: Arial;\n",
-       "    font-size: 16px;\n",
-       "    margin: 4px 2px;\n",
-       "    cursor: pointer;\n",
-       "}\n",
-       "\n",
-       "  .text-normal-black{\n",
-       "    color: #000;font-weight: 200; font-size: 10pt;\n",
-       "    font-family: Arial;\n",
-       "  }\n",
-       "  .div_band_dos{\n",
-       "    box-sizing: border-box;\n",
-       "    width: 100%;\n",
-       "    height: 600px;\n",
-       "    font-weight: 100;\n",
-       "    font-family: Arial;\n",
-       "    padding-left: 20px;\n",
-       "    padding-top: 10px;\n",
-       "    padding-right: 1em;\n",
-       "    margin: 0;\n",
-       "    border: 0;\n",
-       "  }\n",
-       "  .div_band_dos_compare{\n",
-       "    box-sizing: border-box;\n",
-       "    width: 1600px;\n",
-       "    height: 600px;\n",
-       "    color: #00AEFF;\n",
-       "    font-weight: 100;\n",
-       "    font-family: Arial;\n",
-       "    padding-left: 20px;\n",
-       "    padding-top: 10px;\n",
-       "    padding-right: 1em;\n",
-       "    margin: 0;\n",
-       "    border: 0;\n",
-       "  }\n",
-       "  .div_band{\n",
-       "    font-family: Arial;\n",
-       "    font-size: 0.875em;\n",
-       "    width: 37%;\n",
-       "    height: 80%;\n",
-       "    background-color: #fff;\n",
-       "    float:left;\n",
-       "  }\n",
-       "  .div_dos{\n",
-       "    font-family: Arial;\n",
-       "    font-size: 0.875em;\n",
-       "    width: 13%;\n",
-       "    height: 80%;\n",
-       "    background-color: #fff;\n",
-       "    float:left;\n",
-       "  }\n",
-       "  .div_tools{\n",
-       "    color: #20335d;font-weight: 150; font-size: 13pt;\n",
-       "    width: 35%;\n",
-       "    height: 80%;\n",
-       "    background-color: #fff;\n",
-       "    margin-left:20pt;\n",
-       "    float:left;\n",
-       "    font-family: Arial;\n",
-       "\n",
-       "  }\n",
-       "  .div_checkbox_compare{\n",
-       "    color: #888;font-weight: 150; font-size: 12pt;\n",
-       "    width: 10%;\n",
-       "    height: 80%;\n",
-       "    background-color: #fff;\n",
-       "    border: solid #fff 1px;\n",
-       "    float:right;\n",
-       "    font-family: Arial;\n",
-       "\n",
-       "  }\n",
-       "  .div_overview{\n",
-       "    width: 300px;\n",
-       "    height: 200px;\n",
-       "    background-color: #fff;\n",
-       "    margin-left:10px; \n",
-       "    margin-top: 20px;\n",
-       "    font-family: Arial;\n",
-       "\n",
-       "  }\n",
-       "  .button_tools {\n",
-       "    background-color: #F0F0F0;\n",
-       "    border: 0.5px solid #A4A4A4;\n",
-       "    color: black;\n",
-       "    padding: 10px 15px;\n",
-       "    text-align: center;\n",
-       "    text-decoration: none;\n",
-       "    display: inline-block;\n",
-       "    font-size: 16px;\n",
-       "    margin: 4px 2px;\n",
-       "    cursor: pointer;\n",
-       "    font-family: Arial;\n",
-       "\n",
-       "  }\n",
-       "\n",
-       "  \n",
-       "  .g-before-after{position:relative;overflow:hidden;width:500px}.g-before-after img{display:block}.g-before-after .g-img-before{float:left}.g-before-after .g-img-after,.g-before-after.g-vertical .g-img-after{position:absolute;top:0;right:0;left:50%;bottom:0;overflow:hidden}.g-before-after .g-img-after img{position:absolute;right:0;top:0}.g-before-after .g-img-divider{position:absolute;left:50%;top:0;bottom:0;width:0;border-left:1px solid #fff;border-right:1px solid #fff}.g-before-after .g-img-divider>span{position:absolute;top:50%;display:block;background-color:#fff;padding:5px 10px;line-height:1;text-align:center;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.g-before-after.g-vertical .g-img-after{top:50%;left:0}.g-before-after.g-vertical .g-img-after img{position:absolute;right:auto;top:auto;left:0;bottom:0}.g-before-after.g-vertical .g-img-divider{position:absolute;left:0;top:50%;bottom:auto;right:0;height:0;width:100%;border-top:1px solid #fff;border-bottom:1px solid #fff;border-left:0 none;border-right:0 none}.g-before-after.g-vertical .g-img-divider>span{top:50%;left:50%}\n",
-       "</style>\n",
-       "\n",
-       "<script>\n",
-       "    //Search for certain keyword: https://labdev-nomad.esc.rzg.mpg.de/fairdi/nomad/migration/api/repo/?quantities=section_k_band_segment\n",
-       "    //FjiYy5-ETRCrs5ktzJA55w/bOY0cPkBvvNAY7pZdbginlKXJ2kF\n",
-       "    //\"upload_id\"/\"calc_id\"\n",
-       "    \n",
-       "    //Global variables\n",
-       "    var paths_section_k_band_segment = []; \n",
-       "    var paths_section_dos = [];\n",
-       "    var band_obj_all = [];\n",
-       "    var dos_obj_all = [];\n",
-       "    var info_obj_all = [];\n",
-       "    \n",
-       "    var band_paths = [];\n",
-       "    var dos_paths = [];\n",
-       "    var N_materials = 0;  //Number of materials that have both band and DOS in the same calculation   \n",
-       "    \n",
-       "    \n",
-       "    function getJSON(url) {\n",
-       "        var resp ;\n",
-       "        var xmlHttp ;\n",
-       "\n",
-       "        resp  = '' ;\n",
-       "        xmlHttp = new XMLHttpRequest();\n",
-       "\n",
-       "        if(xmlHttp != null)\n",
-       "        {\n",
-       "            xmlHttp.open( \"GET\", url, false );\n",
-       "            xmlHttp.send( null );\n",
-       "            resp = xmlHttp.responseText;\n",
-       "        }\n",
-       "\n",
-       "        return resp;\n",
-       "    }\n",
-       "    function match_band_dos()\n",
-       "    {\n",
-       "        //TMP for local tests\n",
-       "        /*\n",
-       "        paths_section_k_band_segment = [\"data/kOJR-AlPSgiNG9AdZoxd4g_9mxjIU0edrPosfsTc4uyDG9H_UXr.json\",\"data/kOJR-AlPSgiNG9AdZoxd4g_lfkGCmWozYENeiGhu5W7dJUqLTkj.json\"];\n",
-       "        paths_section_dos = [\"data/kOJR-AlPSgiNG9AdZoxd4g_8tEGnaz0yY91eSyysKZkIUH9qx8J.json\", \"data/kOJR-AlPSgiNG9AdZoxd4g_lxUT3viRZcC_1IsH_KvO5tChAtV1.json\"];\n",
-       "        */\n",
-       "\n",
-       "        //band_paths = [];\n",
-       "        //dos_paths = [];\n",
-       "        //N_materials = 0;    \n",
-       "        \n",
-       "        var data_k_band = [];\n",
-       "        for(var i_path_k_band = 0; i_path_k_band < paths_section_k_band_segment.length; i_path_k_band ++)\n",
-       "        {\n",
-       "            var i_data_k_band_json = JSON.parse(getJSON(paths_section_k_band_segment[i_path_k_band]));\n",
-       "            var i_data_k_band = {};\n",
-       "            i_data_k_band[\"program_name\"] = i_data_k_band_json[\"section_run\"][\"program_name\"];\n",
-       "            i_data_k_band[\"k_mesh_points\"] = i_data_k_band_json[\"section_run\"][\"section_method\"][\"k_mesh_points\"];\n",
-       "            i_data_k_band[\"simulation_cell\"] = i_data_k_band_json[\"section_run\"][\"section_system\"][0][\"simulation_cell\"];\n",
-       "            i_data_k_band[\"atom_positions\"] = i_data_k_band_json[\"section_run\"][\"section_system\"][0][\"atom_positions\"];\n",
-       "            i_data_k_band[\"atom_labels\"] = i_data_k_band_json[\"section_run\"][\"section_system\"][0][\"atom_labels\"];\n",
-       "            i_data_k_band[\"XC_functional_name\"] = i_data_k_band_json[\"section_run\"][\"section_method\"][\"section_XC_functionals\"][0][\"XC_functional_name\"] + \"-\" + i_data_k_band_json[\"section_run\"][\"section_method\"][\"section_XC_functionals\"][1][\"XC_functional_name\"]\n",
-       "            i_data_k_band[\"path\"] = paths_section_k_band_segment[i_path_k_band];\n",
-       "            data_k_band.push(i_data_k_band);\n",
-       "        }\n",
-       "\n",
-       "        var data_dos = [];\n",
-       "        for(var i_path_dos = 0; i_path_dos < paths_section_dos.length; i_path_dos ++)\n",
-       "        {\n",
-       "            var i_data_dos_json = JSON.parse(getJSON(paths_section_dos[i_path_dos]));\n",
-       "            var i_data_dos = {};\n",
-       "            i_data_dos[\"program_name\"] = i_data_dos_json[\"section_run\"][\"program_name\"];\n",
-       "            i_data_dos[\"k_mesh_points\"] = i_data_dos_json[\"section_run\"][\"section_method\"][\"k_mesh_points\"];\n",
-       "            i_data_dos[\"simulation_cell\"] = i_data_dos_json[\"section_run\"][\"section_system\"][0][\"simulation_cell\"];\n",
-       "            i_data_dos[\"atom_positions\"] = i_data_dos_json[\"section_run\"][\"section_system\"][0][\"atom_positions\"];\n",
-       "            i_data_dos[\"atom_labels\"] = i_data_dos_json[\"section_run\"][\"section_system\"][0][\"atom_labels\"];\n",
-       "            i_data_dos[\"XC_functional_name\"] = i_data_dos_json[\"section_run\"][\"section_method\"][\"section_XC_functionals\"][0][\"XC_functional_name\"] + \"-\" + i_data_dos_json[\"section_run\"][\"section_method\"][\"section_XC_functionals\"][1][\"XC_functional_name\"]\n",
-       "            i_data_dos[\"path\"] = paths_section_dos[i_path_dos];\n",
-       "            data_dos.push(i_data_dos);       \n",
-       "        }\n",
-       "\n",
-       "        //Matching: band[i] ~ dos[i]  (the same systems are arranged with the same index)\n",
-       "        band_paths = [];\n",
-       "        dos_paths = [];\n",
-       "        N_materials = 0;\n",
-       "        for(var i_k_band = 0; i_k_band < data_k_band.length; i_k_band ++)\n",
-       "        {\n",
-       "            for(var i_dos = 0; i_dos < data_dos.length; i_dos ++)\n",
-       "            {\n",
-       "                if(data_k_band[i_k_band][\"program_name\"] != data_dos[i_dos][\"program_name\"])\n",
-       "                    continue;        \n",
-       "                //if(data_k_band[i_k_band][\"k_mesh_points\"].join() != data_dos[i_dos][\"k_mesh_points\"].join())\n",
-       "                //   continue;\n",
-       "                if(data_k_band[i_k_band][\"simulation_cell\"].join() != data_dos[i_dos][\"simulation_cell\"].join())\n",
-       "                    continue;\n",
-       "                if(data_k_band[i_k_band][\"atom_positions\"].join() != data_dos[i_dos][\"atom_positions\"].join())\n",
-       "                    continue;\n",
-       "                if(data_k_band[i_k_band][\"atom_labels\"].join() != data_dos[i_dos][\"atom_labels\"].join())\n",
-       "                    continue;\n",
-       "                if(data_k_band[i_k_band][\"XC_functional_name\"] != data_dos[i_dos][\"XC_functional_name\"])\n",
-       "                    continue;\n",
-       "                band_paths.push(data_k_band[i_k_band][\"path\"]);\n",
-       "                dos_paths.push(data_dos[i_dos][\"path\"]);\n",
-       "                N_materials ++;\n",
-       "            }\n",
-       "        }\n",
-       "        //Pass the arrays to python\n",
-       "\n",
-       "        var command = \"N_materials = \" + N_materials + \";\"\n",
-       "        var kernel = IPython.notebook.kernel;\n",
-       "        command += \"band_paths = \" + \"[\\'\" + band_paths.join(\"\\',\\'\") + \"\\'];\";\n",
-       "        command += \"dos_paths = \" + \"[\\'\" + dos_paths.join(\"\\',\\'\") + \"\\'];\";\n",
-       "        kernel.execute(command);\n",
-       "        \n",
-       "        \n",
-       "    }\n",
-       "\n",
-       "    function get_paths_from_search_results(result_json, div_id_search_results,div_head)\n",
-       "    {\n",
-       "        paths = [];\n",
-       "        search_results_content = [div_head, '<table>', '<tr><th>Chemical formula</th><th>Spacegroup</th><th>Code</th><th>XC functional</th><th>Upload ID</th><th>Calculation ID</th><th>URL</th></tr>'];\n",
-       "        for(var i_key in result_json)\n",
-       "        {\n",
-       "            if(i_key == \"results\")\n",
-       "            {\n",
-       "                for(var system in result_json[i_key])\n",
-       "                {\n",
-       "                    //Get the path to the data files (json): https://labdev-nomad.esc.rzg.mpg.de/fairdi/nomad/migration/api/archive/upload_id/calc_id \n",
-       "                    path = \"https://labdev-nomad.esc.rzg.mpg.de/fairdi/nomad/migration/api/archive/\" + result_json[i_key][system][\"upload_id\"] + \"/\" + result_json[i_key][system][\"calc_id\"]\n",
-       "                    paths.push(path);\n",
-       "                    \n",
-       "                    //Show the results in div\n",
-       "                    // \"formula\" \"spacegroup_symbol\" \"code_name\" \"xc_functional\"\n",
-       "                    content = '<tr>';\n",
-       "                    content += '<td>' + result_json[i_key][system][\"formula\"] + '</td>';\n",
-       "                    content += '<td>' + result_json[i_key][system][\"spacegroup_symbol\"] + '</td>';\n",
-       "                    content += '<td>' + result_json[i_key][system][\"code_name\"] + '</td>';\n",
-       "                    content += '<td>' + result_json[i_key][system][\"xc_functional\"] + '</td>';\n",
-       "                    content += '<td>' + result_json[i_key][system][\"upload_id\"] + '</td>';\n",
-       "                    content += '<td>' + result_json[i_key][system][\"calc_id\"] + '</td>';                    \n",
-       "                    content += '<td>' + path + '</td>';\n",
-       "                    content += '</tr>';\n",
-       "                    search_results_content.push(content);\n",
-       "                }\n",
-       "            }\n",
-       "        }\n",
-       "        search_results_content.push('</table>');\n",
-       "        document.getElementById(div_id_search_results).innerHTML = search_results_content.join('');\n",
-       "        return paths\n",
-       "    }\n",
-       "    \n",
-       "    \n",
-       "    \n",
-       "\n",
-       "    \n",
-       "    \n",
-       "    \n",
-       "    function submit_search()\n",
-       "    {\n",
-       "        \n",
-       "        var result;\n",
-       "        var formula = document.getElementById(\"keyword_chemical_formula\").value;\n",
-       "        var query_command_k_band = \"https://labdev-nomad.esc.rzg.mpg.de/fairdi/nomad/migration/api/repo/?formula=\" + formula + \"&quantities=section_k_band_segment\";\n",
-       "        var query_command_dos =  \"https://labdev-nomad.esc.rzg.mpg.de/fairdi/nomad/migration/api/repo/?formula=\" + formula + \"&quantities=section_dos\";\n",
-       "        //result = getJSON(\"https://labdev-nomad.esc.rzg.mpg.de/fairdi/nomad/migration/api/repo/?quantities=section_k_band_segment\");\n",
-       "        var result_k_band = getJSON(query_command_k_band);\n",
-       "        var result_dos = getJSON(query_command_dos);\n",
-       "        var result_json_k_band = JSON.parse(result_k_band);//parse the searching results to json from URL\n",
-       "        var result_json_dos = JSON.parse(result_dos);\n",
-       "        paths_section_k_band_segment = []; \n",
-       "        paths_section_dos = [];\n",
-       "        paths_section_k_band_segment = get_paths_from_search_results(result_json_k_band, \"search_results_section_k_band_segment\", \"<br><br><font size=4em>Calculations containing band structures:</font><br>\");\n",
-       "        paths_section_dos = get_paths_from_search_results(result_json_dos, \"search_results_section_dos\", \"<br><font size=4em>Calculations containing DOS:</font><br>\");\n",
-       "     \n",
-       "        var promise = Promise.resolve();\n",
-       "        promise\n",
-       "            .then(match_band_dos())\n",
-       "            .then(Jupyter.notebook.execute_cells(window.findCellIndicesByTag('process_band_dos_data')))\n",
-       "            .then(Jupyter.notebook.execute_cells(window.findCellIndicesByTag('show_results_and_plot')));\n",
-       "        \n",
-       "        //match_band_dos();\n",
-       "              \n",
-       "        //Jupyter.notebook.execute_cells(window.findCellIndicesByTag('process_band_dos_data')); //Read the json files, and prepare data for plot\n",
-       "        //Jupyter.notebook.execute_cells(window.findCellIndicesByTag('show_results_and_plot')); //Prepare for plot\n",
-       "    }\n",
-       "    function reset_search()\n",
-       "    {\n",
-       "        Jupyter.notebook.execute_cells(window.findCellIndicesByTag('search_materials'));\n",
-       "        Jupyter.notebook.execute_cells(window.findCellIndicesByTag('show_results_and_plot'));\n",
-       "    }\n",
-       "    \n",
-       "    \n",
-       "</script>\n",
-       "<font size=4em>Please input the chemical formula:</font>\n",
-       "<input type=\"text\" id=\"keyword_chemical_formula\" value=\"AlInO3\"> \n",
-       "<button class=\"button\" onclick=\"submit_search()\">Search</button>\n",
-       "<button class=\"button\" onclick=\"reset_search()\">Reset</button>\n",
-       "<br><br><br>\n",
-       "<div id=\"search_results_section_k_band_segment\"></div>\n",
-       "<div id=\"search_results_section_dos\"></div>\n"
-      ],
-      "text/plain": [
-       "<IPython.core.display.HTML object>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "%%html\n",
-    "<br><br>\n",
-    "\n",
-    "<p style=\"color: #20335d;font-weight: 450; font-size: 14pt;font-family: Arial;\"> This tutorial visulizes the band structures and density of states (DOS) of the NOMAD materials.</p>\n",
-    "<br><br>\n",
-    "\n",
-    "<style>\n",
-    ".button {\n",
-    "    background-color: #e7e7e7;\n",
-    "    border: 0.5px solid #A4A4A4;\n",
-    "    color: black;\n",
-    "    padding: 15px 32px;\n",
-    "    text-align: center;\n",
-    "    text-decoration: none;\n",
-    "    display: inline-block;\n",
-    "    font-family: Arial;\n",
-    "    font-size: 16px;\n",
-    "    margin: 4px 2px;\n",
-    "    cursor: pointer;\n",
-    "}\n",
-    "\n",
-    "  .text-normal-black{\n",
-    "    color: #000;font-weight: 200; font-size: 10pt;\n",
-    "    font-family: Arial;\n",
-    "  }\n",
-    "  .div_band_dos{\n",
-    "    box-sizing: border-box;\n",
-    "    width: 100%;\n",
-    "    height: 600px;\n",
-    "    font-weight: 100;\n",
-    "    font-family: Arial;\n",
-    "    padding-left: 20px;\n",
-    "    padding-top: 10px;\n",
-    "    padding-right: 1em;\n",
-    "    margin: 0;\n",
-    "    border: 0;\n",
-    "  }\n",
-    "  .div_band_dos_compare{\n",
-    "    box-sizing: border-box;\n",
-    "    width: 1600px;\n",
-    "    height: 600px;\n",
-    "    color: #00AEFF;\n",
-    "    font-weight: 100;\n",
-    "    font-family: Arial;\n",
-    "    padding-left: 20px;\n",
-    "    padding-top: 10px;\n",
-    "    padding-right: 1em;\n",
-    "    margin: 0;\n",
-    "    border: 0;\n",
-    "  }\n",
-    "  .div_band{\n",
-    "    font-family: Arial;\n",
-    "    font-size: 0.875em;\n",
-    "    width: 37%;\n",
-    "    height: 80%;\n",
-    "    background-color: #fff;\n",
-    "    float:left;\n",
-    "  }\n",
-    "  .div_dos{\n",
-    "    font-family: Arial;\n",
-    "    font-size: 0.875em;\n",
-    "    width: 13%;\n",
-    "    height: 80%;\n",
-    "    background-color: #fff;\n",
-    "    float:left;\n",
-    "  }\n",
-    "  .div_tools{\n",
-    "    color: #20335d;font-weight: 150; font-size: 13pt;\n",
-    "    width: 35%;\n",
-    "    height: 80%;\n",
-    "    background-color: #fff;\n",
-    "    margin-left:20pt;\n",
-    "    float:left;\n",
-    "    font-family: Arial;\n",
-    "\n",
-    "  }\n",
-    "  .div_checkbox_compare{\n",
-    "    color: #888;font-weight: 150; font-size: 12pt;\n",
-    "    width: 10%;\n",
-    "    height: 80%;\n",
-    "    background-color: #fff;\n",
-    "    border: solid #fff 1px;\n",
-    "    float:right;\n",
-    "    font-family: Arial;\n",
-    "\n",
-    "  }\n",
-    "  .div_overview{\n",
-    "    width: 300px;\n",
-    "    height: 200px;\n",
-    "    background-color: #fff;\n",
-    "    margin-left:10px; \n",
-    "    margin-top: 20px;\n",
-    "    font-family: Arial;\n",
-    "\n",
-    "  }\n",
-    "  .button_tools {\n",
-    "    background-color: #F0F0F0;\n",
-    "    border: 0.5px solid #A4A4A4;\n",
-    "    color: black;\n",
-    "    padding: 10px 15px;\n",
-    "    text-align: center;\n",
-    "    text-decoration: none;\n",
-    "    display: inline-block;\n",
-    "    font-size: 16px;\n",
-    "    margin: 4px 2px;\n",
-    "    cursor: pointer;\n",
-    "    font-family: Arial;\n",
-    "\n",
-    "  }\n",
-    "\n",
-    "  \n",
-    "  .g-before-after{position:relative;overflow:hidden;width:500px}.g-before-after img{display:block}.g-before-after .g-img-before{float:left}.g-before-after .g-img-after,.g-before-after.g-vertical .g-img-after{position:absolute;top:0;right:0;left:50%;bottom:0;overflow:hidden}.g-before-after .g-img-after img{position:absolute;right:0;top:0}.g-before-after .g-img-divider{position:absolute;left:50%;top:0;bottom:0;width:0;border-left:1px solid #fff;border-right:1px solid #fff}.g-before-after .g-img-divider>span{position:absolute;top:50%;display:block;background-color:#fff;padding:5px 10px;line-height:1;text-align:center;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.g-before-after.g-vertical .g-img-after{top:50%;left:0}.g-before-after.g-vertical .g-img-after img{position:absolute;right:auto;top:auto;left:0;bottom:0}.g-before-after.g-vertical .g-img-divider{position:absolute;left:0;top:50%;bottom:auto;right:0;height:0;width:100%;border-top:1px solid #fff;border-bottom:1px solid #fff;border-left:0 none;border-right:0 none}.g-before-after.g-vertical .g-img-divider>span{top:50%;left:50%}\n",
-    "</style>\n",
-    "\n",
-    "<script>\n",
-    "    //Search for certain keyword: https://labdev-nomad.esc.rzg.mpg.de/fairdi/nomad/migration/api/repo/?quantities=section_k_band_segment\n",
-    "    //FjiYy5-ETRCrs5ktzJA55w/bOY0cPkBvvNAY7pZdbginlKXJ2kF\n",
-    "    //\"upload_id\"/\"calc_id\"\n",
-    "    \n",
-    "    //Global variables\n",
-    "    var paths_section_k_band_segment = []; \n",
-    "    var paths_section_dos = [];\n",
-    "    var band_obj_all = [];\n",
-    "    var dos_obj_all = [];\n",
-    "    var info_obj_all = [];\n",
-    "    \n",
-    "    var band_paths = [];\n",
-    "    var dos_paths = [];\n",
-    "    var N_materials = 0;  //Number of materials that have both band and DOS in the same calculation   \n",
-    "    \n",
-    "    \n",
-    "    function getJSON(url) {\n",
-    "        var resp ;\n",
-    "        var xmlHttp ;\n",
-    "\n",
-    "        resp  = '' ;\n",
-    "        xmlHttp = new XMLHttpRequest();\n",
-    "\n",
-    "        if(xmlHttp != null)\n",
-    "        {\n",
-    "            xmlHttp.open( \"GET\", url, false );\n",
-    "            xmlHttp.send( null );\n",
-    "            resp = xmlHttp.responseText;\n",
-    "        }\n",
-    "\n",
-    "        return resp;\n",
-    "    }\n",
-    "    function match_band_dos()\n",
-    "    {\n",
-    "        //TMP for local tests\n",
-    "        /*\n",
-    "        paths_section_k_band_segment = [\"data/kOJR-AlPSgiNG9AdZoxd4g_9mxjIU0edrPosfsTc4uyDG9H_UXr.json\",\"data/kOJR-AlPSgiNG9AdZoxd4g_lfkGCmWozYENeiGhu5W7dJUqLTkj.json\"];\n",
-    "        paths_section_dos = [\"data/kOJR-AlPSgiNG9AdZoxd4g_8tEGnaz0yY91eSyysKZkIUH9qx8J.json\", \"data/kOJR-AlPSgiNG9AdZoxd4g_lxUT3viRZcC_1IsH_KvO5tChAtV1.json\"];\n",
-    "        */\n",
-    "\n",
-    "        //band_paths = [];\n",
-    "        //dos_paths = [];\n",
-    "        //N_materials = 0;    \n",
-    "        \n",
-    "        var data_k_band = [];\n",
-    "        for(var i_path_k_band = 0; i_path_k_band < paths_section_k_band_segment.length; i_path_k_band ++)\n",
-    "        {\n",
-    "            var i_data_k_band_json = JSON.parse(getJSON(paths_section_k_band_segment[i_path_k_band]));\n",
-    "            var i_data_k_band = {};\n",
-    "            i_data_k_band[\"program_name\"] = i_data_k_band_json[\"section_run\"][\"program_name\"];\n",
-    "            i_data_k_band[\"k_mesh_points\"] = i_data_k_band_json[\"section_run\"][\"section_method\"][\"k_mesh_points\"];\n",
-    "            i_data_k_band[\"simulation_cell\"] = i_data_k_band_json[\"section_run\"][\"section_system\"][0][\"simulation_cell\"];\n",
-    "            i_data_k_band[\"atom_positions\"] = i_data_k_band_json[\"section_run\"][\"section_system\"][0][\"atom_positions\"];\n",
-    "            i_data_k_band[\"atom_labels\"] = i_data_k_band_json[\"section_run\"][\"section_system\"][0][\"atom_labels\"];\n",
-    "            i_data_k_band[\"XC_functional_name\"] = i_data_k_band_json[\"section_run\"][\"section_method\"][\"section_XC_functionals\"][0][\"XC_functional_name\"] + \"-\" + i_data_k_band_json[\"section_run\"][\"section_method\"][\"section_XC_functionals\"][1][\"XC_functional_name\"]\n",
-    "            i_data_k_band[\"path\"] = paths_section_k_band_segment[i_path_k_band];\n",
-    "            data_k_band.push(i_data_k_band);\n",
-    "        }\n",
-    "\n",
-    "        var data_dos = [];\n",
-    "        for(var i_path_dos = 0; i_path_dos < paths_section_dos.length; i_path_dos ++)\n",
-    "        {\n",
-    "            var i_data_dos_json = JSON.parse(getJSON(paths_section_dos[i_path_dos]));\n",
-    "            var i_data_dos = {};\n",
-    "            i_data_dos[\"program_name\"] = i_data_dos_json[\"section_run\"][\"program_name\"];\n",
-    "            i_data_dos[\"k_mesh_points\"] = i_data_dos_json[\"section_run\"][\"section_method\"][\"k_mesh_points\"];\n",
-    "            i_data_dos[\"simulation_cell\"] = i_data_dos_json[\"section_run\"][\"section_system\"][0][\"simulation_cell\"];\n",
-    "            i_data_dos[\"atom_positions\"] = i_data_dos_json[\"section_run\"][\"section_system\"][0][\"atom_positions\"];\n",
-    "            i_data_dos[\"atom_labels\"] = i_data_dos_json[\"section_run\"][\"section_system\"][0][\"atom_labels\"];\n",
-    "            i_data_dos[\"XC_functional_name\"] = i_data_dos_json[\"section_run\"][\"section_method\"][\"section_XC_functionals\"][0][\"XC_functional_name\"] + \"-\" + i_data_dos_json[\"section_run\"][\"section_method\"][\"section_XC_functionals\"][1][\"XC_functional_name\"]\n",
-    "            i_data_dos[\"path\"] = paths_section_dos[i_path_dos];\n",
-    "            data_dos.push(i_data_dos);       \n",
-    "        }\n",
-    "\n",
-    "        //Matching: band[i] ~ dos[i]  (the same systems are arranged with the same index)\n",
-    "        band_paths = [];\n",
-    "        dos_paths = [];\n",
-    "        N_materials = 0;\n",
-    "        for(var i_k_band = 0; i_k_band < data_k_band.length; i_k_band ++)\n",
-    "        {\n",
-    "            for(var i_dos = 0; i_dos < data_dos.length; i_dos ++)\n",
-    "            {\n",
-    "                if(data_k_band[i_k_band][\"program_name\"] != data_dos[i_dos][\"program_name\"])\n",
-    "                    continue;        \n",
-    "                //if(data_k_band[i_k_band][\"k_mesh_points\"].join() != data_dos[i_dos][\"k_mesh_points\"].join())\n",
-    "                //   continue;\n",
-    "                if(data_k_band[i_k_band][\"simulation_cell\"].join() != data_dos[i_dos][\"simulation_cell\"].join())\n",
-    "                    continue;\n",
-    "                if(data_k_band[i_k_band][\"atom_positions\"].join() != data_dos[i_dos][\"atom_positions\"].join())\n",
-    "                    continue;\n",
-    "                if(data_k_band[i_k_band][\"atom_labels\"].join() != data_dos[i_dos][\"atom_labels\"].join())\n",
-    "                    continue;\n",
-    "                if(data_k_band[i_k_band][\"XC_functional_name\"] != data_dos[i_dos][\"XC_functional_name\"])\n",
-    "                    continue;\n",
-    "                band_paths.push(data_k_band[i_k_band][\"path\"]);\n",
-    "                dos_paths.push(data_dos[i_dos][\"path\"]);\n",
-    "                N_materials ++;\n",
-    "            }\n",
-    "        }\n",
-    "        //Pass the arrays to python\n",
-    "\n",
-    "        var command = \"N_materials = \" + N_materials + \";\"\n",
-    "        var kernel = IPython.notebook.kernel;\n",
-    "        command += \"band_paths = \" + \"[\\'\" + band_paths.join(\"\\',\\'\") + \"\\'];\";\n",
-    "        command += \"dos_paths = \" + \"[\\'\" + dos_paths.join(\"\\',\\'\") + \"\\'];\";\n",
-    "        kernel.execute(command);\n",
-    "        \n",
-    "        \n",
-    "    }\n",
-    "\n",
-    "    function get_paths_from_search_results(result_json, div_id_search_results,div_head)\n",
-    "    {\n",
-    "        paths = [];\n",
-    "        search_results_content = [div_head, '<table>', '<tr><th>Chemical formula</th><th>Spacegroup</th><th>Code</th><th>XC functional</th><th>Upload ID</th><th>Calculation ID</th><th>URL</th></tr>'];\n",
-    "        for(var i_key in result_json)\n",
-    "        {\n",
-    "            if(i_key == \"results\")\n",
-    "            {\n",
-    "                for(var system in result_json[i_key])\n",
-    "                {\n",
-    "                    //Get the path to the data files (json): https://labdev-nomad.esc.rzg.mpg.de/fairdi/nomad/migration/api/archive/upload_id/calc_id \n",
-    "                    path = \"https://labdev-nomad.esc.rzg.mpg.de/fairdi/nomad/migration/api/archive/\" + result_json[i_key][system][\"upload_id\"] + \"/\" + result_json[i_key][system][\"calc_id\"]\n",
-    "                    paths.push(path);\n",
-    "                    \n",
-    "                    //Show the results in div\n",
-    "                    // \"formula\" \"spacegroup_symbol\" \"code_name\" \"xc_functional\"\n",
-    "                    content = '<tr>';\n",
-    "                    content += '<td>' + result_json[i_key][system][\"formula\"] + '</td>';\n",
-    "                    content += '<td>' + result_json[i_key][system][\"spacegroup_symbol\"] + '</td>';\n",
-    "                    content += '<td>' + result_json[i_key][system][\"code_name\"] + '</td>';\n",
-    "                    content += '<td>' + result_json[i_key][system][\"xc_functional\"] + '</td>';\n",
-    "                    content += '<td>' + result_json[i_key][system][\"upload_id\"] + '</td>';\n",
-    "                    content += '<td>' + result_json[i_key][system][\"calc_id\"] + '</td>';                    \n",
-    "                    content += '<td>' + path + '</td>';\n",
-    "                    content += '</tr>';\n",
-    "                    search_results_content.push(content);\n",
-    "                }\n",
-    "            }\n",
-    "        }\n",
-    "        search_results_content.push('</table>');\n",
-    "        document.getElementById(div_id_search_results).innerHTML = search_results_content.join('');\n",
-    "        return paths\n",
-    "    }\n",
-    "    \n",
-    "    \n",
-    "    \n",
-    "\n",
-    "    \n",
-    "    \n",
-    "    \n",
-    "    function submit_search()\n",
-    "    {\n",
-    "        \n",
-    "        var result;\n",
-    "        var formula = document.getElementById(\"keyword_chemical_formula\").value;\n",
-    "        var query_command_k_band = \"https://labdev-nomad.esc.rzg.mpg.de/fairdi/nomad/migration/api/repo/?formula=\" + formula + \"&quantities=section_k_band_segment\";\n",
-    "        var query_command_dos =  \"https://labdev-nomad.esc.rzg.mpg.de/fairdi/nomad/migration/api/repo/?formula=\" + formula + \"&quantities=section_dos\";\n",
-    "        //result = getJSON(\"https://labdev-nomad.esc.rzg.mpg.de/fairdi/nomad/migration/api/repo/?quantities=section_k_band_segment\");\n",
-    "        var result_k_band = getJSON(query_command_k_band);\n",
-    "        var result_dos = getJSON(query_command_dos);\n",
-    "        var result_json_k_band = JSON.parse(result_k_band);//parse the searching results to json from URL\n",
-    "        var result_json_dos = JSON.parse(result_dos);\n",
-    "        paths_section_k_band_segment = []; \n",
-    "        paths_section_dos = [];\n",
-    "        paths_section_k_band_segment = get_paths_from_search_results(result_json_k_band, \"search_results_section_k_band_segment\", \"<br><br><font size=4em>Calculations containing band structures:</font><br>\");\n",
-    "        paths_section_dos = get_paths_from_search_results(result_json_dos, \"search_results_section_dos\", \"<br><font size=4em>Calculations containing DOS:</font><br>\");\n",
-    "     \n",
-    "        var promise = Promise.resolve();\n",
-    "        promise\n",
-    "            .then(match_band_dos())\n",
-    "            .then(Jupyter.notebook.execute_cells(window.findCellIndicesByTag('process_band_dos_data')))\n",
-    "            .then(Jupyter.notebook.execute_cells(window.findCellIndicesByTag('show_results_and_plot')));\n",
-    "        \n",
-    "        //match_band_dos();\n",
-    "              \n",
-    "        //Jupyter.notebook.execute_cells(window.findCellIndicesByTag('process_band_dos_data')); //Read the json files, and prepare data for plot\n",
-    "        //Jupyter.notebook.execute_cells(window.findCellIndicesByTag('show_results_and_plot')); //Prepare for plot\n",
-    "    }\n",
-    "    function reset_search()\n",
-    "    {\n",
-    "        Jupyter.notebook.execute_cells(window.findCellIndicesByTag('search_materials'));\n",
-    "        Jupyter.notebook.execute_cells(window.findCellIndicesByTag('show_results_and_plot'));\n",
-    "    }\n",
-    "    \n",
-    "    \n",
-    "</script>\n",
-    "<font size=4em>Please input the chemical formula:</font>\n",
-    "<input type=\"text\" id=\"keyword_chemical_formula\" value=\"AlInO3\"> \n",
-    "<button class=\"button\" onclick=\"submit_search()\">Search</button>\n",
-    "<button class=\"button\" onclick=\"reset_search()\">Reset</button>\n",
-    "<br><br><br>\n",
-    "<div id=\"search_results_section_k_band_segment\"></div>\n",
-    "<div id=\"search_results_section_dos\"></div>\n"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 131,
-   "metadata": {
-    "tags": [
-     "process_band_dos_data"
-    ]
-   },
-   "outputs": [
-    {
-     "data": {
-      "text/html": [
-       "<script>\n",
-       "    var band_obj_all = [];\n",
-       "    var dos_obj_all = [];\n",
-       "    var info_obj_all = [];\n",
-       "    //alert(\"process_band_dos_data: \" +band_paths)\n",
-       "    //alert(\"process_band_dos_data: \" +info_obj_all)\n",
-       "    function get_label_flag(coor_array)\n",
-       "    {\n",
-       "        var coor = coor_array.sort().join();\n",
-       "        if(coor == '0,0.5,0.5')\n",
-       "            return \"X\";\n",
-       "        if(coor == '0,0,0.5')\n",
-       "            return \"M\";\n",
-       "        else if(coor == '0.5,0.5,0.5')\n",
-       "            return \"L\";\n",
-       "        else if(coor == '0.375,0.375,0.75')\n",
-       "            return \"K\";\n",
-       "        else if(coor == '0.25,0.5,0.75')\n",
-       "            return \"W\";\n",
-       "        else if(coor == '0,0,0')\n",
-       "            return \"\\u0393\";\n",
-       "        else if(coor == '0.25,0.625,0.625')\n",
-       "            return \"U\";\n",
-       "        else\n",
-       "        {\n",
-       "            //alert(\"k label not found: \" + coor);\n",
-       "            return \"?\";\n",
-       "        }\n",
-       "    }\n",
-       "\n",
-       "\n",
-       "    //============Process the band structure data============\n",
-       "    function get_band_obj(band_path, dos_fermi_energy)\n",
-       "    {\n",
-       "        var band_data = JSON.parse(getJSON(band_path));\n",
-       "\n",
-       "        //---------Read section_k_band_segment------------\n",
-       "        var section_k_band_segment = band_data['section_run']['section_single_configuration_calculation']['section_k_band'][0]['section_k_band_segment']\n",
-       "\n",
-       "        //--------Get the number of k band segments-------------\n",
-       "        var N_k_band_segments = section_k_band_segment.length;\n",
-       "\n",
-       "\n",
-       "        //----------Get the total number of k points in all segments---------\n",
-       "        var N_k_points_all = 0;\n",
-       "        for(var i = 0; i < N_k_band_segments; i++)\n",
-       "            N_k_points_all = N_k_points_all + section_k_band_segment[i]['band_k_points'].length;\n",
-       "\n",
-       "\n",
-       "        //--------Get the x axis for the band structure figure: the coordinates of k points in 1D\n",
-       "        // store in k_coor_1D[N_k_points_total]-----------------\n",
-       "\n",
-       "        var band_distance_segments = [];\n",
-       "        for(i = 0; i < N_k_band_segments; i++)\n",
-       "        {\n",
-       "            var x1, x2, y1, y2, z1, z2;\n",
-       "            [[x1, y1, z1],[x2, y2, z2]]= section_k_band_segment[i]['band_segm_start_end'];  //\"band_segm_start_end\": [[0.5, 0.0, 0.5],[0.5, 0.25, 0.75]],\n",
-       "            band_distance_segments.push(Math.pow((x1-x2), 2) + Math.pow((y1-y2), 2) + Math.pow((z1-z2), 2));\n",
-       "        }\n",
-       "\n",
-       "\n",
-       "        var band_distance_total = band_distance_segments.reduce((x,y) => x+y); //sum of band_distance_segments\n",
-       "\n",
-       "        var average_N_k_points_per_inverse_distance = N_k_points_all / band_distance_total;\n",
-       "\n",
-       "        //Prepare the parameters to rescale the k coordinates into [0,1]\n",
-       "        var step_k_point = 1.0 / N_k_points_all;\n",
-       "        var step_k_point = (1.0 + step_k_point) / N_k_points_all;\n",
-       "\n",
-       "        var k_coor_1D = [];\n",
-       "        for(var i_k_points = 0; i_k_points < N_k_points_all; i_k_points ++)\n",
-       "        {\n",
-       "            k_coor_1D.push(step_k_point * i_k_points)\n",
-       "        }\n",
-       "\n",
-       "\n",
-       "        //--------Get the eigenvalues of each band trajectory--------------\n",
-       "        /*\n",
-       "        N_k_points_per_segment = len(section_k_band_segment[0]['band_energies'][0]) #suppose the numebr of k points in all the segments are the same\n",
-       "        N_bands = len(section_k_band_segment[0]['band_energies'][0][0])\n",
-       "        band_energies_all = np.zeros((N_bands, N_k_points_all)) #store the eigenvalues\n",
-       "        N_k_points_all = 0\n",
-       "        for i_segments in range(N_k_band_segments):\n",
-       "            band_energies = section_k_band_segment[i_segments]['band_energies']\n",
-       "            N_spin_channel = len(band_energies) #Number of the spin channel --FIXME: no spin polarized\n",
-       "            N_k_points_per_segment = len(band_energies[0])\n",
-       "            for i_k_points in range(N_k_points_per_segment):\n",
-       "                for i_bands in range(N_bands):\n",
-       "                    band_energies_all[i_bands][N_k_points_all] = band_energies[0][i_k_points][i_bands] / (1.60217656535 * pow(10, -19))\n",
-       "                N_k_points_all = N_k_points_all + 1\n",
-       "        */\n",
-       "        //var N_k_points_per_segment = section_k_band_segment[0]['band_energies'][0].length; //suppose the numebr of k points in all the segments are the same\n",
-       "        var N_bands = section_k_band_segment[0]['band_energies'][0][0].length;\n",
-       "        var band_energies_all = new Array(N_bands);\n",
-       "        for(var i_bands = 0; i_bands < N_bands; i_bands ++)\n",
-       "            band_energies_all[i_bands] = new Array(N_k_points_all);// new Array(N_bands, N_k_points_all); //store the eigenvalues\n",
-       "\n",
-       "        var i_k_points_all = 0;\n",
-       "\n",
-       "        for(var i_segments = 0; i_segments < N_k_band_segments; i_segments ++)\n",
-       "        {\n",
-       "            var band_energies = section_k_band_segment[i_segments]['band_energies'];\n",
-       "            var N_spin_channel = band_energies.length; //Number of the spin channel --FIXME: no spin polarized\n",
-       "            var N_k_points_per_segment = band_energies[0].length;\n",
-       "            for(var i_k_points = 0; i_k_points < N_k_points_per_segment; i_k_points ++)\n",
-       "            {\n",
-       "                for(var i_bands = 0; i_bands < N_bands; i_bands ++)\n",
-       "                {\n",
-       "                    band_energies_all[i_bands][i_k_points_all] = band_energies[0][i_k_points][i_bands] / (1.60217656535 * Math.pow(10, -19)) - dos_fermi_energy;\n",
-       "                }\n",
-       "                i_k_points_all = i_k_points_all + 1 ;\n",
-       "\n",
-       "            }\n",
-       "        }\n",
-       "\n",
-       "\n",
-       "\n",
-       "        var N_labels = 0\n",
-       "        for(var i_segments = 0; i_segments < N_k_band_segments; i_segments ++)\n",
-       "        {\n",
-       "            for(var j = 0; j < 2; j++)\n",
-       "                //labels_tmp =  section_k_band_segment[i_segments]['band_segm_start_end'][j];\n",
-       "                N_labels = N_labels + 1\n",
-       "        }\n",
-       "        var label_flag = [];//[\"\" for i in range(N_labels)] //stores the flags of the labels (X, W, G, etc)\n",
-       "\n",
-       "\n",
-       "        var i_label = 0;\n",
-       "        var label_flag_last_final = \"\";\n",
-       "        var label_flag_current_initial = \"\";\n",
-       "        for(var i_segments = 0; i_segments < N_k_band_segments; i_segments ++)\n",
-       "        {\n",
-       "            var labels_coor_0 =  section_k_band_segment[i_segments]['band_segm_start_end'][0].sort();\n",
-       "            var labels_coor_1 =  section_k_band_segment[i_segments]['band_segm_start_end'][1].sort();\n",
-       "\n",
-       "            var label_flag_0 = get_label_flag(labels_coor_0);\n",
-       "            var label_flag_1 = get_label_flag(labels_coor_1);\n",
-       "\n",
-       "            var label_flag_current_initial = label_flag_0;\n",
-       "            if(label_flag_last_final == \"\")\n",
-       "                label_flag_last_final = label_flag_0;\n",
-       "\n",
-       "            if(label_flag_last_final == label_flag_current_initial)\n",
-       "                label_flag[i_label] = label_flag_current_initial;\n",
-       "            else\n",
-       "                label_flag[i_label] = label_flag_last_final + '|' + label_flag_current_initial;\n",
-       "            label_flag_last_final = label_flag_1\n",
-       "\n",
-       "\n",
-       "            i_label = i_label + 1;\n",
-       "            if(i_segments == N_k_band_segments - 1)\n",
-       "            {\n",
-       "                label_flag[i_label] = label_flag_1;\n",
-       "                i_label = i_label + 1;\n",
-       "            }\n",
-       "        }\n",
-       "        N_labels = i_label;\n",
-       "\n",
-       "        //------------Get the coordinates for the labels------------\n",
-       "        //label_coor_abs = np.zeros((N_labels)) #stores the absolute coordinates of the labels\n",
-       "        var label_coor_relative = [];//np.zeros((N_labels))\n",
-       "        for(i_label = 0; i_label < N_labels; i_label ++)\n",
-       "        {\n",
-       "            //Here the evenly-distributed relative coordinates is used, because the coordinates of the labels could be too nerrow when using there absolute coordinates\n",
-       "            //x = labels_coor_0[0]\n",
-       "            //y = labels_coor_0[1]\n",
-       "            //z = labels_coor_0[2]\n",
-       "            //label_coor_abs[i_label] = np.sqrt(x*x+y*y+z*z)\n",
-       "            label_coor_relative.push(step_k_point * N_k_points_per_segment * i_label / (1 + 1.0 / N_k_points_all));\n",
-       "        }\n",
-       "        //----Store the label-----------\n",
-       "        var label_obj = [];//[['' for i in range(2)] for j in range(N_labels)]\n",
-       "        for(i_label = 0; i_label < N_labels; i_label ++)\n",
-       "        {\n",
-       "            label_obj.push([label_coor_relative[i_label], label_flag[i_label]]);\n",
-       "        }\n",
-       "\n",
-       "\n",
-       "        //-------Get VBM, CBM----------------\n",
-       "\n",
-       "        var HOMO = -1000;\n",
-       "        var LUMO = 1000;\n",
-       "        var coor_k_point_HOMO = []; //the coordinate of k point that stores HOMO\n",
-       "        var coor_k_point_LUMO = [];//np.zeros((3)) #the coordinate of k point that stores LUMO\n",
-       "        //band_gap_direct = 0.0\n",
-       "        var band_gap_indirect = 0.0;\n",
-       "\n",
-       "\n",
-       "        //band_energy_max = np.amax(band_energies[0])/ (1.60217656535* pow(10,-19))\n",
-       "        //band_energy_min = np.amin(band_energies[0])/ (1.60217656535* pow(10,-19))\n",
-       "        var band_energy_max = 10;\n",
-       "        var band_energy_min = -10;\n",
-       "        //N_band_energy_index = 10000\n",
-       "        //band_energy_step = (band_energy_max - band_energy_min) / N_band_energy_index\n",
-       "        //N_allowed_states = np.zeros(N_band_energy_index + 1)\n",
-       "        //i_index_fermi = math.floor((0 - band_energy_min) / band_energy_step) #the index that stores states at the Fermi level\n",
-       "\n",
-       "\n",
-       "        for(var i_bands = 0; i_bands < N_bands; i_bands ++)\n",
-       "        {\n",
-       "            for(var i_k_points_all = 0; i_k_points_all< N_k_points_all; i_k_points_all ++)\n",
-       "            {\n",
-       "                //i_band_index = math.floor((band_energies_all[i_bands][i_k_points_all] - band_energy_min) / band_energy_step)\n",
-       "                //N_allowed_states[index_band_energy] = N_allowed_states[index_band_energy] + 1\n",
-       "                var band_energy = band_energies_all[i_bands][i_k_points_all];\n",
-       "                if(band_energy > 0)\n",
-       "                {\n",
-       "                    if(band_energy < LUMO)\n",
-       "                        LUMO = band_energy;\n",
-       "                }\n",
-       "                else\n",
-       "                {\n",
-       "                    if(band_energy > HOMO)\n",
-       "                        HOMO = band_energy;\n",
-       "                }\n",
-       "\n",
-       "            }\n",
-       "        }\n",
-       "\n",
-       "\n",
-       "        //#for i_band_index in range(i_index_fermi, N_band_energy_index): #get LUMO\n",
-       "        //    if(N_allowed_states[i_band_index] > 0):\n",
-       "        //        LUMO = band_energy_min + band_energy_step * i_band_index\n",
-       "        //print('HOMO, LUMO: ',HOMO, LUMO)\n",
-       "        band_gap_indirect = Math.abs(LUMO - HOMO);\n",
-       "\n",
-       "        if(band_gap_indirect < 0.5) //VBM and CBM has to be found in another way for metals/charged system:\n",
-       "        {\n",
-       "            HOMO = -1000.0;\n",
-       "            LUMO = 1000.0;\n",
-       "            band_energy_max = 10.0;\n",
-       "            band_energy_min = 0.0;\n",
-       "            var N_band_energy_index = 10000;\n",
-       "            var band_energy_step = (band_energy_max - band_energy_min) / N_band_energy_index;\n",
-       "            var N_allowed_states = [];\n",
-       "            for(var i_state = 0; i_state < N_band_energy_index+1; i_state++)\n",
-       "                N_allowed_states.push(0);\n",
-       "\n",
-       "\n",
-       "            //get the DOS and store in N_allowed_states[]\n",
-       "            for(var i_k_points_all = 0; i_k_points_all < N_k_points_all; i_k_points_all ++)\n",
-       "            {\n",
-       "                for(var i_bands = 0; i_bands < N_bands; i_bands ++)\n",
-       "                {\n",
-       "                    var band_energy = band_energies_all[i_bands][i_k_points_all];\n",
-       "                    if((band_energy_min < band_energy)&&(band_energy < band_energy_max))\n",
-       "                    {\n",
-       "                        var i_band_index = Math.floor((band_energy - band_energy_min) / band_energy_step);\n",
-       "                        N_allowed_states[i_band_index] = N_allowed_states[i_band_index] + 1;\n",
-       "                    }\n",
-       "                }\n",
-       "            }\n",
-       "\n",
-       "\n",
-       "            var if_gapped = 0;\n",
-       "            for(var i_band_index = 0; i_band_index < N_band_energy_index; i_band_index ++)//go through the energy levels from the bottom\n",
-       "            {\n",
-       "                var band_energy = band_energy_min + band_energy_step * i_band_index\n",
-       "                if(N_allowed_states[i_band_index] == 0)\n",
-       "                    if_gapped = if_gapped + 1;\n",
-       "                if((band_energy > band_energy_max - 0.5) && (if_gapped == 0))\n",
-       "                {\n",
-       "                    //alert(\"No gap found in this system. It seems to be a metal.\");\n",
-       "                    HOMO = 1000;\n",
-       "                    LUMO = 1000;\n",
-       "                    break;\n",
-       "                }\n",
-       "                //print(\"At \", band_energy,\": # allowed states = \", N_allowed_states[i_band_index],\" if_gapped = \", if_gapped)\n",
-       "\n",
-       "                if(N_allowed_states[i_band_index] > 0)\n",
-       "                {\n",
-       "                    if(if_gapped * band_energy_step > 0.3 )//above VBM-CBM gap: LUMO\n",
-       "                    {\n",
-       "                        if(band_energy < LUMO)\n",
-       "                        {\n",
-       "                            //print(\"LUMO got!\")\n",
-       "                            LUMO = band_energy;\n",
-       "                            break; //break before touching another gap that is above the band gap\n",
-       "                        }\n",
-       "                    }\n",
-       "\n",
-       "                    if(if_gapped * band_energy_step < 0.3) //below VBM-CBM gap: HOMO\n",
-       "                    {\n",
-       "                        if(band_energy > HOMO)\n",
-       "                        {\n",
-       "                            //print(\"HOMO got!\")\n",
-       "                            HOMO = band_energy;\n",
-       "                        }\n",
-       "                    }        \n",
-       "                    if_gapped = 0;\n",
-       "                }\n",
-       "            }\n",
-       "            //alert('HOMO, LUMO for metal/charged system: '+ HOMO +\",\"+LUMO)\n",
-       "\n",
-       "        }\n",
-       "\n",
-       "\n",
-       "\n",
-       "\n",
-       "        //Find the position of HOMO, LUMO\n",
-       "        var coor_k_point_HOMO = 0, coor_k_point_LUMO = 0;\n",
-       "        for(var i_k_points = 0; i_k_points < N_k_points_all; i_k_points++)\n",
-       "        {\n",
-       "            for(var i_bands = 0; i_bands < N_bands; i_bands ++)\n",
-       "            {\n",
-       "                if(Math.abs(band_energies_all[i_bands][i_k_points] - HOMO) < 0.001)\n",
-       "                    coor_k_point_HOMO = k_coor_1D[i_k_points];\n",
-       "                if(Math.abs(band_energies_all[i_bands][i_k_points] - LUMO) < 0.001)\n",
-       "                    coor_k_point_LUMO = k_coor_1D[i_k_points]; \n",
-       "            }\n",
-       "        }\n",
-       "\n",
-       "        //alert(coor_k_point_HOMO +\",\" + coor_k_point_LUMO);\n",
-       "\n",
-       "\n",
-       "        //Store the band data to band_obj\n",
-       "\n",
-       "        var band_obj = {};\n",
-       "        band_obj[\"band_x_axis\"] = k_coor_1D;\n",
-       "        band_obj[\"band_y_axis\"] = band_energies_all\n",
-       "        band_obj[\"labels\"] = label_obj;\n",
-       "        band_obj[\"HOMO_energy\"] = HOMO;\n",
-       "        band_obj[\"HOMO_coor\"] = coor_k_point_HOMO;\n",
-       "        band_obj[\"LUMO_energy\"] = LUMO;\n",
-       "        band_obj[\"LUMO_coor\"] = coor_k_point_LUMO;\n",
-       "        band_obj[\"average_N_k_points_per_inverse_distance\"] = average_N_k_points_per_inverse_distance;\n",
-       "\n",
-       "\n",
-       "        return band_obj\n",
-       "\n",
-       "    }\n",
-       "\n",
-       "\n",
-       "    function get_dos_obj(dos_path)\n",
-       "    {\n",
-       "\n",
-       "        var dos_data = JSON.parse(getJSON(dos_path));\n",
-       "\n",
-       "        var N_dos_values = dos_data['section_run']['section_single_configuration_calculation']['section_dos'][0]['dos_energies'].length;\n",
-       "\n",
-       "        //in new parser, it seems that the spin channel of 'dos_energies' disappears: Shape: [ number_of_dos_values ]\n",
-       "\n",
-       "        //dos_energies = new Array(N_dos_values).fill(0.0);\n",
-       "        //dos_energies_tmp = new Array(N_dos_values).fill(0.0) #tmp array for unit convertion\n",
-       "        //dos_values = new Array(N_dos_values).fill(0.0)\n",
-       "\n",
-       "        var dos_energies = dos_data['section_run']['section_single_configuration_calculation']['section_dos'][0]['dos_energies'];\n",
-       "        var dos_values =  dos_data['section_run']['section_single_configuration_calculation']['section_dos'][0]['dos_integrated_values'];//[0]\n",
-       "\n",
-       "        //To do: check if every section_dos has 'dos_fermi_energy'\n",
-       "        var dos_fermi_energy = dos_data['section_run']['section_single_configuration_calculation']['section_dos'][0]['dos_fermi_energy'];\n",
-       "        dos_fermi_energy = dos_fermi_energy  / (1.60217656535 * Math.pow(10,-19));\n",
-       "        \n",
-       "        for(var i = 0; i < N_dos_values; i++)\n",
-       "        {\n",
-       "            dos_energies[i] = dos_energies[i] / (1.60217656535 * Math.pow(10,-19)) - dos_fermi_energy;\n",
-       "        }\n",
-       "        \n",
-       "        dos_obj = {}\n",
-       "        dos_obj[\"dos_x_axis\"] = dos_energies;\n",
-       "        dos_obj[\"dos_y_axis\"] = dos_values;\n",
-       "        dos_obj[\"dos_fermi_energy\"] = dos_fermi_energy;\n",
-       "        return dos_obj\n",
-       "    }\n",
-       "    function get_info_obj(band_path)\n",
-       "    {\n",
-       "\n",
-       "        var band_data = JSON.parse(getJSON(band_path));\n",
-       "        var info_obj = {};\n",
-       "        //---------Read the information of the calculation--------\n",
-       "        info_obj[\"program_name\"] = band_data[\"section_run\"][\"program_name\"];\n",
-       "        info_obj[\"program_basis_set_type\"] = band_data[\"section_run\"][\"program_basis_set_type\"];\n",
-       "        info_obj[\"atom_labels\"] = band_data[\"section_run\"][\"section_system\"][0][\"atom_labels\"];\n",
-       "        info_obj[\"XC_functional_name\"] = band_data[\"section_run\"][\"section_method\"][\"section_XC_functionals\"][0][\"XC_functional_name\"] + \" + \"+ band_data[\"section_run\"][\"section_method\"][\"section_XC_functionals\"][1][\"XC_functional_name\"];\n",
-       "\n",
-       "        //----------Get the space group information----------\n",
-       "        /*\n",
-       "        [space_group_symbol, lattice_constant] = get_space_group(band_data);\n",
-       "        info_obj[\"space_group_symbol\"] = np.array(space_group_symbol).tolist();\n",
-       "        info_obj[\"lattice_constant\"] = np.array(lattice_constant).tolist();\n",
-       "        */\n",
-       "\n",
-       "        return info_obj\n",
-       "    }\n",
-       "    function process_band_dos_data()\n",
-       "    {\n",
-       "        info_all = [];\n",
-       "        band_obj_all = [];\n",
-       "        dos_obj_all = [];\n",
-       "\n",
-       "        for(var i = 0; i < N_materials; i++)\n",
-       "        {\n",
-       "            var band_path = band_paths[i];\n",
-       "            var dos_path = dos_paths[i];\n",
-       "\n",
-       "\n",
-       "            var dos_obj = get_dos_obj(dos_path);\n",
-       "            var dos_fermi_energy = dos_obj[\"dos_fermi_energy\"];\n",
-       "            band_obj = get_band_obj(band_path, dos_fermi_energy);\n",
-       "            var info_obj = get_info_obj(band_path);\n",
-       "\n",
-       "            band_obj_all.push(band_obj);\n",
-       "            dos_obj_all.push(dos_obj);\n",
-       "            info_obj_all.push(info_obj);\n",
-       "        }\n",
-       "    }\n",
-       "    process_band_dos_data();\n",
-       "    //alert(\"process_band_dos_data: info_obj_all: \"+JSON.stringify(info_obj_all));\n",
-       "</script>\n"
-      ],
-      "text/plain": [
-       "<IPython.core.display.HTML object>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "%%HTML\n",
-    "<script>\n",
-    "    var band_obj_all = [];\n",
-    "    var dos_obj_all = [];\n",
-    "    var info_obj_all = [];\n",
-    "    //alert(\"process_band_dos_data: \" +band_paths)\n",
-    "    //alert(\"process_band_dos_data: \" +info_obj_all)\n",
-    "    function get_label_flag(coor_array)\n",
-    "    {\n",
-    "        var coor = coor_array.sort().join();\n",
-    "        if(coor == '0,0.5,0.5')\n",
-    "            return \"X\";\n",
-    "        if(coor == '0,0,0.5')\n",
-    "            return \"M\";\n",
-    "        else if(coor == '0.5,0.5,0.5')\n",
-    "            return \"L\";\n",
-    "        else if(coor == '0.375,0.375,0.75')\n",
-    "            return \"K\";\n",
-    "        else if(coor == '0.25,0.5,0.75')\n",
-    "            return \"W\";\n",
-    "        else if(coor == '0,0,0')\n",
-    "            return \"\\u0393\";\n",
-    "        else if(coor == '0.25,0.625,0.625')\n",
-    "            return \"U\";\n",
-    "        else\n",
-    "        {\n",
-    "            //alert(\"k label not found: \" + coor);\n",
-    "            return \"?\";\n",
-    "        }\n",
-    "    }\n",
-    "\n",
-    "\n",
-    "    //============Process the band structure data============\n",
-    "    function get_band_obj(band_path, dos_fermi_energy)\n",
-    "    {\n",
-    "        var band_data = JSON.parse(getJSON(band_path));\n",
-    "\n",
-    "        //---------Read section_k_band_segment------------\n",
-    "        var section_k_band_segment = band_data['section_run']['section_single_configuration_calculation']['section_k_band'][0]['section_k_band_segment']\n",
-    "\n",
-    "        //--------Get the number of k band segments-------------\n",
-    "        var N_k_band_segments = section_k_band_segment.length;\n",
-    "\n",
-    "\n",
-    "        //----------Get the total number of k points in all segments---------\n",
-    "        var N_k_points_all = 0;\n",
-    "        for(var i = 0; i < N_k_band_segments; i++)\n",
-    "            N_k_points_all = N_k_points_all + section_k_band_segment[i]['band_k_points'].length;\n",
-    "\n",
-    "\n",
-    "        //--------Get the x axis for the band structure figure: the coordinates of k points in 1D\n",
-    "        // store in k_coor_1D[N_k_points_total]-----------------\n",
-    "\n",
-    "        var band_distance_segments = [];\n",
-    "        for(i = 0; i < N_k_band_segments; i++)\n",
-    "        {\n",
-    "            var x1, x2, y1, y2, z1, z2;\n",
-    "            [[x1, y1, z1],[x2, y2, z2]]= section_k_band_segment[i]['band_segm_start_end'];  //\"band_segm_start_end\": [[0.5, 0.0, 0.5],[0.5, 0.25, 0.75]],\n",
-    "            band_distance_segments.push(Math.pow((x1-x2), 2) + Math.pow((y1-y2), 2) + Math.pow((z1-z2), 2));\n",
-    "        }\n",
-    "\n",
-    "\n",
-    "        var band_distance_total = band_distance_segments.reduce((x,y) => x+y); //sum of band_distance_segments\n",
-    "\n",
-    "        var average_N_k_points_per_inverse_distance = N_k_points_all / band_distance_total;\n",
-    "\n",
-    "        //Prepare the parameters to rescale the k coordinates into [0,1]\n",
-    "        var step_k_point = 1.0 / N_k_points_all;\n",
-    "        var step_k_point = (1.0 + step_k_point) / N_k_points_all;\n",
-    "\n",
-    "        var k_coor_1D = [];\n",
-    "        for(var i_k_points = 0; i_k_points < N_k_points_all; i_k_points ++)\n",
-    "        {\n",
-    "            k_coor_1D.push(step_k_point * i_k_points)\n",
-    "        }\n",
-    "\n",
-    "\n",
-    "        //--------Get the eigenvalues of each band trajectory--------------\n",
-    "        /*\n",
-    "        N_k_points_per_segment = len(section_k_band_segment[0]['band_energies'][0]) #suppose the numebr of k points in all the segments are the same\n",
-    "        N_bands = len(section_k_band_segment[0]['band_energies'][0][0])\n",
-    "        band_energies_all = np.zeros((N_bands, N_k_points_all)) #store the eigenvalues\n",
-    "        N_k_points_all = 0\n",
-    "        for i_segments in range(N_k_band_segments):\n",
-    "            band_energies = section_k_band_segment[i_segments]['band_energies']\n",
-    "            N_spin_channel = len(band_energies) #Number of the spin channel --FIXME: no spin polarized\n",
-    "            N_k_points_per_segment = len(band_energies[0])\n",
-    "            for i_k_points in range(N_k_points_per_segment):\n",
-    "                for i_bands in range(N_bands):\n",
-    "                    band_energies_all[i_bands][N_k_points_all] = band_energies[0][i_k_points][i_bands] / (1.60217656535 * pow(10, -19))\n",
-    "                N_k_points_all = N_k_points_all + 1\n",
-    "        */\n",
-    "        //var N_k_points_per_segment = section_k_band_segment[0]['band_energies'][0].length; //suppose the numebr of k points in all the segments are the same\n",
-    "        var N_bands = section_k_band_segment[0]['band_energies'][0][0].length;\n",
-    "        var band_energies_all = new Array(N_bands);\n",
-    "        for(var i_bands = 0; i_bands < N_bands; i_bands ++)\n",
-    "            band_energies_all[i_bands] = new Array(N_k_points_all);// new Array(N_bands, N_k_points_all); //store the eigenvalues\n",
-    "\n",
-    "        var i_k_points_all = 0;\n",
-    "\n",
-    "        for(var i_segments = 0; i_segments < N_k_band_segments; i_segments ++)\n",
-    "        {\n",
-    "            var band_energies = section_k_band_segment[i_segments]['band_energies'];\n",
-    "            var N_spin_channel = band_energies.length; //Number of the spin channel --FIXME: no spin polarized\n",
-    "            var N_k_points_per_segment = band_energies[0].length;\n",
-    "            for(var i_k_points = 0; i_k_points < N_k_points_per_segment; i_k_points ++)\n",
-    "            {\n",
-    "                for(var i_bands = 0; i_bands < N_bands; i_bands ++)\n",
-    "                {\n",
-    "                    band_energies_all[i_bands][i_k_points_all] = band_energies[0][i_k_points][i_bands] / (1.60217656535 * Math.pow(10, -19)) - dos_fermi_energy;\n",
-    "                }\n",
-    "                i_k_points_all = i_k_points_all + 1 ;\n",
-    "\n",
-    "            }\n",
-    "        }\n",
-    "\n",
-    "\n",
-    "\n",
-    "        var N_labels = 0\n",
-    "        for(var i_segments = 0; i_segments < N_k_band_segments; i_segments ++)\n",
-    "        {\n",
-    "            for(var j = 0; j < 2; j++)\n",
-    "                //labels_tmp =  section_k_band_segment[i_segments]['band_segm_start_end'][j];\n",
-    "                N_labels = N_labels + 1\n",
-    "        }\n",
-    "        var label_flag = [];//[\"\" for i in range(N_labels)] //stores the flags of the labels (X, W, G, etc)\n",
-    "\n",
-    "\n",
-    "        var i_label = 0;\n",
-    "        var label_flag_last_final = \"\";\n",
-    "        var label_flag_current_initial = \"\";\n",
-    "        for(var i_segments = 0; i_segments < N_k_band_segments; i_segments ++)\n",
-    "        {\n",
-    "            var labels_coor_0 =  section_k_band_segment[i_segments]['band_segm_start_end'][0].sort();\n",
-    "            var labels_coor_1 =  section_k_band_segment[i_segments]['band_segm_start_end'][1].sort();\n",
-    "\n",
-    "            var label_flag_0 = get_label_flag(labels_coor_0);\n",
-    "            var label_flag_1 = get_label_flag(labels_coor_1);\n",
-    "\n",
-    "            var label_flag_current_initial = label_flag_0;\n",
-    "            if(label_flag_last_final == \"\")\n",
-    "                label_flag_last_final = label_flag_0;\n",
-    "\n",
-    "            if(label_flag_last_final == label_flag_current_initial)\n",
-    "                label_flag[i_label] = label_flag_current_initial;\n",
-    "            else\n",
-    "                label_flag[i_label] = label_flag_last_final + '|' + label_flag_current_initial;\n",
-    "            label_flag_last_final = label_flag_1\n",
-    "\n",
-    "\n",
-    "            i_label = i_label + 1;\n",
-    "            if(i_segments == N_k_band_segments - 1)\n",
-    "            {\n",
-    "                label_flag[i_label] = label_flag_1;\n",
-    "                i_label = i_label + 1;\n",
-    "            }\n",
-    "        }\n",
-    "        N_labels = i_label;\n",
-    "\n",
-    "        //------------Get the coordinates for the labels------------\n",
-    "        //label_coor_abs = np.zeros((N_labels)) #stores the absolute coordinates of the labels\n",
-    "        var label_coor_relative = [];//np.zeros((N_labels))\n",
-    "        for(i_label = 0; i_label < N_labels; i_label ++)\n",
-    "        {\n",
-    "            //Here the evenly-distributed relative coordinates is used, because the coordinates of the labels could be too nerrow when using there absolute coordinates\n",
-    "            //x = labels_coor_0[0]\n",
-    "            //y = labels_coor_0[1]\n",
-    "            //z = labels_coor_0[2]\n",
-    "            //label_coor_abs[i_label] = np.sqrt(x*x+y*y+z*z)\n",
-    "            label_coor_relative.push(step_k_point * N_k_points_per_segment * i_label / (1 + 1.0 / N_k_points_all));\n",
-    "        }\n",
-    "        //----Store the label-----------\n",
-    "        var label_obj = [];//[['' for i in range(2)] for j in range(N_labels)]\n",
-    "        for(i_label = 0; i_label < N_labels; i_label ++)\n",
-    "        {\n",
-    "            label_obj.push([label_coor_relative[i_label], label_flag[i_label]]);\n",
-    "        }\n",
-    "\n",
-    "\n",
-    "        //-------Get VBM, CBM----------------\n",
-    "\n",
-    "        var HOMO = -1000;\n",
-    "        var LUMO = 1000;\n",
-    "        var coor_k_point_HOMO = []; //the coordinate of k point that stores HOMO\n",
-    "        var coor_k_point_LUMO = [];//np.zeros((3)) #the coordinate of k point that stores LUMO\n",
-    "        //band_gap_direct = 0.0\n",
-    "        var band_gap_indirect = 0.0;\n",
-    "\n",
-    "\n",
-    "        //band_energy_max = np.amax(band_energies[0])/ (1.60217656535* pow(10,-19))\n",
-    "        //band_energy_min = np.amin(band_energies[0])/ (1.60217656535* pow(10,-19))\n",
-    "        var band_energy_max = 10;\n",
-    "        var band_energy_min = -10;\n",
-    "        //N_band_energy_index = 10000\n",
-    "        //band_energy_step = (band_energy_max - band_energy_min) / N_band_energy_index\n",
-    "        //N_allowed_states = np.zeros(N_band_energy_index + 1)\n",
-    "        //i_index_fermi = math.floor((0 - band_energy_min) / band_energy_step) #the index that stores states at the Fermi level\n",
-    "\n",
-    "\n",
-    "        for(var i_bands = 0; i_bands < N_bands; i_bands ++)\n",
-    "        {\n",
-    "            for(var i_k_points_all = 0; i_k_points_all< N_k_points_all; i_k_points_all ++)\n",
-    "            {\n",
-    "                //i_band_index = math.floor((band_energies_all[i_bands][i_k_points_all] - band_energy_min) / band_energy_step)\n",
-    "                //N_allowed_states[index_band_energy] = N_allowed_states[index_band_energy] + 1\n",
-    "                var band_energy = band_energies_all[i_bands][i_k_points_all];\n",
-    "                if(band_energy > 0)\n",
-    "                {\n",
-    "                    if(band_energy < LUMO)\n",
-    "                        LUMO = band_energy;\n",
-    "                }\n",
-    "                else\n",
-    "                {\n",
-    "                    if(band_energy > HOMO)\n",
-    "                        HOMO = band_energy;\n",
-    "                }\n",
-    "\n",
-    "            }\n",
-    "        }\n",
-    "\n",
-    "\n",
-    "        //#for i_band_index in range(i_index_fermi, N_band_energy_index): #get LUMO\n",
-    "        //    if(N_allowed_states[i_band_index] > 0):\n",
-    "        //        LUMO = band_energy_min + band_energy_step * i_band_index\n",
-    "        //print('HOMO, LUMO: ',HOMO, LUMO)\n",
-    "        band_gap_indirect = Math.abs(LUMO - HOMO);\n",
-    "\n",
-    "        if(band_gap_indirect < 0.5) //VBM and CBM has to be found in another way for metals/charged system:\n",
-    "        {\n",
-    "            HOMO = -1000.0;\n",
-    "            LUMO = 1000.0;\n",
-    "            band_energy_max = 10.0;\n",
-    "            band_energy_min = 0.0;\n",
-    "            var N_band_energy_index = 10000;\n",
-    "            var band_energy_step = (band_energy_max - band_energy_min) / N_band_energy_index;\n",
-    "            var N_allowed_states = [];\n",
-    "            for(var i_state = 0; i_state < N_band_energy_index+1; i_state++)\n",
-    "                N_allowed_states.push(0);\n",
-    "\n",
-    "\n",
-    "            //get the DOS and store in N_allowed_states[]\n",
-    "            for(var i_k_points_all = 0; i_k_points_all < N_k_points_all; i_k_points_all ++)\n",
-    "            {\n",
-    "                for(var i_bands = 0; i_bands < N_bands; i_bands ++)\n",
-    "                {\n",
-    "                    var band_energy = band_energies_all[i_bands][i_k_points_all];\n",
-    "                    if((band_energy_min < band_energy)&&(band_energy < band_energy_max))\n",
-    "                    {\n",
-    "                        var i_band_index = Math.floor((band_energy - band_energy_min) / band_energy_step);\n",
-    "                        N_allowed_states[i_band_index] = N_allowed_states[i_band_index] + 1;\n",
-    "                    }\n",
-    "                }\n",
-    "            }\n",
-    "\n",
-    "\n",
-    "            var if_gapped = 0;\n",
-    "            for(var i_band_index = 0; i_band_index < N_band_energy_index; i_band_index ++)//go through the energy levels from the bottom\n",
-    "            {\n",
-    "                var band_energy = band_energy_min + band_energy_step * i_band_index\n",
-    "                if(N_allowed_states[i_band_index] == 0)\n",
-    "                    if_gapped = if_gapped + 1;\n",
-    "                if((band_energy > band_energy_max - 0.5) && (if_gapped == 0))\n",
-    "                {\n",
-    "                    //alert(\"No gap found in this system. It seems to be a metal.\");\n",
-    "                    HOMO = 1000;\n",
-    "                    LUMO = 1000;\n",
-    "                    break;\n",
-    "                }\n",
-    "                //print(\"At \", band_energy,\": # allowed states = \", N_allowed_states[i_band_index],\" if_gapped = \", if_gapped)\n",
-    "\n",
-    "                if(N_allowed_states[i_band_index] > 0)\n",
-    "                {\n",
-    "                    if(if_gapped * band_energy_step > 0.3 )//above VBM-CBM gap: LUMO\n",
-    "                    {\n",
-    "                        if(band_energy < LUMO)\n",
-    "                        {\n",
-    "                            //print(\"LUMO got!\")\n",
-    "                            LUMO = band_energy;\n",
-    "                            break; //break before touching another gap that is above the band gap\n",
-    "                        }\n",
-    "                    }\n",
-    "\n",
-    "                    if(if_gapped * band_energy_step < 0.3) //below VBM-CBM gap: HOMO\n",
-    "                    {\n",
-    "                        if(band_energy > HOMO)\n",
-    "                        {\n",
-    "                            //print(\"HOMO got!\")\n",
-    "                            HOMO = band_energy;\n",
-    "                        }\n",
-    "                    }        \n",
-    "                    if_gapped = 0;\n",
-    "                }\n",
-    "            }\n",
-    "            //alert('HOMO, LUMO for metal/charged system: '+ HOMO +\",\"+LUMO)\n",
-    "\n",
-    "        }\n",
-    "\n",
-    "\n",
-    "\n",
-    "\n",
-    "        //Find the position of HOMO, LUMO\n",
-    "        var coor_k_point_HOMO = 0, coor_k_point_LUMO = 0;\n",
-    "        for(var i_k_points = 0; i_k_points < N_k_points_all; i_k_points++)\n",
-    "        {\n",
-    "            for(var i_bands = 0; i_bands < N_bands; i_bands ++)\n",
-    "            {\n",
-    "                if(Math.abs(band_energies_all[i_bands][i_k_points] - HOMO) < 0.001)\n",
-    "                    coor_k_point_HOMO = k_coor_1D[i_k_points];\n",
-    "                if(Math.abs(band_energies_all[i_bands][i_k_points] - LUMO) < 0.001)\n",
-    "                    coor_k_point_LUMO = k_coor_1D[i_k_points]; \n",
-    "            }\n",
-    "        }\n",
-    "\n",
-    "        //alert(coor_k_point_HOMO +\",\" + coor_k_point_LUMO);\n",
-    "\n",
-    "\n",
-    "        //Store the band data to band_obj\n",
-    "\n",
-    "        var band_obj = {};\n",
-    "        band_obj[\"band_x_axis\"] = k_coor_1D;\n",
-    "        band_obj[\"band_y_axis\"] = band_energies_all\n",
-    "        band_obj[\"labels\"] = label_obj;\n",
-    "        band_obj[\"HOMO_energy\"] = HOMO;\n",
-    "        band_obj[\"HOMO_coor\"] = coor_k_point_HOMO;\n",
-    "        band_obj[\"LUMO_energy\"] = LUMO;\n",
-    "        band_obj[\"LUMO_coor\"] = coor_k_point_LUMO;\n",
-    "        band_obj[\"average_N_k_points_per_inverse_distance\"] = average_N_k_points_per_inverse_distance;\n",
-    "\n",
-    "\n",
-    "        return band_obj\n",
-    "\n",
-    "    }\n",
-    "\n",
-    "\n",
-    "    function get_dos_obj(dos_path)\n",
-    "    {\n",
-    "\n",
-    "        var dos_data = JSON.parse(getJSON(dos_path));\n",
-    "\n",
-    "        var N_dos_values = dos_data['section_run']['section_single_configuration_calculation']['section_dos'][0]['dos_energies'].length;\n",
-    "\n",
-    "        //in new parser, it seems that the spin channel of 'dos_energies' disappears: Shape: [ number_of_dos_values ]\n",
-    "\n",
-    "        //dos_energies = new Array(N_dos_values).fill(0.0);\n",
-    "        //dos_energies_tmp = new Array(N_dos_values).fill(0.0) #tmp array for unit convertion\n",
-    "        //dos_values = new Array(N_dos_values).fill(0.0)\n",
-    "\n",
-    "        var dos_energies = dos_data['section_run']['section_single_configuration_calculation']['section_dos'][0]['dos_energies'];\n",
-    "        var dos_values =  dos_data['section_run']['section_single_configuration_calculation']['section_dos'][0]['dos_integrated_values'];//[0]\n",
-    "\n",
-    "        //To do: check if every section_dos has 'dos_fermi_energy'\n",
-    "        var dos_fermi_energy = dos_data['section_run']['section_single_configuration_calculation']['section_dos'][0]['dos_fermi_energy'];\n",
-    "        dos_fermi_energy = dos_fermi_energy  / (1.60217656535 * Math.pow(10,-19));\n",
-    "        \n",
-    "        for(var i = 0; i < N_dos_values; i++)\n",
-    "        {\n",
-    "            dos_energies[i] = dos_energies[i] / (1.60217656535 * Math.pow(10,-19)) - dos_fermi_energy;\n",
-    "        }\n",
-    "        \n",
-    "        dos_obj = {}\n",
-    "        dos_obj[\"dos_x_axis\"] = dos_energies;\n",
-    "        dos_obj[\"dos_y_axis\"] = dos_values;\n",
-    "        dos_obj[\"dos_fermi_energy\"] = dos_fermi_energy;\n",
-    "        return dos_obj\n",
-    "    }\n",
-    "    function get_info_obj(band_path)\n",
-    "    {\n",
-    "\n",
-    "        var band_data = JSON.parse(getJSON(band_path));\n",
-    "        var info_obj = {};\n",
-    "        //---------Read the information of the calculation--------\n",
-    "        info_obj[\"program_name\"] = band_data[\"section_run\"][\"program_name\"];\n",
-    "        info_obj[\"program_basis_set_type\"] = band_data[\"section_run\"][\"program_basis_set_type\"];\n",
-    "        info_obj[\"atom_labels\"] = band_data[\"section_run\"][\"section_system\"][0][\"atom_labels\"];\n",
-    "        info_obj[\"XC_functional_name\"] = band_data[\"section_run\"][\"section_method\"][\"section_XC_functionals\"][0][\"XC_functional_name\"] + \" + \"+ band_data[\"section_run\"][\"section_method\"][\"section_XC_functionals\"][1][\"XC_functional_name\"];\n",
-    "\n",
-    "        //----------Get the space group information----------\n",
-    "        /*\n",
-    "        [space_group_symbol, lattice_constant] = get_space_group(band_data);\n",
-    "        info_obj[\"space_group_symbol\"] = np.array(space_group_symbol).tolist();\n",
-    "        info_obj[\"lattice_constant\"] = np.array(lattice_constant).tolist();\n",
-    "        */\n",
-    "\n",
-    "        return info_obj\n",
-    "    }\n",
-    "    function process_band_dos_data()\n",
-    "    {\n",
-    "        info_all = [];\n",
-    "        band_obj_all = [];\n",
-    "        dos_obj_all = [];\n",
-    "\n",
-    "        for(var i = 0; i < N_materials; i++)\n",
-    "        {\n",
-    "            var band_path = band_paths[i];\n",
-    "            var dos_path = dos_paths[i];\n",
-    "\n",
-    "\n",
-    "            var dos_obj = get_dos_obj(dos_path);\n",
-    "            var dos_fermi_energy = dos_obj[\"dos_fermi_energy\"];\n",
-    "            band_obj = get_band_obj(band_path, dos_fermi_energy);\n",
-    "            var info_obj = get_info_obj(band_path);\n",
-    "\n",
-    "            band_obj_all.push(band_obj);\n",
-    "            dos_obj_all.push(dos_obj);\n",
-    "            info_obj_all.push(info_obj);\n",
-    "        }\n",
-    "    }\n",
-    "    process_band_dos_data();\n",
-    "    //alert(\"process_band_dos_data: info_obj_all: \"+JSON.stringify(info_obj_all));\n",
-    "</script>"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 132,
-   "metadata": {
-    "scrolled": false,
-    "tags": [
-     "show_results_and_plot"
-    ]
-   },
-   "outputs": [
-    {
-     "data": {
-      "text/html": [
-       "<script>\n",
-       "    var N_max_show = 10; //Number of results to be shown by default\n",
-       "\n",
-       "    function show_materials_submitted_info()\n",
-       "    {\n",
-       "      //alert(\"N_materials=\" + N_materials)\n",
-       "      //\"table_materials_submitted_info\"\n",
-       "      //alert(\"show_materials_submitted_info: info_obj_all: \"+JSON.stringify(info_obj_all))\n",
-       "      var table_content = new Array(); \n",
-       "      str = '<tr>';\n",
-       "      str += '<th width=\"5%\"></th>'\n",
-       "      str += '<th width=\"10%\"><p style=\\\"text-align:center\\\"><font size = \\\"4pt\\\"><b>Atom labels</b></font></p></th>';\n",
-       "      //str += '<th width=\"10%\"><p style=\\\"text-align:center\\\"><font size = \\\"4pt\\\"><b>Space group</b></font></p></th>';\n",
-       "      //str += '<th width=\"15%\"><p style=\\\"text-align:center\\\"><font size = \\\"4pt\\\"><b>Lattice constants (in Ang)</b></font></p></th>';\n",
-       "      str += '<th width=\"10%\"><p style=\\\"text-align:center\\\"><font size = \\\"4pt\\\"><b>Program name</b></font></p></th>';\n",
-       "      str += '<th width=\"10%\"><p style=\\\"text-align:center\\\"><font size = \\\"4pt\\\"><b>Basis set type</b></font></p></th>';\n",
-       "      str += '<th width=\"15%\"><p style=\\\"text-align:center\\\"><font size = \\\"4pt\\\"><b>Functional</b></font></p></th>';\n",
-       "      //str += '<th width=\"20%\"><p style=\\\"text-align:center\\\"><font size = \\\"4pt\\\"><b>Number of <i>k</i> points per inverse distance</b></font></p></th>';\n",
-       "      str += '</tr>'; //first row: head\n",
-       "      table_content.push(str);\n",
-       "\n",
-       "      for(var i = 0; i < N_materials; i++) //add info of each material\n",
-       "      {\n",
-       "        //alert(\"show_materials_submitted_info: material \"+ i);  \n",
-       "        table_content.push('<tr>');\n",
-       "\n",
-       "        table_content.push('<td>');    \n",
-       "        str = '<input type = \\\"checkbox\\\" name = \"checkbox_material\" id = \\\"checkbox_material' + i.toString() + '\\\" unchecked  onclick=\\\"checkbox_material(this.id)\\\">';\n",
-       "        str += \"<b>&nbsp&nbsp#\" + (i+1).toString() + \"</b>\";\n",
-       "        table_content.push(str);\n",
-       "        table_content.push('</td>');\n",
-       "\n",
-       "        table_content.push('<td>');    \n",
-       "        str = '<font size = \\\"3pt\\\">';\n",
-       "        str += info_obj_all[i][\"atom_labels\"] + '; &nbsp&nbsp';\n",
-       "        str += \"</font>\"\n",
-       "        table_content.push(str);    \n",
-       "        table_content.push('</td>');\n",
-       "        //alert(\"got atom_labels\");\n",
-       "\n",
-       "        /*\n",
-       "        table_content.push('<td>');    \n",
-       "        str = '<font size = \\\"3pt\\\">';\n",
-       "        str += info_obj_all[i][\"space_group_symbol\"] + '; &nbsp&nbsp';\n",
-       "        str += \"</font>\"\n",
-       "        table_content.push(str);    \n",
-       "        table_content.push('</td>');\n",
-       "        //alert(\"got space_group_symbol\");\n",
-       "\n",
-       "        table_content.push('<td>');    \n",
-       "        str = '<font size = \\\"3pt\\\">';\n",
-       "        str += info_obj_all[i][\"lattice_constant\"] + '; &nbsp&nbsp';\n",
-       "        str += \"</font>\"\n",
-       "        table_content.push(str);    \n",
-       "        table_content.push('</td>');\n",
-       "        //alert(\"got lattice_constant\");\n",
-       "        */\n",
-       "          \n",
-       "        table_content.push('<td>'); \n",
-       "        str = '<font size = \\\"3pt\\\">';\n",
-       "        str += info_obj_all[i][\"program_name\"].toUpperCase() + '; &nbsp&nbsp';\n",
-       "        str += \"</font>\"\n",
-       "        table_content.push(str);    \n",
-       "        table_content.push('</td>');\n",
-       "        //alert(\"got program_name\");\n",
-       "\n",
-       "        table_content.push('<td>'); \n",
-       "        str = '<font size = \\\"3pt\\\">';\n",
-       "        str += info_obj_all[i][\"program_basis_set_type\"] + '; &nbsp&nbsp';\n",
-       "        str += \"</font>\"\n",
-       "        table_content.push(str);    \n",
-       "        table_content.push('</td>');\n",
-       "        //alert(\"got program_basis_set_type\");\n",
-       "\n",
-       "\n",
-       "        table_content.push('<td>'); \n",
-       "        str = '<font size = \\\"3pt\\\">';\n",
-       "        str += info_obj_all[i][\"XC_functional_name\"] + '; &nbsp&nbsp';\n",
-       "        str += \"</font>\"\n",
-       "        table_content.push(str);    \n",
-       "        table_content.push('</td>');\n",
-       "        //alert(\"got XC_functional_name\");\n",
-       "\n",
-       "        /*\n",
-       "        table_content.push('<td>'); \n",
-       "        str = '<font size = \\\"3pt\\\">';\n",
-       "        str += band_obj_all[i][\"average_N_k_points_per_inverse_distance\"].toFixed(3);\n",
-       "        str += \"</font>\"\n",
-       "        table_content.push(str);    \n",
-       "        table_content.push('</td>');\n",
-       "        //alert(\"got average_N_k_points_per_inverse_distance\");\n",
-       "        */\n",
-       "        table_content.push('</tr>');\n",
-       "\n",
-       "      }\n",
-       "      \n",
-       "      document.getElementById(\"table_materials_submitted_info\").innerHTML = table_content.join('');\n",
-       "    }\n",
-       "\n",
-       "    function clean_materials_selection()\n",
-       "    {\n",
-       "      var choices_compare = document.getElementsByName(\"checkbox_material\");\n",
-       "      for(var i=0; i<choices_compare.length; i++)\n",
-       "      {\n",
-       "        //choices_compare[i].removeAttribute('checked');\n",
-       "        //choices_compare[i].setAttribute(\"unchecked\", \"unchecked\");\n",
-       "        choices_compare[i].checked = \"\";\n",
-       "      }\n",
-       "    }\n",
-       "\n",
-       "    function select_all()\n",
-       "    {\n",
-       "      var choices_compare = document.getElementsByName(\"checkbox_material\");\n",
-       "      for(var i=0; i<choices_compare.length; i++)\n",
-       "      {\n",
-       "        //choices_compare[i].removeAttribute('checked');\n",
-       "        //choices_compare[i].setAttribute(\"unchecked\", \"unchecked\");\n",
-       "        choices_compare[i].checked = \"checked\";\n",
-       "      }\n",
-       "    }\n",
-       "\n",
-       "\n",
-       "\n",
-       "    function process()\n",
-       "    {\n",
-       "        //alert(\"Process:\"+band_paths)\n",
-       "        //Jupyter.notebook.execute_cells(window.findCellIndicesByTag('init_js_plot'));\n",
-       "        //Jupyter.notebook.execute_cells(window.findCellIndicesByTag('show_materials_submitted_info'));\n",
-       "        show_materials_submitted_info();\n",
-       "        document.getElementById(\"table_visualize\").innerHTML = \"\";\n",
-       "        str = N_materials.toString();\n",
-       "        document.getElementById(\"n_materials\").innerHTML = \"Number of materials submitted: \" + str + \"<font size = 1px color = #C0C0C0  > &nbsp Please press \\'Visualize\\' to visualize the band structure. </font>\";\n",
-       "        document.getElementById(\"div_showall\").style.visibility=\"hidden\";\n",
-       "    }\n",
-       "        \n",
-       "\n",
-       "    var image_band = '';\n",
-       "    var image_dos = '';\n",
-       "    var image_band_links = new Array(N_materials); //store the URL of each band figure -> used to compare 2 figures\n",
-       "    var image_band_links_selected = [];\n",
-       "    var image_band_selected_Number = []; //record which i_material has been selected\n",
-       "\n",
-       "\n",
-       "\n",
-       "    function prepare(N_materials_show)\n",
-       "    {\n",
-       "      document.getElementById(\"table_visualize\").innerHTML = \"\";\n",
-       "      var table_content = new Array(); \n",
-       "      //document.getElementById(\"table_visualize\").innerHTML = table_content.join('');\n",
-       "      //-----Generate the html tables for each material--------\n",
-       "      for(var i = 0; i < N_materials_show; i++)\n",
-       "      {\n",
-       "        checkbox_material_id = \"checkbox_material\" + i.toString();\n",
-       "        var if_selected = check_show_VBM(checkbox_material_id);\n",
-       "        if(if_selected != 1)\n",
-       "        {\n",
-       "          continue;\n",
-       "        }\n",
-       "\n",
-       "        table_content.push('<tr>');\n",
-       "        div_string = '<div style = \\\"height: 20px\\\"></div>';\n",
-       "        table_content.push(div_string);\n",
-       "        table_content.push('<th>');\n",
-       "\n",
-       "        //add main container div\n",
-       "        div_string = '<div id = \\\"div_band_dos' + i.toString() + '\\\" class = \\\"div_band_dos\\\" >';\n",
-       "        table_content.push(div_string);\n",
-       "\n",
-       "        //show No. of the material\n",
-       "        i_material = i + 1;\n",
-       "        div_string = '<div style = \\\"height:30px\\; font-size: 15pt;\">' + '#' + i_material.toString() + '</div>';\n",
-       "        table_content.push(div_string);\n",
-       "\n",
-       "        //show band_path/dos info\n",
-       "        div_string = '<div style = \\\"height:30px\\\">' + 'Band: &nbsp&nbsp' + band_paths[i] + ',&nbsp&nbsp&nbsp&nbspDOS: &nbsp&nbsp' + dos_paths[i] + '</div>';\n",
-       "        table_content.push(div_string);\n",
-       "\n",
-       "        //add div_band\n",
-       "        div_string = '<div id = \\\"div_band' + i.toString() + '\\\" class = \\\"div_band\\\" ></div>';\n",
-       "        table_content.push(div_string);\n",
-       "\n",
-       "        //add div_dos\n",
-       "        div_string = '<div id = \\\"div_dos' + i.toString() + '\\\" class = \\\"div_dos\\\" ></div>';    \n",
-       "        table_content.push(div_string);\n",
-       "\n",
-       "        //add div_tools\n",
-       "        div_string = '<div id = \\\"div_tools' + i.toString() + '\\\" class = \\\"div_tools\\\" >';    \n",
-       "        table_content.push(div_string);\n",
-       "\n",
-       "        //add: infomation\n",
-       "        div_string = '<div id = \\\"div_info' + i.toString() + '\\\">atom_labels<br>program_name</div>';    \n",
-       "        table_content.push(div_string);\n",
-       "\n",
-       "        //add: custom scale\n",
-       "        div_string = '<br><p style=\\\"color: #000;font-weight: 100; font-size: 10pt; align:left\\\"> Set the lower and upper limit of energy scale (in eV): <br><br><font color=\\\"black\\\" size = 3px> Lower limit: &nbsp&nbsp </font><textarea  id=\\\"lowerlimit' + i.toString() + '\\\"  rows=\\\"1\\\" style = \\\"width: 70px;\\\">-10</textarea> <font color=\\\"black\\\" size = 3px> &nbsp eV</font> &nbsp&nbsp&nbsp<font color=\\\"black\\\" size = 3px> Upper limit: &nbsp&nbsp </font><textarea  id=\\\"upperlimit' + i.toString() + '\\\"  rows=\\\"1\\\" style = \\\"width: 70px;\\\">10</textarea> <font color=\\\"black\\\" size = 3px> &nbsp eV&nbsp&nbsp&nbsp</font></p>';\n",
-       "        table_content.push(div_string);\n",
-       "        div_string = '<br><button class = \\\"button_tools\\\" id = \\\"button_customscale' + i.toString() + '\\\"  onclick = \\\"customscale(this.id)\\\"> Rescale </button>';    \n",
-       "        table_content.push(div_string);\n",
-       "\n",
-       "\n",
-       "        //add button:autoscale\n",
-       "        div_string = '<button class = \\\"button_tools\\\" id = \\\"button_autoscale' + i.toString() + '\\\"  onclick = \\\"autoscale(this.id)\\\" title = \\\"(-10 eV, 10 eV)\\\"> Autoscale </button>';    \n",
-       "        table_content.push(div_string);\n",
-       "        //add button:fullscale\n",
-       "        div_string = '<button class = \\\"button_tools\\\" id = \\\"button_fullscale' + i.toString() + '\\\"  onclick = \\\"fullscale(this.id)\\\" title = \\\"(-100 eV, 100 eV)\\\"> Full scale </button><br><br>';    \n",
-       "        table_content.push(div_string);\n",
-       "\n",
-       "        //table_content.push(\"Select and zoom:\");\n",
-       "\n",
-       "        /*//overview for select and zoom\n",
-       "        div_string = '<div id = \\\"div_overview' + i.toString() + '\\\" class = \\\"div_overview\\\" ></div>';    //  <div id=\"overview\" style=\"width:300px;height:200px; margin-left:10px; margin-top: 50px; padding-top: 0px\"></div>\n",
-       "        table_content.push(div_string);\n",
-       "        div_string = '<p id = \\\"overviewLegend' + i.toString() + '\\\"  ></p>';    //  <p id=\"overviewLegend\" style=\"margin-left:10px\"></p>\n",
-       "        table_content.push(div_string);*/\n",
-       "\n",
-       "        //download figures as png\n",
-       "        div_string = '<a id = \\\"img_band' + i.toString() + '\\\" class = \\\"button_tools\\\" target=\\\"_blank\\\" style = \\\"text-decoration: none;\\\" > Download band </a>';\n",
-       "        table_content.push(div_string);    \n",
-       "        div_string = '<a id = \\\"img_dos' + i.toString() + '\\\" class = \\\"button_tools\\\"  target=\\\"_blank\\\" style = \\\"text-decoration: none;\\\" > Download DOS </a>';\n",
-       "        table_content.push(div_string);\n",
-       "\n",
-       "        //add show VBM & CBM\n",
-       "        div_string = '<br><br><p style = \\\"text-normal-black\\\"> <input type = \\\"checkbox\\\" id = \\\"checkbox_VBM' + i.toString() + '\\\" unchecked  onclick=\\\"show_VBM(this.id)\\\"> <font color=\\\"black\\\" size = 3px> Show VBM </font>  (<font color=\\\"blue\\\">\\•</font>) <font color=\\\"black\\\" size = 3px> and CBM </font>(<font color=\\\"red\\\">\\•</font>) </p>';\n",
-       "        table_content.push(div_string);\n",
-       "\n",
-       "\n",
-       "        table_content.push('</div>');//div_tools\n",
-       "\n",
-       "        //checkbox for comparison\n",
-       "        div_string = '<div id = \\\"div_checkbox_compare' + i.toString() + '\\\" class = \\\"div_checkbox_compare\\\" >';\n",
-       "        table_content.push(div_string);\n",
-       "        //div_string = '<p style = \\\"text-normal-black\\\"> <input type = \\\"checkbox\\\" id = \\\"checkbox_compare' + i.toString() + '\\\" unchecked name = \\\"checkbox_compare\\\" onclick=\\\"check_compare(this.id)\\\"> <font color=\\\"black\\\" size = 3px> Compare </font></p><p><font size = 2px color = \"#666\">(select max. 2 materials) </font> </p>';\n",
-       "        div_string = '<p style = \\\"text-normal-black\\\"> <input type = \\\"checkbox\\\" id = \\\"checkbox_compare' + i.toString() + '\\\" checked = \\\"unchecked\\\" unchecked name = \\\"checkbox_compare\\\" onclick=\\\"check_compare(this.id)\\\"> <font color=\\\"black\\\" size = 3px> Compare </font></p><p><font size = 2px color = \"#666\">(select max. 2 materials) </font> </p>';\n",
-       "        table_content.push(div_string);\n",
-       "        table_content.push('</div>');//div_checkbox_compare\n",
-       "\n",
-       "\n",
-       "        table_content.push('</div>');//div_band_dos\n",
-       "        table_content.push('</th>');\n",
-       "        table_content.push('</tr>'); \n",
-       "      }\n",
-       "\n",
-       "      document.getElementById(\"table_visualize\").innerHTML = table_content.join('');\n",
-       "    }\n",
-       "\n",
-       "\n",
-       "    function visualize_band_dos()\n",
-       "    {\n",
-       "        Jupyter.notebook.execute_cells(window.findCellIndicesByTag('init_jquery'));\n",
-       "        Jupyter.notebook.execute_cells(window.findCellIndicesByTag('init_flot'));\n",
-       "        Jupyter.notebook.execute_cells(window.findCellIndicesByTag('init_flot_axislabels'));\n",
-       "        //Jupyter.notebook.execute_cells(window.findCellIndicesByTag('init_flot_dashes'));\n",
-       "        Jupyter.notebook.execute_cells(window.findCellIndicesByTag('init_flot_navigate'));\n",
-       "        //Jupyter.notebook.execute_cells(window.findCellIndicesByTag('init_flot_selection'));\n",
-       "        Jupyter.notebook.execute_cells(window.findCellIndicesByTag('js_flot_legendoncanvas'));\n",
-       "        document.getElementById(\"div_showall\").style.visibility=\"hidden\";\n",
-       "        document.getElementById(\"div_compare_buttons\").style.visibility=\"\";\n",
-       "\n",
-       "\n",
-       "\n",
-       "        if(N_materials > N_max_show)\n",
-       "        {\n",
-       "            document.getElementById(\"div_showall\").style.visibility=\"visible\";\n",
-       "            document.getElementById(\"checkbox_showall\").checked = \"\";\n",
-       "        }              \n",
-       "\n",
-       "        N_materials_show = Math.min(N_max_show, N_materials);\n",
-       "\n",
-       "        prepare(N_materials_show);\n",
-       "        clean_compare_list();\n",
-       "        plot_band_dos_status = plot_band_dos(-10,10, N_materials_show);\n",
-       "\n",
-       "    }\n",
-       "\n",
-       "    function show_all(id)//\"plot_placeholder\"\n",
-       "    {\n",
-       "        var if_showall=0;\n",
-       "        if_showall = check_show_VBM(id);\n",
-       "        if(if_showall == 1)\n",
-       "        {\n",
-       "            N_materials_show = N_materials;\n",
-       "            prepare(N_materials_show);\n",
-       "            clean_compare_list();\n",
-       "            plot_band_dos_status = plot_band_dos(-10,10, N_materials_show);\n",
-       "        }\n",
-       "        else\n",
-       "        {\n",
-       "            N_materials_show = Math.min(N_max_show, N_materials);\n",
-       "            prepare(N_materials_show);\n",
-       "            clean_compare_list();\n",
-       "            plot_band_dos_status = plot_band_dos(-10,10, N_materials_show);\n",
-       "        }\n",
-       "\n",
-       "    }\n",
-       "\n",
-       "    \n",
-       "    //------------------Tool used to get the content from textarea---------------------\n",
-       "    function get_text(textarea_id)\n",
-       "    {\n",
-       "      var text = document.getElementById(textarea_id).value;\n",
-       "      return text;\n",
-       "    }\n",
-       "\n",
-       "\n",
-       "\n",
-       "    //-------------------Compare 2 band figures----------------------------------------\n",
-       "\n",
-       "\n",
-       "    function check_compare(id)//checkbox_compare' + i.toString() + '\\\" unchecked  onclick=\\\"check_compare(this.id)\n",
-       "    {\n",
-       "      var x = document.getElementById(id);\n",
-       "      var choices_compare = document.getElementsByName(\"checkbox_compare\");\n",
-       "      var N_chosen = 0;\n",
-       "      for(var i=0; i<choices_compare.length; i++)\n",
-       "      {\n",
-       "        if(choices_compare[i].checked)\n",
-       "        {\n",
-       "          N_chosen ++;\n",
-       "        }\n",
-       "      }\n",
-       "      if(N_chosen == 2) // In max. only 2 figures could be selected and compared.\n",
-       "      {\n",
-       "        for(var i=0; i<choices_compare.length; i++)\n",
-       "        {\n",
-       "          if(!choices_compare[i].checked)\n",
-       "          {\n",
-       "            choices_compare[i].disabled = 'disabled';\n",
-       "          }\n",
-       "        }\n",
-       "      }\n",
-       "      else\n",
-       "      {\n",
-       "      for(var i=0; i<choices_compare.length; i++)\n",
-       "        {\n",
-       "          choices_compare[i].removeAttribute('disabled');\n",
-       "        }\n",
-       "      }\n",
-       "\n",
-       "    }\n",
-       "\n",
-       "    function compare()\n",
-       "    {\n",
-       "        $(\"#div_compare\").fadeIn(600);//show div for comparison\n",
-       "        //check_compare(-100);\n",
-       "\n",
-       "        var compare_list = [];\n",
-       "        compare_list = make_compare_list();\n",
-       "                //[i_material_1, i_material_2] = make_compare_list();\n",
-       "        i_material_1 = compare_list[0];\n",
-       "        i_material_2 = compare_list[1];\n",
-       "        //document.getElementById(\"demo\").innerHTML = \"In add info compare:\" + i_material_1.toString() + i_material_2.toString();\n",
-       "        compare_figures(i_material_1, i_material_2);  \n",
-       "    }\n",
-       "    function make_compare_list()\n",
-       "    {\n",
-       "      //get the links to the images\n",
-       "      images_selected_links = []; //store the links to the figures for comparison\n",
-       "      var choices_compare = document.getElementsByName(\"checkbox_compare\");\n",
-       "      var N_chosen = 0;\n",
-       "      var str = ''; //tmp str for debug\n",
-       "      var figure_selected = new Array(2);\n",
-       "      for(var i=0; i<choices_compare.length; i++) //check which figures are selected\n",
-       "      {\n",
-       "        if(choices_compare[i].checked)\n",
-       "        {\n",
-       "          id_chosen = choices_compare[i].id;\n",
-       "          i_chosen = Math.round(id_chosen.substring(16));\n",
-       "          var tmp_str = image_band_links[i_chosen];\n",
-       "          images_selected_links.push(tmp_str);\n",
-       "          figure_selected[N_chosen] = i_chosen;\n",
-       "          N_chosen ++;\n",
-       "          //str += beakerx.image_band_links[i];\n",
-       "        }\n",
-       "      }\n",
-       "      var i_material_1 = 0;\n",
-       "      var i_material_2 = 0;\n",
-       "      //document.getElementById(\"demo\").innerHTML = 'In making comare list';\n",
-       "      image_band_links_selected = images_selected_links;\n",
-       "      //document.getElementById(\"demo\").innerHTML = 'In making comare list: next';\n",
-       "      if(N_chosen == 2)\n",
-       "      {\n",
-       "        i_material_1 = figure_selected[0];\n",
-       "        i_material_2 = figure_selected[1];\n",
-       "      }\n",
-       "      //document.getElementById(\"demo\").innerHTML = 'Compare_list: ' +i_material_1.toString() + ' ' + i_material_2.toString();\n",
-       "\n",
-       "      return [i_material_1, i_material_2];\n",
-       "    }\n",
-       "\n",
-       "    function check_compare_scale(i_material_1, i_material_2)\n",
-       "    {\n",
-       "      lowerlimit_id_1 = \"lowerlimit\" + i_material_1.toString();\n",
-       "      lowerlimit_id_2 = \"lowerlimit\" + i_material_2.toString();\n",
-       "      upperlimit_id_1 = \"upperlimit\" + i_material_1.toString();\n",
-       "      upperlimit_id_2 = \"upperlimit\" + i_material_2.toString();\n",
-       "\n",
-       "      lowerlimit_1 = parseFloat(document.getElementById(lowerlimit_id_1).innerHTML);\n",
-       "      lowerlimit_2 = parseFloat(document.getElementById(lowerlimit_id_2).innerHTML);\n",
-       "      upperlimit_1 = parseFloat(document.getElementById(upperlimit_id_2).innerHTML);\n",
-       "      upperlimit_2 = parseFloat(document.getElementById(upperlimit_id_2).innerHTML);\n",
-       "      if((lowerlimit_1 != lowerlimit_2) || (upperlimit_1 != upperlimit_2))\n",
-       "        return -1;\n",
-       "      else\n",
-       "        return 1;\n",
-       "    }\n",
-       "\n",
-       "    function compare_figures(i_material_1, i_material_2)\n",
-       "    {\n",
-       "        Jupyter.notebook.execute_cells(window.findCellIndicesByTag('js_query_beforeafter'));\n",
-       "        Jupyter.notebook.execute_cells(window.findCellIndicesByTag('js_compare_slide'));\n",
-       "        add_info_compare(i_material_1, i_material_2);\n",
-       "        document.getElementById(\"div_compare_container\").scrollIntoView({ behavior: 'smooth' }); \n",
-       "        document.getElementById(\"div_compare_container\").scrollTop += 50;\n",
-       "\n",
-       "    }\n",
-       "\n",
-       "\n",
-       "    function clean_compare_list()\n",
-       "    {\n",
-       "      var choices_compare = document.getElementsByName(\"checkbox_compare\");\n",
-       "      for(var i=0; i<choices_compare.length; i++)\n",
-       "      {\n",
-       "        //choices_compare[i].removeAttribute('checked');\n",
-       "        //choices_compare[i].setAttribute(\"unchecked\", \"unchecked\");\n",
-       "        choices_compare[i].checked = \"\";\n",
-       "        choices_compare[i].removeAttribute('disabled');\n",
-       "      }\n",
-       "    }\n",
-       "\n",
-       "    //-----------Add information about the calculation to \"div_tools\"---------------\n",
-       "    function add_info(i)\n",
-       "    {\n",
-       "      \n",
-       "      //document.getElementById(\"demoa\").innerHTML = i.toString() + div_info_id;\n",
-       "      //for(var i = 0; i < beakerx.N_materials; i++)\n",
-       "      //{\n",
-       "      div_info_id = \"div_info\" + i.toString();\n",
-       "\n",
-       "      var str = '';\n",
-       "      str += \"<br> <p style=\\\"text-align:left\\\"><font size = 3pt><b>Atom labels:</b> &nbsp&nbsp&nbsp&nbsp\" + info_obj_all[i][\"atom_labels\"] + '</font></p>';\n",
-       "      //str += \"<font size = 3pt><b>Space group:</b> &nbsp&nbsp&nbsp&nbsp\" + info_obj_all[i][\"space_group_symbol\"] + '</font>';\n",
-       "      //str += \"<font size = 3pt><b>Lattice constants (in Ang):</b> &nbsp&nbsp&nbsp&nbsp\" + info_obj_all[i][\"lattice_constant\"] + '</font>';\n",
-       "      str += \"<p style=\\\"text-align:left\\\"><font size = 3pt><b>Program name:</b>&nbsp&nbsp&nbsp&nbsp\" + info_obj_all[i][\"program_name\"].toUpperCase() + '</font></p>';\n",
-       "      str += \"<p style=\\\"text-align:left\\\"><font size = 3pt><b>Basis set type:</b>&nbsp&nbsp&nbsp&nbsp\" + info_obj_all[i][\"program_basis_set_type\"] + '</font></p>';\n",
-       "      str += \"<p style=\\\"text-align:left\\\"><font size = 3pt><b>Functional:</b>&nbsp&nbsp&nbsp&nbsp\" + info_obj_all[i][\"XC_functional_name\"] + '</font></p>';\n",
-       "      str += \"<p style=\\\"text-align:left\\\"><font size = 3pt><b>Number of <i>k</i> points per inverse distance:</b>&nbsp&nbsp&nbsp&nbsp\" + band_obj_all[i][\"average_N_k_points_per_inverse_distance\"].toFixed(3) + '</font></p>';\n",
-       "      document.getElementById(div_info_id).innerHTML = str;// + origData[\"atom_labels\"];\n",
-       "      //document.getElementById('program_name_1').innerHTML = \"<b>Code:</b>&nbsp&nbsp&nbsp&nbsp\" + origData[\"program_name\"];\n",
-       "      //document.getElementById('program_basis_set_type_1').innerHTML = \"<b>Basis set type:</b>&nbsp&nbsp&nbsp&nbsp\" + origData[\"program_basis_set_type\"];\n",
-       "      //document.getElementById('XC_functional_name_1').innerHTML = \"<b>Functional:</b>&nbsp&nbsp&nbsp&nbsp\" + origData[\"XC_functional_name\"];  \n",
-       "      //}\n",
-       "      \n",
-       "    }\n",
-       "    function add_info_compare(i,j)\n",
-       "    {\n",
-       "\n",
-       "      div_info_id = \"div_compare_info\";\n",
-       "      var str = '';\n",
-       "\n",
-       "      if_same_scale = check_compare_scale(i_material_1, i_material_2);\n",
-       "      if(if_same_scale == -1)\n",
-       "      {\n",
-       "        str = '<b><font size = \"15pt\" color=\"#940000\">Error: Different lower/upper limits.</font></b><br>';\n",
-       "        document.getElementById(\"div_compare_container\").innerHTML = str;\n",
-       "        document.getElementById(div_info_id).innerHTML = '';\n",
-       "        return;\n",
-       "      }\n",
-       "\n",
-       "      str += \"<br><b><font-size:15pt>Information of the first calculation (left):</font></b> <br>\";\n",
-       "      str += \"<br> <b>Atom labels:</b> &nbsp&nbsp&nbsp&nbsp\" + info_obj_all[i][\"atom_labels\"];\n",
-       "      //str += \"<br> <b>Space group:</b> &nbsp&nbsp&nbsp&nbsp\" + info_obj_all[i][\"space_group_symbol\"];\n",
-       "      //str += \"<br> <b>Lattice constants (in Ang):</b> &nbsp&nbsp&nbsp&nbsp\" + info_obj_all[i][\"lattice_constant\"];\n",
-       "      str += \"<br> <b>Program name:</b>&nbsp&nbsp&nbsp&nbsp\" + info_obj_all[i][\"program_name\"].toUpperCase();\n",
-       "      str += \"<br> <b>Basis set type:</b>&nbsp&nbsp&nbsp&nbsp\" + info_obj_all[i][\"program_basis_set_type\"];\n",
-       "      str += \"<br> <b>Functional:</b>&nbsp&nbsp&nbsp&nbsp\" + info_obj_all[i][\"XC_functional_name\"];\n",
-       "      str += \"<br> <b>Number of <i>k</i> points per inverse distance:</b>&nbsp&nbsp&nbsp&nbsp\" + band_obj_all[j][\"average_N_k_points_per_inverse_distance\"].toFixed(3);\n",
-       "      str += \"<br><br><br><b><font-size:15pt>Information of the second calculation (right):</font></b><br>\";\n",
-       "      str += \"<br> <b>Atom labels:</b> &nbsp&nbsp&nbsp&nbsp\" + info_obj_all[j][\"atom_labels\"];\n",
-       "      //str += \"<br> <b>Space group:</b> &nbsp&nbsp&nbsp&nbsp\" + info_obj_all[j][\"space_group_symbol\"];\n",
-       "      //str += \"<br> <b>Lattice constants (in Ang):</b> &nbsp&nbsp&nbsp&nbsp\" + info_obj_all[j][\"lattice_constant\"];\n",
-       "      str += \"<br> <b>Program name:</b>&nbsp&nbsp&nbsp&nbsp\" + info_obj_all[j][\"program_name\"].toUpperCase();\n",
-       "      str += \"<br> <b>Basis set type:</b>&nbsp&nbsp&nbsp&nbsp\" + info_obj_all[j][\"program_basis_set_type\"];  \n",
-       "      str += \"<br> <b>Functional:</b>&nbsp&nbsp&nbsp&nbsp\" + info_obj_all[j][\"XC_functional_name\"];\n",
-       "      str += \"<br> <b>Number of <i>k</i> points per inverse distance:</b>&nbsp&nbsp&nbsp&nbsp\" + band_obj_all[j][\"average_N_k_points_per_inverse_distance\"].toFixed(3);\n",
-       "      document.getElementById(div_info_id).innerHTML = str;// + origData[\"atom_labels\"];\n",
-       "    }\n",
-       "\n",
-       "\n",
-       "\n",
-       "    //-----------------------Show/hide VBM, CBM-------------------------\n",
-       "    function check_show_VBM(checkbox_VBM_id)\n",
-       "    {\n",
-       "      var x = document.getElementById(checkbox_VBM_id);\n",
-       "      var if_checked = 0;\n",
-       "      if(x.checked)//== \"checked\")\n",
-       "      {\n",
-       "        //document.getElementById(\"demoa\").innerHTML = \"checked!\";\n",
-       "        if_checked = 1;\n",
-       "      }\n",
-       "      else if (x.unchecked)// == \"unchecked\")\n",
-       "      {\n",
-       "        //document.getElementById(\"demoa\").innerHTML = \"unchecked!\";\n",
-       "        if_checked = -1;\n",
-       "      }\n",
-       "      else\n",
-       "      {\n",
-       "        //document.getElementById(\"demoa\").innerHTML = \"nothing detected!\";\n",
-       "      }\n",
-       "      return if_checked;\n",
-       "    }\n",
-       "\n",
-       "    function check_if_in_compare_list(i) // check if the current material i is to be compared\n",
-       "    {\n",
-       "\n",
-       "      var checkbox_compare_id = \"checkbox_compare\" + i.toString();\n",
-       "      var if_compare = check_show_VBM(checkbox_compare_id);\n",
-       "      //document.getElementById(\"demo\").innerHTML = 'if_compare of ' + i.toString() + ' : ' + if_compare.toString();\n",
-       "      var i_compare_material_1, i_compare_material_2;\n",
-       "      [i_compare_material_1, i_compare_material_2] = make_compare_list();\n",
-       "      var i_in_compare_list = -1;\n",
-       "      if(i_compare_material_1 == i)\n",
-       "      {\n",
-       "        i_in_compare_list = 1;\n",
-       "      }\n",
-       "      else if (i_compare_material_2 == i)\n",
-       "      {\n",
-       "        i_in_compare_list = 2;\n",
-       "      }\n",
-       "      else\n",
-       "      {\n",
-       "        i_in_compare_list = 0;\n",
-       "      }\n",
-       "      //document.getElementById(\"demo\").innerHTML = 'Checking ' + i.toString() + ' in Compare_list:  ' + i_in_compare_list.toString();\n",
-       "      return [if_compare, i_in_compare_list];\n",
-       "    }\n",
-       "\n",
-       "    function show_VBM(id)\n",
-       "    {\n",
-       "      //prepare(\"new\");\n",
-       "      //var if_show_VBM = -1;\n",
-       "      var len_id = id.length;\n",
-       "      var i_material = id.substring(12);\n",
-       "      var i = Math.round(i_material);\n",
-       "\n",
-       "      var checkbox_VBM_id = \"checkbox_VBM\" + i.toString();\n",
-       "      var if_show_VBM = check_show_VBM(checkbox_VBM_id);\n",
-       "\n",
-       "      var if_compare, i_in_compare_list;\n",
-       "      [if_compare, i_in_compare_list] = check_if_in_compare_list(i);\n",
-       "      //document.getElementById(\"demo\").innerHTML = i.toString() + ' in Compare_list:  ' + i_in_compare_list.toString();\n",
-       "\n",
-       "      plot_band_dos_i(i, -10, 10, if_show_VBM, if_compare, i_in_compare_list);\n",
-       "\n",
-       "    }\n",
-       "\n",
-       "\n",
-       "    //---------------------Functions to rescale-------------------------------------------\n",
-       "    function autoscale(id)\n",
-       "    {\n",
-       "      var len_id = id.length;\n",
-       "      var i_material = id.substring(16);\n",
-       "      var i = Math.round(i_material);\n",
-       "\n",
-       "      upperlim_id = \"upperlimit\" + i_material;\n",
-       "      document.getElementById(upperlim_id).innerHTML =\"10.0\";\n",
-       "      lowerlim_id = \"lowerlimit\" + i_material;\n",
-       "      document.getElementById(lowerlim_id).innerHTML =\"-10.0\";\n",
-       "\n",
-       "\n",
-       "      //document.getElementById(\"demoa\").innerHTML =i_material;\n",
-       "      var checkbox_VBM_id = \"checkbox_VBM\" + i.toString();\n",
-       "      var if_show_VBM = check_show_VBM(checkbox_VBM_id);\n",
-       "\n",
-       "      var if_compare, i_in_compare_list;\n",
-       "      [if_compare, i_in_compare_list] = check_if_in_compare_list(i);\n",
-       "\n",
-       "\n",
-       "      plot_band_dos_i(i, -10, 10, if_show_VBM, if_compare, i_in_compare_list);\n",
-       "\n",
-       "    }\n",
-       "\n",
-       "    function fullscale(id)\n",
-       "    {\n",
-       "      var len_id = id.length;\n",
-       "      var i_material = id.substring(16);\n",
-       "      var i = Math.round(i_material);\n",
-       "\n",
-       "      upperlim_id = \"upperlimit\" + i_material;\n",
-       "      document.getElementById(upperlim_id).innerHTML =\"100.0\";\n",
-       "      lowerlim_id = \"lowerlimit\" + i_material;\n",
-       "      document.getElementById(lowerlim_id).innerHTML =\"-100.0\";\n",
-       "\n",
-       "      //document.getElementById(\"demoa\").innerHTML =i_material;\n",
-       "      var checkbox_VBM_id = \"checkbox_VBM\" + i.toString();\n",
-       "      var if_show_VBM = check_show_VBM(checkbox_VBM_id);\n",
-       "\n",
-       "      var if_compare, i_in_compare_list;\n",
-       "      [if_compare, i_in_compare_list] = check_if_in_compare_list(i);\n",
-       "\n",
-       "\n",
-       "\n",
-       "      plot_band_dos_i(i, -100, 100, if_show_VBM, if_compare, i_in_compare_list);\n",
-       "\n",
-       "    }\n",
-       "\n",
-       "    function customscale(id)\n",
-       "    {\n",
-       "      var len_id = id.length;\n",
-       "      var i_material = id.substring(18);\n",
-       "      var i = Math.round(i_material);\n",
-       "      //\n",
-       "      upperlim_id = \"upperlimit\" + i_material;\n",
-       "      upperlim = document.getElementById(upperlim_id).value;\n",
-       "      upperlim_float = Math.round(upperlim);\n",
-       "      lowerlim_id = \"lowerlimit\" + i_material;\n",
-       "      lowerlim = document.getElementById(lowerlim_id).value;\n",
-       "      lowerlim_float = Math.round(lowerlim);\n",
-       "\n",
-       "      var checkbox_VBM_id = \"checkbox_VBM\" + i.toString();\n",
-       "      var if_show_VBM = check_show_VBM(checkbox_VBM_id);\n",
-       "\n",
-       "      var if_compare, i_in_compare_list;\n",
-       "      [if_compare, i_in_compare_list] = check_if_in_compare_list(i);\n",
-       "\n",
-       "\n",
-       "\n",
-       "      plot_band_dos_i(i, lowerlim_float, upperlim_float, if_show_VBM, if_compare, i_in_compare_list);  \n",
-       "    }\n",
-       "\n",
-       "\n",
-       "    function plot_band_dos(lowerLim, upperLim, N_materials_show)\n",
-       "    {\n",
-       "      placeholder_band = \"#div_band1\";\n",
-       "      placeholder_dos = \"#div_dos1\";\n",
-       "     // lowerLim = -10.01\n",
-       "      //upperLim = 10.01\n",
-       "\n",
-       "\n",
-       "\n",
-       "      //alert(\"plot_band_dos\");\n",
-       "      //prepare();\n",
-       "      for(var i = 0; i < N_materials_show; i++)\n",
-       "      {\n",
-       "        \n",
-       "        var checkbox_material_id = \"checkbox_material\" + i.toString();\n",
-       "        var if_selected = check_show_VBM(checkbox_material_id);\n",
-       "        if(if_selected != 1)\n",
-       "        {\n",
-       "          continue;\n",
-       "        }\n",
-       "        add_info(i);\n",
-       "      }\n",
-       "\n",
-       "      //------Plot----------------\n",
-       "        /*\n",
-       "      for(var i_material = 0; i_material < N_materials_show; i_material++)\n",
-       "      {\n",
-       "\n",
-       "        //alert(\"Material \"+i);\n",
-       "        var checkbox_material_id = \"checkbox_material\" + i_material.toString();\n",
-       "        var if_selected = check_show_VBM(checkbox_material_id);\n",
-       "        if(if_selected != 1)\n",
-       "        {\n",
-       "          continue;\n",
-       "        }\n",
-       "\n",
-       "        plot_band_dos_i(i_material, lowerLim, upperLim, 0, 0, -1);\n",
-       "      }\n",
-       "        */\n",
-       "      //alert(\"next:for\")\n",
-       "      for (let i_material = 0, p = Promise.resolve(); i_material < N_materials_show; i_material++) {\n",
-       "        p = p.then(_ => new Promise(resolve =>\n",
-       "            setTimeout(function () {\n",
-       "                //alert(i_material)\n",
-       "                var checkbox_material_id = \"checkbox_material\" + i_material.toString();\n",
-       "                var if_selected = check_show_VBM(checkbox_material_id);\n",
-       "                if(if_selected == 1)\n",
-       "                {\n",
-       "                    plot_band_dos_i(i_material, lowerLim, upperLim, 0, 0, -1);\n",
-       "                }\n",
-       "                resolve();\n",
-       "            }, 0)\n",
-       "        ));\n",
-       "      }\n",
-       "\n",
-       "\n",
-       "      return 1;\n",
-       "    }\n",
-       "\n",
-       "    var i = 0\n",
-       "    var lowerLim = -10\n",
-       "    var upperLim = 10\n",
-       "    var if_show_VBM = 0\n",
-       "    var if_compare = 0\n",
-       "    var i_in_compare_list = -1\n",
-       "\n",
-       "\n",
-       "    \n",
-       "    function plot_band_dos_i(i_material, lowerLim_material, upperLim_material, if_show_VBM_material, if_compare_material, i_in_compare_list_material)\n",
-       "    {\n",
-       "        //alert(\"plot_band_dos_i\")\n",
-       "\n",
-       "        i = i_material;\n",
-       "        lowerLim = lowerLim_material;\n",
-       "        upperLim = upperLim_material;\n",
-       "        if_show_VBM = if_show_VBM_material;\n",
-       "        if_compare = if_compare_material;\n",
-       "        i_in_compare_list = i_in_compare_list_material;\n",
-       "        //alert(\"plot_band_dos_i: i_material: \"+i)\n",
-       "        Jupyter.notebook.execute_cells(window.findCellIndicesByTag('plot_band'));\n",
-       "        //alert('i, lowerLim, upperLim, if_show_VBM, if_compare, i_in_compare_list')\n",
-       "        //plot_band(i, lowerLim, upperLim, if_show_VBM, if_compare, i_in_compare_list);\n",
-       "        Jupyter.notebook.execute_cells(window.findCellIndicesByTag('plot_dos'));\n",
-       "    }    \n",
-       "</script>\n",
-       "\n",
-       "                                \n",
-       "                                \n",
-       "<br><br>\n",
-       "<button  class=\"button\" onclick=\"process()\">Process data</button>\n",
-       "<br><br>\n",
-       "<div id = \"n_materials\" style = \"font-size: 18px; font-weight: 100; height: 60px; width: 100%;\"> Number of materials submitted: 0</div>\n",
-       "<div id = \"show_materials_submitted\" style = \"font-size: 20px; font-color: black;\"> </div>\n",
-       "\n",
-       "<div style = \"width :100%; height: 30px;\"></div> \n",
-       "<p style=\"color: #20335d;font-weight: 100; font-size: 18pt;\"> Select materials to visualize the band structure and DOS:</p>\n",
-       "<div style = \"width :100%; height: 10px;\"></div> \n",
-       "<button class = \"button\" onclick = \"clean_materials_selection()\"> Clean selections </button> \n",
-       "<button class = \"button\" onclick = \"select_all()\"> Select all </button> \n",
-       "<button class = \"button\" onclick = \"visualize_band_dos()\"> Visualize </button> \n",
-       "<div style = \"width :100%; height: 30px;\"></div> \n",
-       "\n",
-       "<div id = \"show_materials_submitted_info\" style = \"width: 100%; font-size: 20px; font-color: black;\"> \n",
-       "  <table id = \"table_materials_submitted_info\" style=\"width:100%\"> </table>\n",
-       "</div>\n",
-       "\n",
-       "<div style = \"width :100%; height: 30px;\"></div> \n",
-       "\n",
-       "\n",
-       "\n",
-       "\n",
-       "<div id=\"div_compare_buttons\" style=\"visibility:hidden\">\n",
-       "  <br><br><br>\n",
-       "  <p style=\"color: #20335d;font-weight: 100; font-size: 18pt;\"> Select two materials in the checkbox on the right for comparison:</p>\n",
-       "  <p style=\"color: #000;font-weight: 1000; font-size: 8pt;\"></p>\n",
-       "  <button class = \"button\" onclick = \"clean_compare_list()\"> Clean selections </button> \n",
-       "  <button class = \"button\" onclick = \"compare();compare()\" title = \"Select 2 materials in the checkbox below and compare: please make sure that the upper/lower limits are the same (using Rescale/Autoscale buttons).\" > Compare</button>\n",
-       "</div>\n",
-       "\n",
-       "\n",
-       "\n",
-       "<div id = \"div_showall\" style = \"width: 100%; visibility:hidden\">\n",
-       "  <div style = \"width: 100%; height: 30px; \"></div>\n",
-       "  <input type = \"checkbox\" id = \"checkbox_showall\" unchecked onclick=\"show_all(this.id)\"/> <font color=\"black\" size = 3px> Show all results </font><font size = 2px color = \"#666\"> (By default only the first 10 results are shown.) </font> \n",
-       "  <div style = \"width: 100%; height: 30px; \"></div>\n",
-       "</div>\n",
-       "\n",
-       "\n",
-       "\n",
-       "\n",
-       "\n",
-       "<div id = \"div_compare\" style = \"position: fixed; top: 20%; left: 10%; width: 1200px; height: 600px; z-index: 999999; border: 1px solid #555; background-color: #fff; display: none\" onclick = \"$(this).fadeOut(500)\"> \n",
-       "  \n",
-       "  <div style = \"float: right; width: 80px; height: 25px; margin-top: 10px; margin-right: 10px; z-index: 1000000; border: 1px solid #555; text-align: center; vertical-align: middle; background-color: #f9f9f9; font-size:12pt; font-color: #000; cursor:pointer;\" > CLOSE </div> <!--button to close the div-->\n",
-       "  <div id = \"div_compare_info\" style = \" width: 350px; height: 500px; float: right; margin-top: 50px; margin-right: 10px; z-index: 10000000;\"></div>\n",
-       "  <div id = \"div_compare_container\" style = \"margin-top: 50px; margin-left: 100px; width: 600px; height: 300px;\">\n",
-       "    <div class=\"g-before-after\" id = \"div_compare_containerx\"></div>\n",
-       "  </div>\n",
-       "</div>\n",
-       "\n",
-       "\n",
-       "<div id = \"demo\"></div>\n",
-       "\n",
-       "<div id = \"plot_placeholder\">\n",
-       "    <div><br></div>\n",
-       "    <table id = \"table_visualize\"> </table>\n",
-       "</div>\n",
-       "<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>\n"
-      ],
-      "text/plain": [
-       "<IPython.core.display.HTML object>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "%%HTML\n",
-    "<script>\n",
-    "    var N_max_show = 10; //Number of results to be shown by default\n",
-    "\n",
-    "    function show_materials_submitted_info()\n",
-    "    {\n",
-    "      //alert(\"N_materials=\" + N_materials)\n",
-    "      //\"table_materials_submitted_info\"\n",
-    "      //alert(\"show_materials_submitted_info: info_obj_all: \"+JSON.stringify(info_obj_all))\n",
-    "      var table_content = new Array(); \n",
-    "      str = '<tr>';\n",
-    "      str += '<th width=\"5%\"></th>'\n",
-    "      str += '<th width=\"10%\"><p style=\\\"text-align:center\\\"><font size = \\\"4pt\\\"><b>Atom labels</b></font></p></th>';\n",
-    "      //str += '<th width=\"10%\"><p style=\\\"text-align:center\\\"><font size = \\\"4pt\\\"><b>Space group</b></font></p></th>';\n",
-    "      //str += '<th width=\"15%\"><p style=\\\"text-align:center\\\"><font size = \\\"4pt\\\"><b>Lattice constants (in Ang)</b></font></p></th>';\n",
-    "      str += '<th width=\"10%\"><p style=\\\"text-align:center\\\"><font size = \\\"4pt\\\"><b>Program name</b></font></p></th>';\n",
-    "      str += '<th width=\"10%\"><p style=\\\"text-align:center\\\"><font size = \\\"4pt\\\"><b>Basis set type</b></font></p></th>';\n",
-    "      str += '<th width=\"15%\"><p style=\\\"text-align:center\\\"><font size = \\\"4pt\\\"><b>Functional</b></font></p></th>';\n",
-    "      //str += '<th width=\"20%\"><p style=\\\"text-align:center\\\"><font size = \\\"4pt\\\"><b>Number of <i>k</i> points per inverse distance</b></font></p></th>';\n",
-    "      str += '</tr>'; //first row: head\n",
-    "      table_content.push(str);\n",
-    "\n",
-    "      for(var i = 0; i < N_materials; i++) //add info of each material\n",
-    "      {\n",
-    "        //alert(\"show_materials_submitted_info: material \"+ i);  \n",
-    "        table_content.push('<tr>');\n",
-    "\n",
-    "        table_content.push('<td>');    \n",
-    "        str = '<input type = \\\"checkbox\\\" name = \"checkbox_material\" id = \\\"checkbox_material' + i.toString() + '\\\" unchecked  onclick=\\\"checkbox_material(this.id)\\\">';\n",
-    "        str += \"<b>&nbsp&nbsp#\" + (i+1).toString() + \"</b>\";\n",
-    "        table_content.push(str);\n",
-    "        table_content.push('</td>');\n",
-    "\n",
-    "        table_content.push('<td>');    \n",
-    "        str = '<font size = \\\"3pt\\\">';\n",
-    "        str += info_obj_all[i][\"atom_labels\"] + '; &nbsp&nbsp';\n",
-    "        str += \"</font>\"\n",
-    "        table_content.push(str);    \n",
-    "        table_content.push('</td>');\n",
-    "        //alert(\"got atom_labels\");\n",
-    "\n",
-    "        /*\n",
-    "        table_content.push('<td>');    \n",
-    "        str = '<font size = \\\"3pt\\\">';\n",
-    "        str += info_obj_all[i][\"space_group_symbol\"] + '; &nbsp&nbsp';\n",
-    "        str += \"</font>\"\n",
-    "        table_content.push(str);    \n",
-    "        table_content.push('</td>');\n",
-    "        //alert(\"got space_group_symbol\");\n",
-    "\n",
-    "        table_content.push('<td>');    \n",
-    "        str = '<font size = \\\"3pt\\\">';\n",
-    "        str += info_obj_all[i][\"lattice_constant\"] + '; &nbsp&nbsp';\n",
-    "        str += \"</font>\"\n",
-    "        table_content.push(str);    \n",
-    "        table_content.push('</td>');\n",
-    "        //alert(\"got lattice_constant\");\n",
-    "        */\n",
-    "          \n",
-    "        table_content.push('<td>'); \n",
-    "        str = '<font size = \\\"3pt\\\">';\n",
-    "        str += info_obj_all[i][\"program_name\"].toUpperCase() + '; &nbsp&nbsp';\n",
-    "        str += \"</font>\"\n",
-    "        table_content.push(str);    \n",
-    "        table_content.push('</td>');\n",
-    "        //alert(\"got program_name\");\n",
-    "\n",
-    "        table_content.push('<td>'); \n",
-    "        str = '<font size = \\\"3pt\\\">';\n",
-    "        str += info_obj_all[i][\"program_basis_set_type\"] + '; &nbsp&nbsp';\n",
-    "        str += \"</font>\"\n",
-    "        table_content.push(str);    \n",
-    "        table_content.push('</td>');\n",
-    "        //alert(\"got program_basis_set_type\");\n",
-    "\n",
-    "\n",
-    "        table_content.push('<td>'); \n",
-    "        str = '<font size = \\\"3pt\\\">';\n",
-    "        str += info_obj_all[i][\"XC_functional_name\"] + '; &nbsp&nbsp';\n",
-    "        str += \"</font>\"\n",
-    "        table_content.push(str);    \n",
-    "        table_content.push('</td>');\n",
-    "        //alert(\"got XC_functional_name\");\n",
-    "\n",
-    "        /*\n",
-    "        table_content.push('<td>'); \n",
-    "        str = '<font size = \\\"3pt\\\">';\n",
-    "        str += band_obj_all[i][\"average_N_k_points_per_inverse_distance\"].toFixed(3);\n",
-    "        str += \"</font>\"\n",
-    "        table_content.push(str);    \n",
-    "        table_content.push('</td>');\n",
-    "        //alert(\"got average_N_k_points_per_inverse_distance\");\n",
-    "        */\n",
-    "        table_content.push('</tr>');\n",
-    "\n",
-    "      }\n",
-    "      \n",
-    "      document.getElementById(\"table_materials_submitted_info\").innerHTML = table_content.join('');\n",
-    "    }\n",
-    "\n",
-    "    function clean_materials_selection()\n",
-    "    {\n",
-    "      var choices_compare = document.getElementsByName(\"checkbox_material\");\n",
-    "      for(var i=0; i<choices_compare.length; i++)\n",
-    "      {\n",
-    "        //choices_compare[i].removeAttribute('checked');\n",
-    "        //choices_compare[i].setAttribute(\"unchecked\", \"unchecked\");\n",
-    "        choices_compare[i].checked = \"\";\n",
-    "      }\n",
-    "    }\n",
-    "\n",
-    "    function select_all()\n",
-    "    {\n",
-    "      var choices_compare = document.getElementsByName(\"checkbox_material\");\n",
-    "      for(var i=0; i<choices_compare.length; i++)\n",
-    "      {\n",
-    "        //choices_compare[i].removeAttribute('checked');\n",
-    "        //choices_compare[i].setAttribute(\"unchecked\", \"unchecked\");\n",
-    "        choices_compare[i].checked = \"checked\";\n",
-    "      }\n",
-    "    }\n",
-    "\n",
-    "\n",
-    "\n",
-    "    function process()\n",
-    "    {\n",
-    "        //alert(\"Process:\"+band_paths)\n",
-    "        //Jupyter.notebook.execute_cells(window.findCellIndicesByTag('init_js_plot'));\n",
-    "        //Jupyter.notebook.execute_cells(window.findCellIndicesByTag('show_materials_submitted_info'));\n",
-    "        show_materials_submitted_info();\n",
-    "        document.getElementById(\"table_visualize\").innerHTML = \"\";\n",
-    "        str = N_materials.toString();\n",
-    "        document.getElementById(\"n_materials\").innerHTML = \"Number of materials submitted: \" + str + \"<font size = 1px color = #C0C0C0  > &nbsp Please press \\'Visualize\\' to visualize the band structure. </font>\";\n",
-    "        document.getElementById(\"div_showall\").style.visibility=\"hidden\";\n",
-    "    }\n",
-    "        \n",
-    "\n",
-    "    var image_band = '';\n",
-    "    var image_dos = '';\n",
-    "    var image_band_links = new Array(N_materials); //store the URL of each band figure -> used to compare 2 figures\n",
-    "    var image_band_links_selected = [];\n",
-    "    var image_band_selected_Number = []; //record which i_material has been selected\n",
-    "\n",
-    "\n",
-    "\n",
-    "    function prepare(N_materials_show)\n",
-    "    {\n",
-    "      document.getElementById(\"table_visualize\").innerHTML = \"\";\n",
-    "      var table_content = new Array(); \n",
-    "      //document.getElementById(\"table_visualize\").innerHTML = table_content.join('');\n",
-    "      //-----Generate the html tables for each material--------\n",
-    "      for(var i = 0; i < N_materials_show; i++)\n",
-    "      {\n",
-    "        checkbox_material_id = \"checkbox_material\" + i.toString();\n",
-    "        var if_selected = check_show_VBM(checkbox_material_id);\n",
-    "        if(if_selected != 1)\n",
-    "        {\n",
-    "          continue;\n",
-    "        }\n",
-    "\n",
-    "        table_content.push('<tr>');\n",
-    "        div_string = '<div style = \\\"height: 20px\\\"></div>';\n",
-    "        table_content.push(div_string);\n",
-    "        table_content.push('<th>');\n",
-    "\n",
-    "        //add main container div\n",
-    "        div_string = '<div id = \\\"div_band_dos' + i.toString() + '\\\" class = \\\"div_band_dos\\\" >';\n",
-    "        table_content.push(div_string);\n",
-    "\n",
-    "        //show No. of the material\n",
-    "        i_material = i + 1;\n",
-    "        div_string = '<div style = \\\"height:30px\\; font-size: 15pt;\">' + '#' + i_material.toString() + '</div>';\n",
-    "        table_content.push(div_string);\n",
-    "\n",
-    "        //show band_path/dos info\n",
-    "        div_string = '<div style = \\\"height:30px\\\">' + 'Band: &nbsp&nbsp' + band_paths[i] + ',&nbsp&nbsp&nbsp&nbspDOS: &nbsp&nbsp' + dos_paths[i] + '</div>';\n",
-    "        table_content.push(div_string);\n",
-    "\n",
-    "        //add div_band\n",
-    "        div_string = '<div id = \\\"div_band' + i.toString() + '\\\" class = \\\"div_band\\\" ></div>';\n",
-    "        table_content.push(div_string);\n",
-    "\n",
-    "        //add div_dos\n",
-    "        div_string = '<div id = \\\"div_dos' + i.toString() + '\\\" class = \\\"div_dos\\\" ></div>';    \n",
-    "        table_content.push(div_string);\n",
-    "\n",
-    "        //add div_tools\n",
-    "        div_string = '<div id = \\\"div_tools' + i.toString() + '\\\" class = \\\"div_tools\\\" >';    \n",
-    "        table_content.push(div_string);\n",
-    "\n",
-    "        //add: infomation\n",
-    "        div_string = '<div id = \\\"div_info' + i.toString() + '\\\">atom_labels<br>program_name</div>';    \n",
-    "        table_content.push(div_string);\n",
-    "\n",
-    "        //add: custom scale\n",
-    "        div_string = '<br><p style=\\\"color: #000;font-weight: 100; font-size: 10pt; align:left\\\"> Set the lower and upper limit of energy scale (in eV): <br><br><font color=\\\"black\\\" size = 3px> Lower limit: &nbsp&nbsp </font><textarea  id=\\\"lowerlimit' + i.toString() + '\\\"  rows=\\\"1\\\" style = \\\"width: 70px;\\\">-10</textarea> <font color=\\\"black\\\" size = 3px> &nbsp eV</font> &nbsp&nbsp&nbsp<font color=\\\"black\\\" size = 3px> Upper limit: &nbsp&nbsp </font><textarea  id=\\\"upperlimit' + i.toString() + '\\\"  rows=\\\"1\\\" style = \\\"width: 70px;\\\">10</textarea> <font color=\\\"black\\\" size = 3px> &nbsp eV&nbsp&nbsp&nbsp</font></p>';\n",
-    "        table_content.push(div_string);\n",
-    "        div_string = '<br><button class = \\\"button_tools\\\" id = \\\"button_customscale' + i.toString() + '\\\"  onclick = \\\"customscale(this.id)\\\"> Rescale </button>';    \n",
-    "        table_content.push(div_string);\n",
-    "\n",
-    "\n",
-    "        //add button:autoscale\n",
-    "        div_string = '<button class = \\\"button_tools\\\" id = \\\"button_autoscale' + i.toString() + '\\\"  onclick = \\\"autoscale(this.id)\\\" title = \\\"(-10 eV, 10 eV)\\\"> Autoscale </button>';    \n",
-    "        table_content.push(div_string);\n",
-    "        //add button:fullscale\n",
-    "        div_string = '<button class = \\\"button_tools\\\" id = \\\"button_fullscale' + i.toString() + '\\\"  onclick = \\\"fullscale(this.id)\\\" title = \\\"(-100 eV, 100 eV)\\\"> Full scale </button><br><br>';    \n",
-    "        table_content.push(div_string);\n",
-    "\n",
-    "        //table_content.push(\"Select and zoom:\");\n",
-    "\n",
-    "        /*//overview for select and zoom\n",
-    "        div_string = '<div id = \\\"div_overview' + i.toString() + '\\\" class = \\\"div_overview\\\" ></div>';    //  <div id=\"overview\" style=\"width:300px;height:200px; margin-left:10px; margin-top: 50px; padding-top: 0px\"></div>\n",
-    "        table_content.push(div_string);\n",
-    "        div_string = '<p id = \\\"overviewLegend' + i.toString() + '\\\"  ></p>';    //  <p id=\"overviewLegend\" style=\"margin-left:10px\"></p>\n",
-    "        table_content.push(div_string);*/\n",
-    "\n",
-    "        //download figures as png\n",
-    "        div_string = '<a id = \\\"img_band' + i.toString() + '\\\" class = \\\"button_tools\\\" target=\\\"_blank\\\" style = \\\"text-decoration: none;\\\" > Download band </a>';\n",
-    "        table_content.push(div_string);    \n",
-    "        div_string = '<a id = \\\"img_dos' + i.toString() + '\\\" class = \\\"button_tools\\\"  target=\\\"_blank\\\" style = \\\"text-decoration: none;\\\" > Download DOS </a>';\n",
-    "        table_content.push(div_string);\n",
-    "\n",
-    "        //add show VBM & CBM\n",
-    "        div_string = '<br><br><p style = \\\"text-normal-black\\\"> <input type = \\\"checkbox\\\" id = \\\"checkbox_VBM' + i.toString() + '\\\" unchecked  onclick=\\\"show_VBM(this.id)\\\"> <font color=\\\"black\\\" size = 3px> Show VBM </font>  (<font color=\\\"blue\\\">\\•</font>) <font color=\\\"black\\\" size = 3px> and CBM </font>(<font color=\\\"red\\\">\\•</font>) </p>';\n",
-    "        table_content.push(div_string);\n",
-    "\n",
-    "\n",
-    "        table_content.push('</div>');//div_tools\n",
-    "\n",
-    "        //checkbox for comparison\n",
-    "        div_string = '<div id = \\\"div_checkbox_compare' + i.toString() + '\\\" class = \\\"div_checkbox_compare\\\" >';\n",
-    "        table_content.push(div_string);\n",
-    "        //div_string = '<p style = \\\"text-normal-black\\\"> <input type = \\\"checkbox\\\" id = \\\"checkbox_compare' + i.toString() + '\\\" unchecked name = \\\"checkbox_compare\\\" onclick=\\\"check_compare(this.id)\\\"> <font color=\\\"black\\\" size = 3px> Compare </font></p><p><font size = 2px color = \"#666\">(select max. 2 materials) </font> </p>';\n",
-    "        div_string = '<p style = \\\"text-normal-black\\\"> <input type = \\\"checkbox\\\" id = \\\"checkbox_compare' + i.toString() + '\\\" checked = \\\"unchecked\\\" unchecked name = \\\"checkbox_compare\\\" onclick=\\\"check_compare(this.id)\\\"> <font color=\\\"black\\\" size = 3px> Compare </font></p><p><font size = 2px color = \"#666\">(select max. 2 materials) </font> </p>';\n",
-    "        table_content.push(div_string);\n",
-    "        table_content.push('</div>');//div_checkbox_compare\n",
-    "\n",
-    "\n",
-    "        table_content.push('</div>');//div_band_dos\n",
-    "        table_content.push('</th>');\n",
-    "        table_content.push('</tr>'); \n",
-    "      }\n",
-    "\n",
-    "      document.getElementById(\"table_visualize\").innerHTML = table_content.join('');\n",
-    "    }\n",
-    "\n",
-    "\n",
-    "    function visualize_band_dos()\n",
-    "    {\n",
-    "        Jupyter.notebook.execute_cells(window.findCellIndicesByTag('init_jquery'));\n",
-    "        Jupyter.notebook.execute_cells(window.findCellIndicesByTag('init_flot'));\n",
-    "        Jupyter.notebook.execute_cells(window.findCellIndicesByTag('init_flot_axislabels'));\n",
-    "        //Jupyter.notebook.execute_cells(window.findCellIndicesByTag('init_flot_dashes'));\n",
-    "        Jupyter.notebook.execute_cells(window.findCellIndicesByTag('init_flot_navigate'));\n",
-    "        //Jupyter.notebook.execute_cells(window.findCellIndicesByTag('init_flot_selection'));\n",
-    "        Jupyter.notebook.execute_cells(window.findCellIndicesByTag('js_flot_legendoncanvas'));\n",
-    "        document.getElementById(\"div_showall\").style.visibility=\"hidden\";\n",
-    "        document.getElementById(\"div_compare_buttons\").style.visibility=\"\";\n",
-    "\n",
-    "\n",
-    "\n",
-    "        if(N_materials > N_max_show)\n",
-    "        {\n",
-    "            document.getElementById(\"div_showall\").style.visibility=\"visible\";\n",
-    "            document.getElementById(\"checkbox_showall\").checked = \"\";\n",
-    "        }              \n",
-    "\n",
-    "        N_materials_show = Math.min(N_max_show, N_materials);\n",
-    "\n",
-    "        prepare(N_materials_show);\n",
-    "        clean_compare_list();\n",
-    "        plot_band_dos_status = plot_band_dos(-10,10, N_materials_show);\n",
-    "\n",
-    "    }\n",
-    "\n",
-    "    function show_all(id)//\"plot_placeholder\"\n",
-    "    {\n",
-    "        var if_showall=0;\n",
-    "        if_showall = check_show_VBM(id);\n",
-    "        if(if_showall == 1)\n",
-    "        {\n",
-    "            N_materials_show = N_materials;\n",
-    "            prepare(N_materials_show);\n",
-    "            clean_compare_list();\n",
-    "            plot_band_dos_status = plot_band_dos(-10,10, N_materials_show);\n",
-    "        }\n",
-    "        else\n",
-    "        {\n",
-    "            N_materials_show = Math.min(N_max_show, N_materials);\n",
-    "            prepare(N_materials_show);\n",
-    "            clean_compare_list();\n",
-    "            plot_band_dos_status = plot_band_dos(-10,10, N_materials_show);\n",
-    "        }\n",
-    "\n",
-    "    }\n",
-    "\n",
-    "    \n",
-    "    //------------------Tool used to get the content from textarea---------------------\n",
-    "    function get_text(textarea_id)\n",
-    "    {\n",
-    "      var text = document.getElementById(textarea_id).value;\n",
-    "      return text;\n",
-    "    }\n",
-    "\n",
-    "\n",
-    "\n",
-    "    //-------------------Compare 2 band figures----------------------------------------\n",
-    "\n",
-    "\n",
-    "    function check_compare(id)//checkbox_compare' + i.toString() + '\\\" unchecked  onclick=\\\"check_compare(this.id)\n",
-    "    {\n",
-    "      var x = document.getElementById(id);\n",
-    "      var choices_compare = document.getElementsByName(\"checkbox_compare\");\n",
-    "      var N_chosen = 0;\n",
-    "      for(var i=0; i<choices_compare.length; i++)\n",
-    "      {\n",
-    "        if(choices_compare[i].checked)\n",
-    "        {\n",
-    "          N_chosen ++;\n",
-    "        }\n",
-    "      }\n",
-    "      if(N_chosen == 2) // In max. only 2 figures could be selected and compared.\n",
-    "      {\n",
-    "        for(var i=0; i<choices_compare.length; i++)\n",
-    "        {\n",
-    "          if(!choices_compare[i].checked)\n",
-    "          {\n",
-    "            choices_compare[i].disabled = 'disabled';\n",
-    "          }\n",
-    "        }\n",
-    "      }\n",
-    "      else\n",
-    "      {\n",
-    "      for(var i=0; i<choices_compare.length; i++)\n",
-    "        {\n",
-    "          choices_compare[i].removeAttribute('disabled');\n",
-    "        }\n",
-    "      }\n",
-    "\n",
-    "    }\n",
-    "\n",
-    "    function compare()\n",
-    "    {\n",
-    "        $(\"#div_compare\").fadeIn(600);//show div for comparison\n",
-    "        //check_compare(-100);\n",
-    "\n",
-    "        var compare_list = [];\n",
-    "        compare_list = make_compare_list();\n",
-    "                //[i_material_1, i_material_2] = make_compare_list();\n",
-    "        i_material_1 = compare_list[0];\n",
-    "        i_material_2 = compare_list[1];\n",
-    "        //document.getElementById(\"demo\").innerHTML = \"In add info compare:\" + i_material_1.toString() + i_material_2.toString();\n",
-    "        compare_figures(i_material_1, i_material_2);  \n",
-    "    }\n",
-    "    function make_compare_list()\n",
-    "    {\n",
-    "      //get the links to the images\n",
-    "      images_selected_links = []; //store the links to the figures for comparison\n",
-    "      var choices_compare = document.getElementsByName(\"checkbox_compare\");\n",
-    "      var N_chosen = 0;\n",
-    "      var str = ''; //tmp str for debug\n",
-    "      var figure_selected = new Array(2);\n",
-    "      for(var i=0; i<choices_compare.length; i++) //check which figures are selected\n",
-    "      {\n",
-    "        if(choices_compare[i].checked)\n",
-    "        {\n",
-    "          id_chosen = choices_compare[i].id;\n",
-    "          i_chosen = Math.round(id_chosen.substring(16));\n",
-    "          var tmp_str = image_band_links[i_chosen];\n",
-    "          images_selected_links.push(tmp_str);\n",
-    "          figure_selected[N_chosen] = i_chosen;\n",
-    "          N_chosen ++;\n",
-    "          //str += beakerx.image_band_links[i];\n",
-    "        }\n",
-    "      }\n",
-    "      var i_material_1 = 0;\n",
-    "      var i_material_2 = 0;\n",
-    "      //document.getElementById(\"demo\").innerHTML = 'In making comare list';\n",
-    "      image_band_links_selected = images_selected_links;\n",
-    "      //document.getElementById(\"demo\").innerHTML = 'In making comare list: next';\n",
-    "      if(N_chosen == 2)\n",
-    "      {\n",
-    "        i_material_1 = figure_selected[0];\n",
-    "        i_material_2 = figure_selected[1];\n",
-    "      }\n",
-    "      //document.getElementById(\"demo\").innerHTML = 'Compare_list: ' +i_material_1.toString() + ' ' + i_material_2.toString();\n",
-    "\n",
-    "      return [i_material_1, i_material_2];\n",
-    "    }\n",
-    "\n",
-    "    function check_compare_scale(i_material_1, i_material_2)\n",
-    "    {\n",
-    "      lowerlimit_id_1 = \"lowerlimit\" + i_material_1.toString();\n",
-    "      lowerlimit_id_2 = \"lowerlimit\" + i_material_2.toString();\n",
-    "      upperlimit_id_1 = \"upperlimit\" + i_material_1.toString();\n",
-    "      upperlimit_id_2 = \"upperlimit\" + i_material_2.toString();\n",
-    "\n",
-    "      lowerlimit_1 = parseFloat(document.getElementById(lowerlimit_id_1).innerHTML);\n",
-    "      lowerlimit_2 = parseFloat(document.getElementById(lowerlimit_id_2).innerHTML);\n",
-    "      upperlimit_1 = parseFloat(document.getElementById(upperlimit_id_2).innerHTML);\n",
-    "      upperlimit_2 = parseFloat(document.getElementById(upperlimit_id_2).innerHTML);\n",
-    "      if((lowerlimit_1 != lowerlimit_2) || (upperlimit_1 != upperlimit_2))\n",
-    "        return -1;\n",
-    "      else\n",
-    "        return 1;\n",
-    "    }\n",
-    "\n",
-    "    function compare_figures(i_material_1, i_material_2)\n",
-    "    {\n",
-    "        Jupyter.notebook.execute_cells(window.findCellIndicesByTag('js_query_beforeafter'));\n",
-    "        Jupyter.notebook.execute_cells(window.findCellIndicesByTag('js_compare_slide'));\n",
-    "        add_info_compare(i_material_1, i_material_2);\n",
-    "        document.getElementById(\"div_compare_container\").scrollIntoView({ behavior: 'smooth' }); \n",
-    "        document.getElementById(\"div_compare_container\").scrollTop += 50;\n",
-    "\n",
-    "    }\n",
-    "\n",
-    "\n",
-    "    function clean_compare_list()\n",
-    "    {\n",
-    "      var choices_compare = document.getElementsByName(\"checkbox_compare\");\n",
-    "      for(var i=0; i<choices_compare.length; i++)\n",
-    "      {\n",
-    "        //choices_compare[i].removeAttribute('checked');\n",
-    "        //choices_compare[i].setAttribute(\"unchecked\", \"unchecked\");\n",
-    "        choices_compare[i].checked = \"\";\n",
-    "        choices_compare[i].removeAttribute('disabled');\n",
-    "      }\n",
-    "    }\n",
-    "\n",
-    "    //-----------Add information about the calculation to \"div_tools\"---------------\n",
-    "    function add_info(i)\n",
-    "    {\n",
-    "      \n",
-    "      //document.getElementById(\"demoa\").innerHTML = i.toString() + div_info_id;\n",
-    "      //for(var i = 0; i < beakerx.N_materials; i++)\n",
-    "      //{\n",
-    "      div_info_id = \"div_info\" + i.toString();\n",
-    "\n",
-    "      var str = '';\n",
-    "      str += \"<br> <p style=\\\"text-align:left\\\"><font size = 3pt><b>Atom labels:</b> &nbsp&nbsp&nbsp&nbsp\" + info_obj_all[i][\"atom_labels\"] + '</font></p>';\n",
-    "      //str += \"<font size = 3pt><b>Space group:</b> &nbsp&nbsp&nbsp&nbsp\" + info_obj_all[i][\"space_group_symbol\"] + '</font>';\n",
-    "      //str += \"<font size = 3pt><b>Lattice constants (in Ang):</b> &nbsp&nbsp&nbsp&nbsp\" + info_obj_all[i][\"lattice_constant\"] + '</font>';\n",
-    "      str += \"<p style=\\\"text-align:left\\\"><font size = 3pt><b>Program name:</b>&nbsp&nbsp&nbsp&nbsp\" + info_obj_all[i][\"program_name\"].toUpperCase() + '</font></p>';\n",
-    "      str += \"<p style=\\\"text-align:left\\\"><font size = 3pt><b>Basis set type:</b>&nbsp&nbsp&nbsp&nbsp\" + info_obj_all[i][\"program_basis_set_type\"] + '</font></p>';\n",
-    "      str += \"<p style=\\\"text-align:left\\\"><font size = 3pt><b>Functional:</b>&nbsp&nbsp&nbsp&nbsp\" + info_obj_all[i][\"XC_functional_name\"] + '</font></p>';\n",
-    "      str += \"<p style=\\\"text-align:left\\\"><font size = 3pt><b>Number of <i>k</i> points per inverse distance:</b>&nbsp&nbsp&nbsp&nbsp\" + band_obj_all[i][\"average_N_k_points_per_inverse_distance\"].toFixed(3) + '</font></p>';\n",
-    "      document.getElementById(div_info_id).innerHTML = str;// + origData[\"atom_labels\"];\n",
-    "      //document.getElementById('program_name_1').innerHTML = \"<b>Code:</b>&nbsp&nbsp&nbsp&nbsp\" + origData[\"program_name\"];\n",
-    "      //document.getElementById('program_basis_set_type_1').innerHTML = \"<b>Basis set type:</b>&nbsp&nbsp&nbsp&nbsp\" + origData[\"program_basis_set_type\"];\n",
-    "      //document.getElementById('XC_functional_name_1').innerHTML = \"<b>Functional:</b>&nbsp&nbsp&nbsp&nbsp\" + origData[\"XC_functional_name\"];  \n",
-    "      //}\n",
-    "      \n",
-    "    }\n",
-    "    function add_info_compare(i,j)\n",
-    "    {\n",
-    "\n",
-    "      div_info_id = \"div_compare_info\";\n",
-    "      var str = '';\n",
-    "\n",
-    "      if_same_scale = check_compare_scale(i_material_1, i_material_2);\n",
-    "      if(if_same_scale == -1)\n",
-    "      {\n",
-    "        str = '<b><font size = \"15pt\" color=\"#940000\">Error: Different lower/upper limits.</font></b><br>';\n",
-    "        document.getElementById(\"div_compare_container\").innerHTML = str;\n",
-    "        document.getElementById(div_info_id).innerHTML = '';\n",
-    "        return;\n",
-    "      }\n",
-    "\n",
-    "      str += \"<br><b><font-size:15pt>Information of the first calculation (left):</font></b> <br>\";\n",
-    "      str += \"<br> <b>Atom labels:</b> &nbsp&nbsp&nbsp&nbsp\" + info_obj_all[i][\"atom_labels\"];\n",
-    "      //str += \"<br> <b>Space group:</b> &nbsp&nbsp&nbsp&nbsp\" + info_obj_all[i][\"space_group_symbol\"];\n",
-    "      //str += \"<br> <b>Lattice constants (in Ang):</b> &nbsp&nbsp&nbsp&nbsp\" + info_obj_all[i][\"lattice_constant\"];\n",
-    "      str += \"<br> <b>Program name:</b>&nbsp&nbsp&nbsp&nbsp\" + info_obj_all[i][\"program_name\"].toUpperCase();\n",
-    "      str += \"<br> <b>Basis set type:</b>&nbsp&nbsp&nbsp&nbsp\" + info_obj_all[i][\"program_basis_set_type\"];\n",
-    "      str += \"<br> <b>Functional:</b>&nbsp&nbsp&nbsp&nbsp\" + info_obj_all[i][\"XC_functional_name\"];\n",
-    "      str += \"<br> <b>Number of <i>k</i> points per inverse distance:</b>&nbsp&nbsp&nbsp&nbsp\" + band_obj_all[j][\"average_N_k_points_per_inverse_distance\"].toFixed(3);\n",
-    "      str += \"<br><br><br><b><font-size:15pt>Information of the second calculation (right):</font></b><br>\";\n",
-    "      str += \"<br> <b>Atom labels:</b> &nbsp&nbsp&nbsp&nbsp\" + info_obj_all[j][\"atom_labels\"];\n",
-    "      //str += \"<br> <b>Space group:</b> &nbsp&nbsp&nbsp&nbsp\" + info_obj_all[j][\"space_group_symbol\"];\n",
-    "      //str += \"<br> <b>Lattice constants (in Ang):</b> &nbsp&nbsp&nbsp&nbsp\" + info_obj_all[j][\"lattice_constant\"];\n",
-    "      str += \"<br> <b>Program name:</b>&nbsp&nbsp&nbsp&nbsp\" + info_obj_all[j][\"program_name\"].toUpperCase();\n",
-    "      str += \"<br> <b>Basis set type:</b>&nbsp&nbsp&nbsp&nbsp\" + info_obj_all[j][\"program_basis_set_type\"];  \n",
-    "      str += \"<br> <b>Functional:</b>&nbsp&nbsp&nbsp&nbsp\" + info_obj_all[j][\"XC_functional_name\"];\n",
-    "      str += \"<br> <b>Number of <i>k</i> points per inverse distance:</b>&nbsp&nbsp&nbsp&nbsp\" + band_obj_all[j][\"average_N_k_points_per_inverse_distance\"].toFixed(3);\n",
-    "      document.getElementById(div_info_id).innerHTML = str;// + origData[\"atom_labels\"];\n",
-    "    }\n",
-    "\n",
-    "\n",
-    "\n",
-    "    //-----------------------Show/hide VBM, CBM-------------------------\n",
-    "    function check_show_VBM(checkbox_VBM_id)\n",
-    "    {\n",
-    "      var x = document.getElementById(checkbox_VBM_id);\n",
-    "      var if_checked = 0;\n",
-    "      if(x.checked)//== \"checked\")\n",
-    "      {\n",
-    "        //document.getElementById(\"demoa\").innerHTML = \"checked!\";\n",
-    "        if_checked = 1;\n",
-    "      }\n",
-    "      else if (x.unchecked)// == \"unchecked\")\n",
-    "      {\n",
-    "        //document.getElementById(\"demoa\").innerHTML = \"unchecked!\";\n",
-    "        if_checked = -1;\n",
-    "      }\n",
-    "      else\n",
-    "      {\n",
-    "        //document.getElementById(\"demoa\").innerHTML = \"nothing detected!\";\n",
-    "      }\n",
-    "      return if_checked;\n",
-    "    }\n",
-    "\n",
-    "    function check_if_in_compare_list(i) // check if the current material i is to be compared\n",
-    "    {\n",
-    "\n",
-    "      var checkbox_compare_id = \"checkbox_compare\" + i.toString();\n",
-    "      var if_compare = check_show_VBM(checkbox_compare_id);\n",
-    "      //document.getElementById(\"demo\").innerHTML = 'if_compare of ' + i.toString() + ' : ' + if_compare.toString();\n",
-    "      var i_compare_material_1, i_compare_material_2;\n",
-    "      [i_compare_material_1, i_compare_material_2] = make_compare_list();\n",
-    "      var i_in_compare_list = -1;\n",
-    "      if(i_compare_material_1 == i)\n",
-    "      {\n",
-    "        i_in_compare_list = 1;\n",
-    "      }\n",
-    "      else if (i_compare_material_2 == i)\n",
-    "      {\n",
-    "        i_in_compare_list = 2;\n",
-    "      }\n",
-    "      else\n",
-    "      {\n",
-    "        i_in_compare_list = 0;\n",
-    "      }\n",
-    "      //document.getElementById(\"demo\").innerHTML = 'Checking ' + i.toString() + ' in Compare_list:  ' + i_in_compare_list.toString();\n",
-    "      return [if_compare, i_in_compare_list];\n",
-    "    }\n",
-    "\n",
-    "    function show_VBM(id)\n",
-    "    {\n",
-    "      //prepare(\"new\");\n",
-    "      //var if_show_VBM = -1;\n",
-    "      var len_id = id.length;\n",
-    "      var i_material = id.substring(12);\n",
-    "      var i = Math.round(i_material);\n",
-    "\n",
-    "      var checkbox_VBM_id = \"checkbox_VBM\" + i.toString();\n",
-    "      var if_show_VBM = check_show_VBM(checkbox_VBM_id);\n",
-    "\n",
-    "      var if_compare, i_in_compare_list;\n",
-    "      [if_compare, i_in_compare_list] = check_if_in_compare_list(i);\n",
-    "      //document.getElementById(\"demo\").innerHTML = i.toString() + ' in Compare_list:  ' + i_in_compare_list.toString();\n",
-    "\n",
-    "      plot_band_dos_i(i, -10, 10, if_show_VBM, if_compare, i_in_compare_list);\n",
-    "\n",
-    "    }\n",
-    "\n",
-    "\n",
-    "    //---------------------Functions to rescale-------------------------------------------\n",
-    "    function autoscale(id)\n",
-    "    {\n",
-    "      var len_id = id.length;\n",
-    "      var i_material = id.substring(16);\n",
-    "      var i = Math.round(i_material);\n",
-    "\n",
-    "      upperlim_id = \"upperlimit\" + i_material;\n",
-    "      document.getElementById(upperlim_id).innerHTML =\"10.0\";\n",
-    "      lowerlim_id = \"lowerlimit\" + i_material;\n",
-    "      document.getElementById(lowerlim_id).innerHTML =\"-10.0\";\n",
-    "\n",
-    "\n",
-    "      //document.getElementById(\"demoa\").innerHTML =i_material;\n",
-    "      var checkbox_VBM_id = \"checkbox_VBM\" + i.toString();\n",
-    "      var if_show_VBM = check_show_VBM(checkbox_VBM_id);\n",
-    "\n",
-    "      var if_compare, i_in_compare_list;\n",
-    "      [if_compare, i_in_compare_list] = check_if_in_compare_list(i);\n",
-    "\n",
-    "\n",
-    "      plot_band_dos_i(i, -10, 10, if_show_VBM, if_compare, i_in_compare_list);\n",
-    "\n",
-    "    }\n",
-    "\n",
-    "    function fullscale(id)\n",
-    "    {\n",
-    "      var len_id = id.length;\n",
-    "      var i_material = id.substring(16);\n",
-    "      var i = Math.round(i_material);\n",
-    "\n",
-    "      upperlim_id = \"upperlimit\" + i_material;\n",
-    "      document.getElementById(upperlim_id).innerHTML =\"100.0\";\n",
-    "      lowerlim_id = \"lowerlimit\" + i_material;\n",
-    "      document.getElementById(lowerlim_id).innerHTML =\"-100.0\";\n",
-    "\n",
-    "      //document.getElementById(\"demoa\").innerHTML =i_material;\n",
-    "      var checkbox_VBM_id = \"checkbox_VBM\" + i.toString();\n",
-    "      var if_show_VBM = check_show_VBM(checkbox_VBM_id);\n",
-    "\n",
-    "      var if_compare, i_in_compare_list;\n",
-    "      [if_compare, i_in_compare_list] = check_if_in_compare_list(i);\n",
-    "\n",
-    "\n",
-    "\n",
-    "      plot_band_dos_i(i, -100, 100, if_show_VBM, if_compare, i_in_compare_list);\n",
-    "\n",
-    "    }\n",
-    "\n",
-    "    function customscale(id)\n",
-    "    {\n",
-    "      var len_id = id.length;\n",
-    "      var i_material = id.substring(18);\n",
-    "      var i = Math.round(i_material);\n",
-    "      //\n",
-    "      upperlim_id = \"upperlimit\" + i_material;\n",
-    "      upperlim = document.getElementById(upperlim_id).value;\n",
-    "      upperlim_float = Math.round(upperlim);\n",
-    "      lowerlim_id = \"lowerlimit\" + i_material;\n",
-    "      lowerlim = document.getElementById(lowerlim_id).value;\n",
-    "      lowerlim_float = Math.round(lowerlim);\n",
-    "\n",
-    "      var checkbox_VBM_id = \"checkbox_VBM\" + i.toString();\n",
-    "      var if_show_VBM = check_show_VBM(checkbox_VBM_id);\n",
-    "\n",
-    "      var if_compare, i_in_compare_list;\n",
-    "      [if_compare, i_in_compare_list] = check_if_in_compare_list(i);\n",
-    "\n",
-    "\n",
-    "\n",
-    "      plot_band_dos_i(i, lowerlim_float, upperlim_float, if_show_VBM, if_compare, i_in_compare_list);  \n",
-    "    }\n",
-    "\n",
-    "\n",
-    "    function plot_band_dos(lowerLim, upperLim, N_materials_show)\n",
-    "    {\n",
-    "      placeholder_band = \"#div_band1\";\n",
-    "      placeholder_dos = \"#div_dos1\";\n",
-    "     // lowerLim = -10.01\n",
-    "      //upperLim = 10.01\n",
-    "\n",
-    "\n",
-    "\n",
-    "      //alert(\"plot_band_dos\");\n",
-    "      //prepare();\n",
-    "      for(var i = 0; i < N_materials_show; i++)\n",
-    "      {\n",
-    "        \n",
-    "        var checkbox_material_id = \"checkbox_material\" + i.toString();\n",
-    "        var if_selected = check_show_VBM(checkbox_material_id);\n",
-    "        if(if_selected != 1)\n",
-    "        {\n",
-    "          continue;\n",
-    "        }\n",
-    "        add_info(i);\n",
-    "      }\n",
-    "\n",
-    "      //------Plot----------------\n",
-    "        /*\n",
-    "      for(var i_material = 0; i_material < N_materials_show; i_material++)\n",
-    "      {\n",
-    "\n",
-    "        //alert(\"Material \"+i);\n",
-    "        var checkbox_material_id = \"checkbox_material\" + i_material.toString();\n",
-    "        var if_selected = check_show_VBM(checkbox_material_id);\n",
-    "        if(if_selected != 1)\n",
-    "        {\n",
-    "          continue;\n",
-    "        }\n",
-    "\n",
-    "        plot_band_dos_i(i_material, lowerLim, upperLim, 0, 0, -1);\n",
-    "      }\n",
-    "        */\n",
-    "      //alert(\"next:for\")\n",
-    "      for (let i_material = 0, p = Promise.resolve(); i_material < N_materials_show; i_material++) {\n",
-    "        p = p.then(_ => new Promise(resolve =>\n",
-    "            setTimeout(function () {\n",
-    "                //alert(i_material)\n",
-    "                var checkbox_material_id = \"checkbox_material\" + i_material.toString();\n",
-    "                var if_selected = check_show_VBM(checkbox_material_id);\n",
-    "                if(if_selected == 1)\n",
-    "                {\n",
-    "                    plot_band_dos_i(i_material, lowerLim, upperLim, 0, 0, -1);\n",
-    "                }\n",
-    "                resolve();\n",
-    "            }, 0)\n",
-    "        ));\n",
-    "      }\n",
-    "\n",
-    "\n",
-    "      return 1;\n",
-    "    }\n",
-    "\n",
-    "    var i = 0\n",
-    "    var lowerLim = -10\n",
-    "    var upperLim = 10\n",
-    "    var if_show_VBM = 0\n",
-    "    var if_compare = 0\n",
-    "    var i_in_compare_list = -1\n",
-    "\n",
-    "\n",
-    "    \n",
-    "    function plot_band_dos_i(i_material, lowerLim_material, upperLim_material, if_show_VBM_material, if_compare_material, i_in_compare_list_material)\n",
-    "    {\n",
-    "        //alert(\"plot_band_dos_i\")\n",
-    "\n",
-    "        i = i_material;\n",
-    "        lowerLim = lowerLim_material;\n",
-    "        upperLim = upperLim_material;\n",
-    "        if_show_VBM = if_show_VBM_material;\n",
-    "        if_compare = if_compare_material;\n",
-    "        i_in_compare_list = i_in_compare_list_material;\n",
-    "        //alert(\"plot_band_dos_i: i_material: \"+i)\n",
-    "        Jupyter.notebook.execute_cells(window.findCellIndicesByTag('plot_band'));\n",
-    "        //alert('i, lowerLim, upperLim, if_show_VBM, if_compare, i_in_compare_list')\n",
-    "        //plot_band(i, lowerLim, upperLim, if_show_VBM, if_compare, i_in_compare_list);\n",
-    "        Jupyter.notebook.execute_cells(window.findCellIndicesByTag('plot_dos'));\n",
-    "    }    \n",
-    "</script>\n",
-    "\n",
-    "                                \n",
-    "                                \n",
-    "<br><br>\n",
-    "<button  class=\"button\" onclick=\"process()\">Process data</button>\n",
-    "<br><br>\n",
-    "<div id = \"n_materials\" style = \"font-size: 18px; font-weight: 100; height: 60px; width: 100%;\"> Number of materials submitted: 0</div>\n",
-    "<div id = \"show_materials_submitted\" style = \"font-size: 20px; font-color: black;\"> </div>\n",
-    "\n",
-    "<div style = \"width :100%; height: 30px;\"></div> \n",
-    "<p style=\"color: #20335d;font-weight: 100; font-size: 18pt;\"> Select materials to visualize the band structure and DOS:</p>\n",
-    "<div style = \"width :100%; height: 10px;\"></div> \n",
-    "<button class = \"button\" onclick = \"clean_materials_selection()\"> Clean selections </button> \n",
-    "<button class = \"button\" onclick = \"select_all()\"> Select all </button> \n",
-    "<button class = \"button\" onclick = \"visualize_band_dos()\"> Visualize </button> \n",
-    "<div style = \"width :100%; height: 30px;\"></div> \n",
-    "\n",
-    "<div id = \"show_materials_submitted_info\" style = \"width: 100%; font-size: 20px; font-color: black;\"> \n",
-    "  <table id = \"table_materials_submitted_info\" style=\"width:100%\"> </table>\n",
-    "</div>\n",
-    "\n",
-    "<div style = \"width :100%; height: 30px;\"></div> \n",
-    "\n",
-    "\n",
-    "\n",
-    "\n",
-    "<div id=\"div_compare_buttons\" style=\"visibility:hidden\">\n",
-    "  <br><br><br>\n",
-    "  <p style=\"color: #20335d;font-weight: 100; font-size: 18pt;\"> Select two materials in the checkbox on the right for comparison:</p>\n",
-    "  <p style=\"color: #000;font-weight: 1000; font-size: 8pt;\"></p>\n",
-    "  <button class = \"button\" onclick = \"clean_compare_list()\"> Clean selections </button> \n",
-    "  <button class = \"button\" onclick = \"compare();compare()\" title = \"Select 2 materials in the checkbox below and compare: please make sure that the upper/lower limits are the same (using Rescale/Autoscale buttons).\" > Compare</button>\n",
-    "</div>\n",
-    "\n",
-    "\n",
-    "\n",
-    "<div id = \"div_showall\" style = \"width: 100%; visibility:hidden\">\n",
-    "  <div style = \"width: 100%; height: 30px; \"></div>\n",
-    "  <input type = \"checkbox\" id = \"checkbox_showall\" unchecked onclick=\"show_all(this.id)\"/> <font color=\"black\" size = 3px> Show all results </font><font size = 2px color = \"#666\"> (By default only the first 10 results are shown.) </font> \n",
-    "  <div style = \"width: 100%; height: 30px; \"></div>\n",
-    "</div>\n",
-    "\n",
-    "\n",
-    "\n",
-    "\n",
-    "\n",
-    "<div id = \"div_compare\" style = \"position: fixed; top: 20%; left: 10%; width: 1200px; height: 600px; z-index: 999999; border: 1px solid #555; background-color: #fff; display: none\" onclick = \"$(this).fadeOut(500)\"> \n",
-    "  \n",
-    "  <div style = \"float: right; width: 80px; height: 25px; margin-top: 10px; margin-right: 10px; z-index: 1000000; border: 1px solid #555; text-align: center; vertical-align: middle; background-color: #f9f9f9; font-size:12pt; font-color: #000; cursor:pointer;\" > CLOSE </div> <!--button to close the div-->\n",
-    "  <div id = \"div_compare_info\" style = \" width: 350px; height: 500px; float: right; margin-top: 50px; margin-right: 10px; z-index: 10000000;\"></div>\n",
-    "  <div id = \"div_compare_container\" style = \"margin-top: 50px; margin-left: 100px; width: 600px; height: 300px;\">\n",
-    "    <div class=\"g-before-after\" id = \"div_compare_containerx\"></div>\n",
-    "  </div>\n",
-    "</div>\n",
-    "\n",
-    "\n",
-    "<div id = \"demo\"></div>\n",
-    "\n",
-    "<div id = \"plot_placeholder\">\n",
-    "    <div><br></div>\n",
-    "    <table id = \"table_visualize\"> </table>\n",
-    "</div>\n",
-    "<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 173,
-   "metadata": {
-    "tags": [
-     "plot_band"
-    ]
-   },
-   "outputs": [
-    {
-     "data": {
-      "application/javascript": [
-       "        //alert(\"tag: plot_band\")\n",
-       "\n",
-       "plot_band(i, lowerLim, upperLim, if_show_VBM, if_compare, i_in_compare_list);\n",
-       "\n",
-       "function plot_band(i, lowerLim, upperLim, if_show_VBM, if_compare, i_in_compare_list)\n",
-       "{\n",
-       "        //i=0;\n",
-       "        //alert(\"plot_band \"+ i)\n",
-       "        var placeholder_band = \"#div_band\" + i.toString();\n",
-       "        var placeholder_dos = \"#div_dos\" + i.toString();\n",
-       "        var placeholder_tools = \"#div_tools\" + i.toString();\n",
-       "        var placeholder_overview  = \"#div_overview\" + i.toString();\n",
-       "        var placeholder_overviewlegend = \"#overviewLegend\" + i.toString();\n",
-       "        var checkbox_VBM_id = \"checkbox_VBM\" + i.toString();\n",
-       "        var img_band_id = \"img_band\" + i.toString();\n",
-       "        var img_dos_id = \"img_dos\" + i.toString();\n",
-       "\n",
-       "        var placeholder_band_compare = \"\";\n",
-       "\n",
-       "\n",
-       "        if(i_in_compare_list == 1)\n",
-       "        {\n",
-       "            placeholder_band_compare = \"#div_band_compare_1\";\n",
-       "        }\n",
-       "        else if(i_in_compare_list == 2)\n",
-       "        {\n",
-       "            placeholder_band_compare = \"#div_band_compare_2\";\n",
-       "        }\n",
-       "        else\n",
-       "        {\n",
-       "            placeholder_band_compare = \"#div_band_compare_1\"; // just for safe\n",
-       "        }\n",
-       "\n",
-       "        Object.size = function(obj) {\n",
-       "            var size = 0, key;\n",
-       "            for (key in obj) \n",
-       "            {\n",
-       "                if (obj.hasOwnProperty(key)) size++;\n",
-       "            }\n",
-       "            return size;\n",
-       "        };\n",
-       "\n",
-       "        //Get the number of bands\n",
-       "        //alert(\"Getting band\")\n",
-       "        //alert(band_obj_all)\n",
-       "        //alert(\"band_obj_all got!\")\n",
-       "        var N_bands = Object.size(band_obj_all[i][\"band_y_axis\"]);\n",
-       "        var N_k_coors = Object.size(band_obj_all[i][\"band_x_axis\"]);\n",
-       "        //alert(band_obj_all[i][\"band_y_axis\"])\n",
-       "        var band_plotdata = [];\n",
-       "        \n",
-       "        for(var i_band =0; i_band < N_bands; i_band++)\n",
-       "        {\n",
-       "          var tmp_data = [];\n",
-       "          for(var j_k_coor = 0; j_k_coor < N_k_coors; j_k_coor ++)\n",
-       "          {\n",
-       "            tmp_data.push([band_obj_all[i][\"band_x_axis\"][j_k_coor],band_obj_all[i][\"band_y_axis\"][i_band][j_k_coor]]);\n",
-       "          }\n",
-       "          var plotData = { shadowSize: 0 , data: tmp_data, color: 'black',  series: { lines: { show: true } , points: {show: false} } };\n",
-       "          band_plotdata.push(plotData);\n",
-       "        }\n",
-       "\n",
-       "\n",
-       "        var tmp_data0 = [[0, 0], [1, 0]];\n",
-       "        var plotData0 = { shadowSize:0, color: 'black', data: tmp_data0, dashes:{ show:true, lineWidth: 1.5}};\n",
-       "        band_plotdata.push(plotData0);\n",
-       "\n",
-       "        var band_plotdata_overview = band_plotdata.slice(0);\n",
-       "\n",
-       "        var HOMOdata= [[band_obj_all[i][\"HOMO_coor\"],band_obj_all[i][\"HOMO_energy\"]]];\n",
-       "        var HOMOlabel = [\"VBM\"];\n",
-       "        var plotHOMO={ shadowSize:0, color: 'blue', data: HOMOdata, points:{show:true, radius: 4 , fill: true, fillColor: 'blue'},lines:{show: false},  showLabels: true, labels: HOMOlabel, canvasRender: true, cColor: 'red', cFont:\"2em Arial\"};\n",
-       "\n",
-       "        var LUMOdata= [[band_obj_all[i][\"LUMO_coor\"],band_obj_all[i][\"LUMO_energy\"]]];\n",
-       "        var LUMOlabel = [\"CBM\"];\n",
-       "        var plotLUMO={ shadowSize:0, color: 'red', data: LUMOdata, points:{show:true, radius: 4 , fill: true, fillColor: 'red'},lines:{show: false},  showLabels: true, labels: LUMOlabel, canvasRender: true, cColor: 'red', cFont:\"2em Arial\"};\n",
-       "\n",
-       "        //if_show_VBM = check_show_VBM(checkbox_VBM_id);\n",
-       "        if (if_show_VBM == 1)\n",
-       "        {\n",
-       "          band_plotdata.push(plotHOMO);\n",
-       "          band_plotdata.push(plotLUMO);\n",
-       "        }\n",
-       "\n",
-       " \n",
-       "        //alert(img_band_id + band_plotdata)\n",
-       "            \n",
-       "        //!!!FIXME: if ($(\"#showVBM:checked\").length > 0 && gap > 0.1) \n",
-       "        //plotHOMOLUMO={ shadowSize:0, color: 'red', data: d5, points:{show:true, radius: 0.8 , fill: true}, showLabels: true, labels: d5label, labelPlacement: labelPos, canvasRender: true, cColor: 'red', cFont:\"1em Arial\"  }\n",
-       "\n",
-       "        var canvas_band;\n",
-       "        var options_band = {\n",
-       "          canvas: true,\n",
-       "          //legend:{ type: \"canvas\" },\n",
-       "          series: { lines: { show: true, lineWidth: 2 }, \n",
-       "          points: { show: false } }, \n",
-       "          xaxis: { \n",
-       "            ticks: band_obj_all[i][\"labels\"], \n",
-       "            color:\"#000\", \n",
-       "            font: {size: 20}, \n",
-       "            zoomRange: false,\n",
-       "            panRange: false \n",
-       "          }, \n",
-       "          yaxis: { \n",
-       "            axisLabel: \"Energy (eV)\", \n",
-       "            axisLabelUseCanvas: true,\n",
-       "            //axisLabelUseCanvas: false,\n",
-       "            axisLabelFontSizePixels: 20,\n",
-       "            axisLabelFontFamily: 'Arial', \n",
-       "            axisLabelPadding: 10, \n",
-       "            color:\"#000\", \n",
-       "            font: {size: 20, family:\"Arial\"},\n",
-       "            tickLength:-5, \n",
-       "            min: lowerLim, \n",
-       "            max: upperLim,\n",
-       "            tickDecimals: 0, \n",
-       "            zoomRange: [0.001, 1000],\n",
-       "            panRange: [-100, 100] \n",
-       "          },\n",
-       "\n",
-       "          zoom: { \n",
-       "            interactive: true\n",
-       "          },\n",
-       "\n",
-       "          pan: {\n",
-       "            interactive: true\n",
-       "          }, \n",
-       "\n",
-       "          //selection: { mode: \"xy\", color: \"#86a6b4\" }, \n",
-       "\n",
-       "          grid: { \n",
-       "            labelMargin: 15,\n",
-       "            hoverable: true, \n",
-       "            backgroundColor: { colors: [\"#fff\", \"#fff\"] }, \n",
-       "            borderWidth: {\n",
-       "              top: 2, \n",
-       "              right: 2,\n",
-       "              bottom: 2,\n",
-       "              left: 2,\n",
-       "              color : null } \n",
-       "          }\n",
-       "        }\n",
-       "        //var plot_band = $.plot($(placeholder_band), band_plotdata, options_band);\n",
-       "        //var plot_band = $.plot(\"#div_bandx\", band_plotdata, options_band);\n",
-       "        var plot_band = $.plot($(placeholder_band), band_plotdata, options_band).getCanvas(); // save the canvas\n",
-       "        var image_band = plot_band.toDataURL();\n",
-       "        image_band = image_band.replace(\"image/png\",\"image/octet-stream\");\n",
-       "        //beakerx.image_band = image_band;\n",
-       "        document.getElementById(img_band_id).href= image_band;\n",
-       "        image_band_links[i] = image_band;\n",
-       "        //alert(\"band done\")\n",
-       "}\n"
-      ],
-      "text/plain": [
-       "<IPython.core.display.Javascript object>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "%%javascript\n",
-    "        //alert(\"tag: plot_band\")\n",
-    "\n",
-    "plot_band(i, lowerLim, upperLim, if_show_VBM, if_compare, i_in_compare_list);\n",
-    "\n",
-    "function plot_band(i, lowerLim, upperLim, if_show_VBM, if_compare, i_in_compare_list)\n",
-    "{\n",
-    "        //i=0;\n",
-    "        //alert(\"plot_band \"+ i)\n",
-    "        var placeholder_band = \"#div_band\" + i.toString();\n",
-    "        var placeholder_dos = \"#div_dos\" + i.toString();\n",
-    "        var placeholder_tools = \"#div_tools\" + i.toString();\n",
-    "        var placeholder_overview  = \"#div_overview\" + i.toString();\n",
-    "        var placeholder_overviewlegend = \"#overviewLegend\" + i.toString();\n",
-    "        var checkbox_VBM_id = \"checkbox_VBM\" + i.toString();\n",
-    "        var img_band_id = \"img_band\" + i.toString();\n",
-    "        var img_dos_id = \"img_dos\" + i.toString();\n",
-    "\n",
-    "        var placeholder_band_compare = \"\";\n",
-    "\n",
-    "\n",
-    "        if(i_in_compare_list == 1)\n",
-    "        {\n",
-    "            placeholder_band_compare = \"#div_band_compare_1\";\n",
-    "        }\n",
-    "        else if(i_in_compare_list == 2)\n",
-    "        {\n",
-    "            placeholder_band_compare = \"#div_band_compare_2\";\n",
-    "        }\n",
-    "        else\n",
-    "        {\n",
-    "            placeholder_band_compare = \"#div_band_compare_1\"; // just for safe\n",
-    "        }\n",
-    "\n",
-    "        Object.size = function(obj) {\n",
-    "            var size = 0, key;\n",
-    "            for (key in obj) \n",
-    "            {\n",
-    "                if (obj.hasOwnProperty(key)) size++;\n",
-    "            }\n",
-    "            return size;\n",
-    "        };\n",
-    "\n",
-    "        //Get the number of bands\n",
-    "        //alert(\"Getting band\")\n",
-    "        //alert(band_obj_all)\n",
-    "        //alert(\"band_obj_all got!\")\n",
-    "        var N_bands = Object.size(band_obj_all[i][\"band_y_axis\"]);\n",
-    "        var N_k_coors = Object.size(band_obj_all[i][\"band_x_axis\"]);\n",
-    "        //alert(band_obj_all[i][\"band_y_axis\"])\n",
-    "        var band_plotdata = [];\n",
-    "        \n",
-    "        for(var i_band =0; i_band < N_bands; i_band++)\n",
-    "        {\n",
-    "          var tmp_data = [];\n",
-    "          for(var j_k_coor = 0; j_k_coor < N_k_coors; j_k_coor ++)\n",
-    "          {\n",
-    "            tmp_data.push([band_obj_all[i][\"band_x_axis\"][j_k_coor],band_obj_all[i][\"band_y_axis\"][i_band][j_k_coor]]);\n",
-    "          }\n",
-    "          var plotData = { shadowSize: 0 , data: tmp_data, color: 'black',  series: { lines: { show: true } , points: {show: false} } };\n",
-    "          band_plotdata.push(plotData);\n",
-    "        }\n",
-    "\n",
-    "\n",
-    "        var tmp_data0 = [[0, 0], [1, 0]];\n",
-    "        var plotData0 = { shadowSize:0, color: 'black', data: tmp_data0, dashes:{ show:true, lineWidth: 1.5}};\n",
-    "        band_plotdata.push(plotData0);\n",
-    "\n",
-    "        var band_plotdata_overview = band_plotdata.slice(0);\n",
-    "\n",
-    "        var HOMOdata= [[band_obj_all[i][\"HOMO_coor\"],band_obj_all[i][\"HOMO_energy\"]]];\n",
-    "        var HOMOlabel = [\"VBM\"];\n",
-    "        var plotHOMO={ shadowSize:0, color: 'blue', data: HOMOdata, points:{show:true, radius: 4 , fill: true, fillColor: 'blue'},lines:{show: false},  showLabels: true, labels: HOMOlabel, canvasRender: true, cColor: 'red', cFont:\"2em Arial\"};\n",
-    "\n",
-    "        var LUMOdata= [[band_obj_all[i][\"LUMO_coor\"],band_obj_all[i][\"LUMO_energy\"]]];\n",
-    "        var LUMOlabel = [\"CBM\"];\n",
-    "        var plotLUMO={ shadowSize:0, color: 'red', data: LUMOdata, points:{show:true, radius: 4 , fill: true, fillColor: 'red'},lines:{show: false},  showLabels: true, labels: LUMOlabel, canvasRender: true, cColor: 'red', cFont:\"2em Arial\"};\n",
-    "\n",
-    "        //if_show_VBM = check_show_VBM(checkbox_VBM_id);\n",
-    "        if (if_show_VBM == 1)\n",
-    "        {\n",
-    "          band_plotdata.push(plotHOMO);\n",
-    "          band_plotdata.push(plotLUMO);\n",
-    "        }\n",
-    "\n",
-    " \n",
-    "        //alert(img_band_id + band_plotdata)\n",
-    "            \n",
-    "        //!!!FIXME: if ($(\"#showVBM:checked\").length > 0 && gap > 0.1) \n",
-    "        //plotHOMOLUMO={ shadowSize:0, color: 'red', data: d5, points:{show:true, radius: 0.8 , fill: true}, showLabels: true, labels: d5label, labelPlacement: labelPos, canvasRender: true, cColor: 'red', cFont:\"1em Arial\"  }\n",
-    "\n",
-    "        var canvas_band;\n",
-    "        var options_band = {\n",
-    "          canvas: true,\n",
-    "          //legend:{ type: \"canvas\" },\n",
-    "          series: { lines: { show: true, lineWidth: 2 }, \n",
-    "          points: { show: false } }, \n",
-    "          xaxis: { \n",
-    "            ticks: band_obj_all[i][\"labels\"], \n",
-    "            color:\"#000\", \n",
-    "            font: {size: 20}, \n",
-    "            zoomRange: false,\n",
-    "            panRange: false \n",
-    "          }, \n",
-    "          yaxis: { \n",
-    "            axisLabel: \"Energy (eV)\", \n",
-    "            axisLabelUseCanvas: true,\n",
-    "            //axisLabelUseCanvas: false,\n",
-    "            axisLabelFontSizePixels: 20,\n",
-    "            axisLabelFontFamily: 'Arial', \n",
-    "            axisLabelPadding: 10, \n",
-    "            color:\"#000\", \n",
-    "            font: {size: 20, family:\"Arial\"},\n",
-    "            tickLength:-5, \n",
-    "            min: lowerLim, \n",
-    "            max: upperLim,\n",
-    "            tickDecimals: 0, \n",
-    "            zoomRange: [0.001, 1000],\n",
-    "            panRange: [-100, 100] \n",
-    "          },\n",
-    "\n",
-    "          zoom: { \n",
-    "            interactive: true\n",
-    "          },\n",
-    "\n",
-    "          pan: {\n",
-    "            interactive: true\n",
-    "          }, \n",
-    "\n",
-    "          //selection: { mode: \"xy\", color: \"#86a6b4\" }, \n",
-    "\n",
-    "          grid: { \n",
-    "            labelMargin: 15,\n",
-    "            hoverable: true, \n",
-    "            backgroundColor: { colors: [\"#fff\", \"#fff\"] }, \n",
-    "            borderWidth: {\n",
-    "              top: 2, \n",
-    "              right: 2,\n",
-    "              bottom: 2,\n",
-    "              left: 2,\n",
-    "              color : null } \n",
-    "          }\n",
-    "        }\n",
-    "        //var plot_band = $.plot($(placeholder_band), band_plotdata, options_band);\n",
-    "        //var plot_band = $.plot(\"#div_bandx\", band_plotdata, options_band);\n",
-    "        var plot_band = $.plot($(placeholder_band), band_plotdata, options_band).getCanvas(); // save the canvas\n",
-    "        var image_band = plot_band.toDataURL();\n",
-    "        image_band = image_band.replace(\"image/png\",\"image/octet-stream\");\n",
-    "        //beakerx.image_band = image_band;\n",
-    "        document.getElementById(img_band_id).href= image_band;\n",
-    "        image_band_links[i] = image_band;\n",
-    "        //alert(\"band done\")\n",
-    "}"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 174,
-   "metadata": {
-    "tags": [
-     "plot_dos"
-    ]
-   },
-   "outputs": [
-    {
-     "data": {
-      "application/javascript": [
-       "        //alert(\"tag: plot_dos \" + i)\n",
-       "        //i=0;\n",
-       "\n",
-       "        var placeholder_dos = \"#div_dos\" + i.toString();\n",
-       "        var placeholder_tools = \"#div_tools\" + i.toString();\n",
-       "        var placeholder_overview  = \"#div_overview\" + i.toString();\n",
-       "        var placeholder_overviewlegend = \"#overviewLegend\" + i.toString();\n",
-       "        var img_dos_id = \"img_dos\" + i.toString();\n",
-       "\n",
-       "//----Plot DOS----------------------\n",
-       "        var dos_plotdata = [];\n",
-       "        //alert(\"dos:\"+dos_obj_all[i])\n",
-       "        var xdos = dos_obj_all[i][\"dos_x_axis\"];\n",
-       "        var ydos = dos_obj_all[i][\"dos_y_axis\"][0];\n",
-       "        var dosLabelPos = Math.max.apply(Math, ydos)/2;\n",
-       "        var d2 = [];\n",
-       "        for (var ii = 0; ii < xdos.length; ii+=1) {\n",
-       "          d2.push([ydos[ii],xdos[ii]]);\n",
-       "        }\n",
-       "        var plotData2={ shadowSize: 0, color: 'black' , data: d2};\n",
-       "        dos_plotdata.push(plotData2);\n",
-       "        //alert(\"dos_plotdata\"+JSON.stringify(dos_plotdata[0]));\n",
-       "        \n",
-       "        function find_xaxis_max_min(data, lowerbound, upperbound)\n",
-       "        {\n",
-       "                //data[xaxis,y] find the max and min value of x axis\n",
-       "                //alert(\"dos[0]:\" + data[0][\"data\"]);\n",
-       "                //alert(\"Bounds: \" + lowerbound + \" ,  \" + upperbound)\n",
-       "                var n_data = data.length;\n",
-       "                //alert(\"N dos: \" + n_data);\n",
-       "                var data_min = 1000000;\n",
-       "                var data_max = -1000000;\n",
-       "                var data_current = 0;\n",
-       "                for (var i = 0; i < n_data; i++)\n",
-       "                {\n",
-       "                    if((data[i][1] >= lowerbound) && (data[i][1] <= upperbound))\n",
-       "                    {\n",
-       "                        data_current = data[i][0];\n",
-       "                        //alert(\"data[i]: \" + data[i] + \"data[i][0]: \" + data_current);\n",
-       "                        if(data_current >= data_max)\n",
-       "                        {\n",
-       "                            data_max = data_current;\n",
-       "                        }\n",
-       "                        if(data_current <= data_min)\n",
-       "                        {\n",
-       "                            data_min = data_current;\n",
-       "                        }\n",
-       "                    }\n",
-       "                }\n",
-       "                var data_max_min = [data_max, data_min];\n",
-       "                //alert(\"data_max_min: \" + data_max_min);\n",
-       "                return data_max_min;\n",
-       "        }\n",
-       "        var dos_x_max_min = find_xaxis_max_min(dos_plotdata[0][\"data\"], lowerLim, upperLim);\n",
-       "        var dosLabelPos = (dos_x_max_min[0] + dos_x_max_min[1])/2;\n",
-       "        //alert(\"dos_x_max_min:\"+dos_x_max_min+\", dosLabelPos:\"+dosLabelPos);\n",
-       "        var options_dos ={\n",
-       "          canvas: true,\n",
-       "          series: {\n",
-       "            lines: { show: true, lineWidth:2 },\n",
-       "            points: { show: false }\n",
-       "          },\n",
-       "\n",
-       "          yaxis: { \n",
-       "            axisLabel: \"\", \n",
-       "            axisLabelUseCanvas: true,\n",
-       "            axisLabelFontSizePixels: 20,\n",
-       "            axisLabelFontFamily: 'Arial', \n",
-       "            axisLabelPadding: 10, \n",
-       "            color:\"#000\", \n",
-       "            font: {size: 20},\n",
-       "            tickLength:-5, \n",
-       "            min: lowerLim, \n",
-       "            max: upperLim,\n",
-       "            tickDecimals: 0, \n",
-       "            zoomRange: [0.001, 1000],\n",
-       "            panRange: [-100, 100] \n",
-       "          },\n",
-       "\n",
-       "          xaxis: {\n",
-       "            axisLabel: \" \",\n",
-       "            axisLabelUseCanvas: false,\n",
-       "            axisLabelFontSizePixels: 20,\n",
-       "            axisLabelFontFamily: 'Arial',\n",
-       "            axisLabelPadding: 3,\n",
-       "            color:\"rgb(0, 0, 0)\",\n",
-       "            font: {size: 20, family:\"Arial\"},\n",
-       "            //ticks: 10,\n",
-       "            tickLength:0,\n",
-       "            min: dos_x_max_min[1],//0,\n",
-       "            max: dos_x_max_min[0],//1,\n",
-       "            tickDecimals: 0,\n",
-       "            ticks: [[ dosLabelPos ,'DOS']],\n",
-       "            //tickFormatter: MyFormatter\n",
-       "            panRange: false\n",
-       "          },\n",
-       "          pan: {\n",
-       "            interactive: true\n",
-       "          }, \n",
-       "\n",
-       "          grid: {\n",
-       "            labelMargin: 15,\n",
-       "            hoverable: true,\n",
-       "            //borderWidth : 1000,\n",
-       "            //show : false,\n",
-       "            //  //backgroundColor: { colors: [ \"#fff\", \"#eee\" ] },\n",
-       "            backgroundColor: { colors: [\"#fff\", \"#fff\"] },\n",
-       "            borderWidth: {\n",
-       "              top: 2,\n",
-       "              right: 2,\n",
-       "              bottom: 2,\n",
-       "              left: 2,\n",
-       "              color : null\n",
-       "            }\n",
-       "          }\n",
-       "        }\n",
-       "        var plot_dos = $.plot(placeholder_dos, dos_plotdata, options_dos).getCanvas();\n",
-       "        var image_dos = plot_dos.toDataURL();\n",
-       "        image_dos = image_dos.replace(\"image/png\",\"image/octet-stream\");\n",
-       "        image_dos = image_dos;\n",
-       "        document.getElementById(img_dos_id).href= image_dos;\n",
-       "        //alert(\"dos done.\")\n"
-      ],
-      "text/plain": [
-       "<IPython.core.display.Javascript object>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "%%javascript\n",
-    "        //alert(\"tag: plot_dos \" + i)\n",
-    "        //i=0;\n",
-    "\n",
-    "        var placeholder_dos = \"#div_dos\" + i.toString();\n",
-    "        var placeholder_tools = \"#div_tools\" + i.toString();\n",
-    "        var placeholder_overview  = \"#div_overview\" + i.toString();\n",
-    "        var placeholder_overviewlegend = \"#overviewLegend\" + i.toString();\n",
-    "        var img_dos_id = \"img_dos\" + i.toString();\n",
-    "\n",
-    "//----Plot DOS----------------------\n",
-    "        var dos_plotdata = [];\n",
-    "        //alert(\"dos:\"+dos_obj_all[i])\n",
-    "        var xdos = dos_obj_all[i][\"dos_x_axis\"];\n",
-    "        var ydos = dos_obj_all[i][\"dos_y_axis\"][0];\n",
-    "        var dosLabelPos = Math.max.apply(Math, ydos)/2;\n",
-    "        var d2 = [];\n",
-    "        for (var ii = 0; ii < xdos.length; ii+=1) {\n",
-    "          d2.push([ydos[ii],xdos[ii]]);\n",
-    "        }\n",
-    "        var plotData2={ shadowSize: 0, color: 'black' , data: d2};\n",
-    "        dos_plotdata.push(plotData2);\n",
-    "        //alert(\"dos_plotdata\"+JSON.stringify(dos_plotdata[0]));\n",
-    "        \n",
-    "        function find_xaxis_max_min(data, lowerbound, upperbound)\n",
-    "        {\n",
-    "                //data[xaxis,y] find the max and min value of x axis\n",
-    "                //alert(\"dos[0]:\" + data[0][\"data\"]);\n",
-    "                //alert(\"Bounds: \" + lowerbound + \" ,  \" + upperbound)\n",
-    "                var n_data = data.length;\n",
-    "                //alert(\"N dos: \" + n_data);\n",
-    "                var data_min = 1000000;\n",
-    "                var data_max = -1000000;\n",
-    "                var data_current = 0;\n",
-    "                for (var i = 0; i < n_data; i++)\n",
-    "                {\n",
-    "                    if((data[i][1] >= lowerbound) && (data[i][1] <= upperbound))\n",
-    "                    {\n",
-    "                        data_current = data[i][0];\n",
-    "                        //alert(\"data[i]: \" + data[i] + \"data[i][0]: \" + data_current);\n",
-    "                        if(data_current >= data_max)\n",
-    "                        {\n",
-    "                            data_max = data_current;\n",
-    "                        }\n",
-    "                        if(data_current <= data_min)\n",
-    "                        {\n",
-    "                            data_min = data_current;\n",
-    "                        }\n",
-    "                    }\n",
-    "                }\n",
-    "                var data_max_min = [data_max, data_min];\n",
-    "                //alert(\"data_max_min: \" + data_max_min);\n",
-    "                return data_max_min;\n",
-    "        }\n",
-    "        var dos_x_max_min = find_xaxis_max_min(dos_plotdata[0][\"data\"], lowerLim, upperLim);\n",
-    "        var dosLabelPos = (dos_x_max_min[0] + dos_x_max_min[1])/2;\n",
-    "        //alert(\"dos_x_max_min:\"+dos_x_max_min+\", dosLabelPos:\"+dosLabelPos);\n",
-    "        var options_dos ={\n",
-    "          canvas: true,\n",
-    "          series: {\n",
-    "            lines: { show: true, lineWidth:2 },\n",
-    "            points: { show: false }\n",
-    "          },\n",
-    "\n",
-    "          yaxis: { \n",
-    "            axisLabel: \"\", \n",
-    "            axisLabelUseCanvas: true,\n",
-    "            axisLabelFontSizePixels: 20,\n",
-    "            axisLabelFontFamily: 'Arial', \n",
-    "            axisLabelPadding: 10, \n",
-    "            color:\"#000\", \n",
-    "            font: {size: 20},\n",
-    "            tickLength:-5, \n",
-    "            min: lowerLim, \n",
-    "            max: upperLim,\n",
-    "            tickDecimals: 0, \n",
-    "            zoomRange: [0.001, 1000],\n",
-    "            panRange: [-100, 100] \n",
-    "          },\n",
-    "\n",
-    "          xaxis: {\n",
-    "            axisLabel: \" \",\n",
-    "            axisLabelUseCanvas: false,\n",
-    "            axisLabelFontSizePixels: 20,\n",
-    "            axisLabelFontFamily: 'Arial',\n",
-    "            axisLabelPadding: 3,\n",
-    "            color:\"rgb(0, 0, 0)\",\n",
-    "            font: {size: 20, family:\"Arial\"},\n",
-    "            //ticks: 10,\n",
-    "            tickLength:0,\n",
-    "            min: dos_x_max_min[1],//0,\n",
-    "            max: dos_x_max_min[0],//1,\n",
-    "            tickDecimals: 0,\n",
-    "            ticks: [[ dosLabelPos ,'DOS']],\n",
-    "            //tickFormatter: MyFormatter\n",
-    "            panRange: false\n",
-    "          },\n",
-    "          pan: {\n",
-    "            interactive: true\n",
-    "          }, \n",
-    "\n",
-    "          grid: {\n",
-    "            labelMargin: 15,\n",
-    "            hoverable: true,\n",
-    "            //borderWidth : 1000,\n",
-    "            //show : false,\n",
-    "            //  //backgroundColor: { colors: [ \"#fff\", \"#eee\" ] },\n",
-    "            backgroundColor: { colors: [\"#fff\", \"#fff\"] },\n",
-    "            borderWidth: {\n",
-    "              top: 2,\n",
-    "              right: 2,\n",
-    "              bottom: 2,\n",
-    "              left: 2,\n",
-    "              color : null\n",
-    "            }\n",
-    "          }\n",
-    "        }\n",
-    "        var plot_dos = $.plot(placeholder_dos, dos_plotdata, options_dos).getCanvas();\n",
-    "        var image_dos = plot_dos.toDataURL();\n",
-    "        image_dos = image_dos.replace(\"image/png\",\"image/octet-stream\");\n",
-    "        image_dos = image_dos;\n",
-    "        document.getElementById(img_dos_id).href= image_dos;\n",
-    "        //alert(\"dos done.\")"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 167,
-   "metadata": {
-    "tags": [
-     "init_jquery"
-    ]
-   },
-   "outputs": [
-    {
-     "data": {
-      "text/html": [
-       "<script src=\"http://code.jquery.com/jquery-1.8.3.min.js\"></script>\n"
-      ],
-      "text/plain": [
-       "<IPython.core.display.HTML object>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "%%HTML\n",
-    "<script src=\"http://code.jquery.com/jquery-1.8.3.min.js\"></script>"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 168,
-   "metadata": {
-    "tags": [
-     "init_flot"
-    ]
-   },
-   "outputs": [
-    {
-     "data": {
-      "text/html": [
-       "<script src=\"js/jquery.flot.js\"></script>\n"
-      ],
-      "text/plain": [
-       "<IPython.core.display.HTML object>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "%%HTML\n",
-    "<script src=\"js/jquery.flot.js\"></script>\n"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 169,
-   "metadata": {
-    "tags": [
-     "init_flot_axislabels"
-    ]
-   },
-   "outputs": [
-    {
-     "data": {
-      "text/html": [
-       "<script src=\"js/jquery.flot.axislabels.js\"></script>\n"
-      ],
-      "text/plain": [
-       "<IPython.core.display.HTML object>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "%%HTML\n",
-    "<script src=\"js/jquery.flot.axislabels.js\"></script>"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 170,
-   "metadata": {
-    "tags": [
-     "init_flot_navigate"
-    ]
-   },
-   "outputs": [
-    {
-     "data": {
-      "text/html": [
-       "<script src=\"js/jquery.flot.navigate.js\"></script>\n"
-      ],
-      "text/plain": [
-       "<IPython.core.display.HTML object>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "%%HTML\n",
-    "<script src=\"js/jquery.flot.navigate.js\"></script>"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 87,
-   "metadata": {
-    "tags": [
-     "init_flot_selection"
-    ]
-   },
-   "outputs": [
-    {
-     "data": {
-      "text/html": [
-       "<script src=\"js/jquery.flot.selection.js\"></script>\n"
-      ],
-      "text/plain": [
-       "<IPython.core.display.HTML object>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "%%HTML\n",
-    "<script src=\"js/jquery.flot.selection.js\"></script>"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 149,
-   "metadata": {
-    "tags": [
-     "js_query_beforeafter"
-    ]
-   },
-   "outputs": [
-    {
-     "data": {
-      "application/javascript": [
-       "//jquery.beforeafter.min.js\n",
-       "!function(e){e.fn.beforeafter=function(i){var t=e.extend({touch:!0,message:\"Slide\",hide_message:!0,reset:!0,reset_delay:3e3,drag_horizontal:!0,split_horizontal:!0\n",
-       "},i);return this.each(function(){var i=e(this),a=i.find(\"img\"),n=a.data(\"aftersrc\"),s=i.width(),d=0;a.after('<div class=\"g-img-after\"><img style=\"width: '+s+'px;\" src=\"'+n+'\"></div>'),\n",
-       "a.addClass(\"g-img-before\").width(s),i.append('<div class=\"g-img-divider\"><span>'+t.message+\"</span></div>\"),d=i.height(),t.split_horizontal||i.addClass(\"g-vertical\"),\n",
-       "i.on(\"mouseenter touchstart\",function(e){var t=i.data(\"reset-timer\");t&&(window.clearTimeout(t),i.data(\"reset-timer\",!1))}).on(\"mousemove touchmove\",function(a){\n",
-       "var n=0,o=0,r=i.find(\".g-img-divider span\");if(t.drag_horizontal)n=a.pageX-i.offset().left,o=n/s*100;else{var f=i.offset().top-e(window).scrollTop();n=a.clientY/f,\n",
-       "o=(a.clientY-f)/d*100}if(t.touch&&\"undefined\"!=typeof a.originalEvent.touches){var g=a.originalEvent.touches[0];o=t.drag_horizontal?(g.pageX-i.offset().left)/s*100:(g.pageY-i.offset().top)/d*100;\n",
-       "}t.split_horizontal?(i.find(\".g-img-after\").css(\"left\",o+\"%\"),i.find(\".g-img-divider\").css(\"left\",o+\"%\")):(i.find(\".g-img-after\").css(\"top\",o+\"%\"),i.find(\".g-img-divider\").css(\"top\",o+\"%\")),\n",
-       "t.hide_message&&r.is(\":visible\")&&r.fadeOut()}).on(\"mouseleave touchend touchcancel\",function(e){var a=i.data(\"reset-timer\"),n=i.find(\".g-img-divider span\");\n",
-       "t.reset&&(a||(a=window.setTimeout(function(){t.split_horizontal?(i.find(\".g-img-after\").animate({left:\"50%\"},500),i.find(\".g-img-divider\").animate({left:\"50%\"\n",
-       "},500,function(){n.fadeIn()})):(i.find(\".g-img-after\").animate({top:\"50%\"},500),i.find(\".g-img-divider\").animate({top:\"50%\"},500,function(){n.fadeIn()})),\n",
-       "i.data(\"reset-timer\",!1)},t.reset_delay),i.data(\"reset-timer\",a)))})}),this}}(jQuery);\n"
-      ],
-      "text/plain": [
-       "<IPython.core.display.Javascript object>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "%%javascript\n",
-    "//jquery.beforeafter.min.js\n",
-    "!function(e){e.fn.beforeafter=function(i){var t=e.extend({touch:!0,message:\"Slide\",hide_message:!0,reset:!0,reset_delay:3e3,drag_horizontal:!0,split_horizontal:!0\n",
-    "},i);return this.each(function(){var i=e(this),a=i.find(\"img\"),n=a.data(\"aftersrc\"),s=i.width(),d=0;a.after('<div class=\"g-img-after\"><img style=\"width: '+s+'px;\" src=\"'+n+'\"></div>'),\n",
-    "a.addClass(\"g-img-before\").width(s),i.append('<div class=\"g-img-divider\"><span>'+t.message+\"</span></div>\"),d=i.height(),t.split_horizontal||i.addClass(\"g-vertical\"),\n",
-    "i.on(\"mouseenter touchstart\",function(e){var t=i.data(\"reset-timer\");t&&(window.clearTimeout(t),i.data(\"reset-timer\",!1))}).on(\"mousemove touchmove\",function(a){\n",
-    "var n=0,o=0,r=i.find(\".g-img-divider span\");if(t.drag_horizontal)n=a.pageX-i.offset().left,o=n/s*100;else{var f=i.offset().top-e(window).scrollTop();n=a.clientY/f,\n",
-    "o=(a.clientY-f)/d*100}if(t.touch&&\"undefined\"!=typeof a.originalEvent.touches){var g=a.originalEvent.touches[0];o=t.drag_horizontal?(g.pageX-i.offset().left)/s*100:(g.pageY-i.offset().top)/d*100;\n",
-    "}t.split_horizontal?(i.find(\".g-img-after\").css(\"left\",o+\"%\"),i.find(\".g-img-divider\").css(\"left\",o+\"%\")):(i.find(\".g-img-after\").css(\"top\",o+\"%\"),i.find(\".g-img-divider\").css(\"top\",o+\"%\")),\n",
-    "t.hide_message&&r.is(\":visible\")&&r.fadeOut()}).on(\"mouseleave touchend touchcancel\",function(e){var a=i.data(\"reset-timer\"),n=i.find(\".g-img-divider span\");\n",
-    "t.reset&&(a||(a=window.setTimeout(function(){t.split_horizontal?(i.find(\".g-img-after\").animate({left:\"50%\"},500),i.find(\".g-img-divider\").animate({left:\"50%\"\n",
-    "},500,function(){n.fadeIn()})):(i.find(\".g-img-after\").animate({top:\"50%\"},500),i.find(\".g-img-divider\").animate({top:\"50%\"},500,function(){n.fadeIn()})),\n",
-    "i.data(\"reset-timer\",!1)},t.reset_delay),i.data(\"reset-timer\",a)))})}),this}}(jQuery);"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 150,
-   "metadata": {
-    "tags": [
-     "js_compare_slide"
-    ]
-   },
-   "outputs": [
-    {
-     "data": {
-      "application/javascript": [
-       "var div_str = '';\n",
-       "//div_str = '<style>  .g-before-after{position:relative;overflow:hidden}.g-before-after img{display:block}.g-before-after .g-img-before{float:left}.g-before-after .g-img-after,.g-before-after.g-vertical .g-img-after{position:absolute;top:0;right:0;left:50%;bottom:0;overflow:hidden}.g-before-after .g-img-after img{position:absolute;right:0;top:0}.g-before-after .g-img-divider{position:absolute;left:50%;top:0;bottom:0;width:0;border-left:1px solid #fff;border-right:1px solid #fff}.g-before-after .g-img-divider>span{position:absolute;top:50%;display:block;background-color:#fff;padding:5px 10px;line-height:1;text-align:center;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.g-before-after.g-vertical .g-img-after{top:50%;left:0}.g-before-after.g-vertical .g-img-after img{position:absolute;right:auto;top:auto;left:0;bottom:0}.g-before-after.g-vertical .g-img-divider{position:absolute;left:0;top:50%;bottom:auto;right:0;height:0;width:100%;border-top:1px solid #fff;border-bottom:1px solid #fff;border-left:0 none;border-right:0 none}.g-before-after.g-vertical .g-img-divider>span{top:50%;left:50%} </style>'\n",
-       "//div_str += '<script>$(\\'#div_compare_containerx\\').beforeafter();  </script>';\n",
-       "//div_str +='<script type=\\\"text/javascript\\\" src=\\\"https://github.com/jquery/jquery/blob/master/src/jquery.js\\\"></script> '\n",
-       "//div_str += '<div class=\\\"g-before-after\\\" id=\\\"div_compare_containerx\\\">';\n",
-       "div_str +='<img src = \\\"'\n",
-       "\n",
-       "var src1 = image_band_links_selected[0];\n",
-       "var src2 = image_band_links_selected[1];\n",
-       "var tmp_src1 = src1;\n",
-       "var tmp_src2 = src2;\n",
-       "//src1 = \"https://images4.alphacoders.com/640/640956.jpg\";\n",
-       "//src2 = \"http://imgmr.com/wp-content/uploads/2016/06/SAO-anime.jpg\";\n",
-       "div_str +=src1;\n",
-       "div_str += '\\\" data-aftersrc=\\\"'\n",
-       "div_str +=src2;\n",
-       "//div_str += '\\\"></div>';\n",
-       "div_str += '\\\"/>';\n",
-       "//#div_compare_containerx\n",
-       "document.getElementById(\"div_compare_containerx\").innerHTML = div_str;\n",
-       "$('#div_compare_containerx').beforeafter({drag_horizontal: false, split_horizontal: false});\n",
-       "$('#div_compare_containerx').beforeafter({drag_horizontal: false, split_horizontal: false});\n",
-       "//beakerx.image_band_links[i]\n"
-      ],
-      "text/plain": [
-       "<IPython.core.display.Javascript object>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "%%javascript\n",
-    "var div_str = '';\n",
-    "//div_str = '<style>  .g-before-after{position:relative;overflow:hidden}.g-before-after img{display:block}.g-before-after .g-img-before{float:left}.g-before-after .g-img-after,.g-before-after.g-vertical .g-img-after{position:absolute;top:0;right:0;left:50%;bottom:0;overflow:hidden}.g-before-after .g-img-after img{position:absolute;right:0;top:0}.g-before-after .g-img-divider{position:absolute;left:50%;top:0;bottom:0;width:0;border-left:1px solid #fff;border-right:1px solid #fff}.g-before-after .g-img-divider>span{position:absolute;top:50%;display:block;background-color:#fff;padding:5px 10px;line-height:1;text-align:center;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.g-before-after.g-vertical .g-img-after{top:50%;left:0}.g-before-after.g-vertical .g-img-after img{position:absolute;right:auto;top:auto;left:0;bottom:0}.g-before-after.g-vertical .g-img-divider{position:absolute;left:0;top:50%;bottom:auto;right:0;height:0;width:100%;border-top:1px solid #fff;border-bottom:1px solid #fff;border-left:0 none;border-right:0 none}.g-before-after.g-vertical .g-img-divider>span{top:50%;left:50%} </style>'\n",
-    "//div_str += '<script>$(\\'#div_compare_containerx\\').beforeafter();  </script>';\n",
-    "//div_str +='<script type=\\\"text/javascript\\\" src=\\\"https://github.com/jquery/jquery/blob/master/src/jquery.js\\\"></script> '\n",
-    "//div_str += '<div class=\\\"g-before-after\\\" id=\\\"div_compare_containerx\\\">';\n",
-    "div_str +='<img src = \\\"'\n",
-    "\n",
-    "var src1 = image_band_links_selected[0];\n",
-    "var src2 = image_band_links_selected[1];\n",
-    "var tmp_src1 = src1;\n",
-    "var tmp_src2 = src2;\n",
-    "//src1 = \"https://images4.alphacoders.com/640/640956.jpg\";\n",
-    "//src2 = \"http://imgmr.com/wp-content/uploads/2016/06/SAO-anime.jpg\";\n",
-    "div_str +=src1;\n",
-    "div_str += '\\\" data-aftersrc=\\\"'\n",
-    "div_str +=src2;\n",
-    "//div_str += '\\\"></div>';\n",
-    "div_str += '\\\"/>';\n",
-    "//#div_compare_containerx\n",
-    "document.getElementById(\"div_compare_containerx\").innerHTML = div_str;\n",
-    "$('#div_compare_containerx').beforeafter({drag_horizontal: false, split_horizontal: false});\n",
-    "$('#div_compare_containerx').beforeafter({drag_horizontal: false, split_horizontal: false});\n",
-    "//beakerx.image_band_links[i]"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {
-    "scrolled": false,
-    "tags": [
-     "process_band_dos_data_python"
-    ]
-   },
-   "outputs": [],
-   "source": [
-    "#tag:python_2\n",
-    "import urllib.request, json\n",
-    "import numpy as np\n",
-    "import math\n",
-    "\n",
-    "#======Define global objs============\n",
-    "info_all = []\n",
-    "band_obj_all = []\n",
-    "dos_obj_all = []\n",
-    "\n",
-    "def load_jsonfile(path):\n",
-    "    #with open(path, encoding='utf-8') as band_file:    \n",
-    "    #    return json.load(band_file)\n",
-    "\n",
-    " \n",
-    "    with urllib.request.urlopen(path) as url:\n",
-    "        data = json.loads(url.read().decode())\n",
-    "    return data\n",
-    "\n",
-    "#-----Get the labels for x axis---------------\n",
-    "def get_label_flag(coor_array):\n",
-    "    #np.sort(coor_array)\n",
-    "    x = coor_array[0]\n",
-    "    y = coor_array[1]\n",
-    "    z = coor_array[2]\n",
-    "    coor =np.sort([x,y,z])\n",
-    "    xx = coor[0]\n",
-    "    yy = coor[1]\n",
-    "    zz = coor[2]\n",
-    "    coor = [xx, yy, zz]\n",
-    "    #pprint(coor)\n",
-    "    if (coor == [0, 0.5, 0.5]):\n",
-    "        return \"X\"\n",
-    "    if (coor == [0, 0.0, 0.5]):\n",
-    "        return \"M\"\n",
-    "    elif (coor == [0.5, 0.5, 0.5]):\n",
-    "        return \"L\"\n",
-    "    elif (coor == [0.375, 0.375, 0.75]):\n",
-    "        return \"K\"\n",
-    "    elif (coor == [0.25, 0.5, 0.75]):\n",
-    "        return \"W\"\n",
-    "    elif (coor == [0, 0, 0]):\n",
-    "        return \"\\u0393\"\n",
-    "    elif (coor == [0.25, 0.625, 0.625]):\n",
-    "        return \"U\"\n",
-    "    else:\n",
-    "        return \"?\"\n",
-    "\n",
-    "#============Process the band structure data============\n",
-    "def get_band_obj(band_path, dos_fermi_energy):\n",
-    "\n",
-    "    #band_data: read from json file    \n",
-    "    #Load the data files for band\n",
-    "    band_data = load_jsonfile(band_path)\n",
-    "   \n",
-    "    #---------Read section_k_band_segment------------\n",
-    "    section_k_band_segment = band_data['section_run']['section_single_configuration_calculation']['section_k_band'][0]['section_k_band_segment']\n",
-    "    \n",
-    "    #--------Get the number of k band segments-------------\n",
-    "    N_k_band_segments = len(section_k_band_segment)\n",
-    "    \n",
-    "    #----------Get the total number of k points in all segments---------\n",
-    "    N_k_points_all = 0\n",
-    "    for i in range(N_k_band_segments):\n",
-    "        band_k_points = section_k_band_segment[i]['band_k_points']\n",
-    "        N_k_points_all = N_k_points_all + len(band_k_points)\n",
-    "    \n",
-    "    #--------Get the x axis for the band structure figure: the coordinates of k points in 1D\n",
-    "    # store in k_coor_1D[N_k_points_total]-----------------\n",
-    "\n",
-    "    band_distance_segments = np.zeros(N_k_band_segments)\n",
-    "    for i in range(N_k_band_segments):\n",
-    "        [[x1, y1, z1],[x2, y2, z2]]= section_k_band_segment[i]['band_segm_start_end']  #\"band_segm_start_end\": [[0.5, 0.0, 0.5],[0.5, 0.25, 0.75]],\n",
-    "        band_distance_segments[i] = math.pow((x1-x2), 2) + math.pow((y1-y2), 2) + math.pow((z1-z2), 2)\n",
-    "\n",
-    "    \n",
-    "    band_distance_total = math.fsum(band_distance_segments)\n",
-    "    #print(band_distance_segments)\n",
-    "    average_N_k_points_per_inverse_distance = N_k_points_all / band_distance_total\n",
-    "    \n",
-    "    #Prepare the parameters to rescale the k coordinates into [0,1]\n",
-    "    step_k_point = 1.0 / N_k_points_all\n",
-    "    step_k_point = (1.0 + step_k_point) / N_k_points_all\n",
-    "    \n",
-    "    #   \n",
-    "    k_coor_1D = np.zeros((N_k_points_all))\n",
-    "    for i_k_points in range(N_k_points_all):\n",
-    "        k_coor_1D[i_k_points] = round( step_k_point * i_k_points, 3)\n",
-    "    #for i in range(N_k_band_segments):\n",
-    "    #    ki[i] = \n",
-    "    \n",
-    "\n",
-    "    #--------Get the eigenvalues of each band trajectory--------------\n",
-    "    N_k_points_per_segment = len(section_k_band_segment[0]['band_energies'][0]) #suppose the numebr of k points in all the segments are the same\n",
-    "    N_bands = len(section_k_band_segment[0]['band_energies'][0][0])\n",
-    "    band_energies_all = np.zeros((N_bands, N_k_points_all)) #store the eigenvalues\n",
-    "    N_k_points_all = 0\n",
-    "    for i_segments in range(N_k_band_segments):\n",
-    "        band_energies = section_k_band_segment[i_segments]['band_energies']\n",
-    "        N_spin_channel = len(band_energies) #Number of the spin channel --FIXME: no spin polarized\n",
-    "        N_k_points_per_segment = len(band_energies[0])\n",
-    "        for i_k_points in range(N_k_points_per_segment):\n",
-    "            for i_bands in range(N_bands):\n",
-    "                band_energies_all[i_bands][N_k_points_all] = band_energies[0][i_k_points][i_bands] / (1.60217656535 * pow(10, -19))\n",
-    "            N_k_points_all = N_k_points_all + 1\n",
-    "    \n",
-    "    \n",
-    "    N_labels = 0\n",
-    "    for i_segments in range(N_k_band_segments):\n",
-    "        for j in range(2):\n",
-    "            labels_tmp =  section_k_band_segment[i_segments]['band_segm_start_end'][j];\n",
-    "            N_labels = N_labels + 1\n",
-    "\n",
-    "    label_flag = [\"\" for i in range(N_labels)] #stores the flags of the labels (X, W, G, etc)\n",
-    "\n",
-    "    i_label = 0\n",
-    "    label_flag_last_final = \"\"\n",
-    "    label_flag_current_initial = \"\"\n",
-    "    for i_segments in range(N_k_band_segments):\n",
-    "        labels_coor_0 =  section_k_band_segment[i_segments]['band_segm_start_end'][0];\n",
-    "        labels_coor_1 =  section_k_band_segment[i_segments]['band_segm_start_end'][1];\n",
-    "        np.sort(labels_coor_0)\n",
-    "        np.sort(labels_coor_1)\n",
-    "        label_flag_0 = get_label_flag(labels_coor_0)\n",
-    "        label_flag_1 = get_label_flag(labels_coor_1)\n",
-    "        label_flag_current_initial = label_flag_0\n",
-    "        if(label_flag_last_final == \"\"):\n",
-    "            label_flag_last_final = label_flag_0\n",
-    "\n",
-    "        if(label_flag_last_final == label_flag_current_initial):\n",
-    "            label_flag[i_label] = label_flag_current_initial\n",
-    "        else:\n",
-    "            label_flag[i_label] = \"\".join([label_flag_last_final, '|', label_flag_current_initial])\n",
-    "        label_flag_last_final = label_flag_1\n",
-    "    \n",
-    "\n",
-    "        i_label = i_label + 1\n",
-    "        if(i_segments == N_k_band_segments - 1):\n",
-    "            label_flag[i_label] = label_flag_1\n",
-    "            i_label = i_label + 1\n",
-    "\n",
-    "    N_labels = i_label\n",
-    "    \n",
-    "    #------------Get the coordinates for the labels------------\n",
-    "    #label_coor_abs = np.zeros((N_labels)) #stores the absolute coordinates of the labels\n",
-    "    label_coor_relative = np.zeros((N_labels))\n",
-    "    for i_label in range(N_labels):\n",
-    "        #Here the evenly-distributed relative coordinates is used, because the coordinates of the labels could be too nerrow when using there absolute coordinates\n",
-    "        #x = labels_coor_0[0]\n",
-    "        #y = labels_coor_0[1]\n",
-    "        #z = labels_coor_0[2]\n",
-    "        #label_coor_abs[i_label] = np.sqrt(x*x+y*y+z*z)\n",
-    "        label_coor_relative[i_label] = step_k_point * N_k_points_per_segment * i_label / (1 + 1.0 / N_k_points_all);\n",
-    "\n",
-    "    #----Store the label-----------\n",
-    "    label_obj =[['' for i in range(2)] for j in range(N_labels)]\n",
-    "    for i_label in range(N_labels):\n",
-    "        label_obj[i_label][0] = label_coor_relative[i_label]\n",
-    "        label_obj[i_label][1] = label_flag[i_label]\n",
-    "        \n",
-    "    #print(label_obj)\n",
-    "        \n",
-    "  \n",
-    "    #Rescal the energies with respect to dos_fermi_energy\n",
-    "    for i_k_points in range(N_k_points_all):\n",
-    "        for i_bands in range(N_bands):\n",
-    "            band_energies_all[i_bands][i_k_points] =  band_energies_all[i_bands][i_k_points] - dos_fermi_energy\n",
-    "\n",
-    "    #-------Get VBM, CBM----------------\n",
-    "\n",
-    "    HOMO = -1000\n",
-    "    LUMO = 1000\n",
-    "    coor_k_point_HOMO = np.zeros((3)) #the coordinate of k point that stores HOMO\n",
-    "    coor_k_point_LUMO = np.zeros((3)) #the coordinate of k point that stores LUMO\n",
-    "    #band_gap_direct = 0.0\n",
-    "    band_gap_indirect = 0.0\n",
-    "    \n",
-    "    \n",
-    "    #band_energy_max = np.amax(band_energies[0])/ (1.60217656535* pow(10,-19))\n",
-    "    #band_energy_min = np.amin(band_energies[0])/ (1.60217656535* pow(10,-19))\n",
-    "    band_energy_max = 10\n",
-    "    band_energy_min = -10\n",
-    "    #N_band_energy_index = 10000\n",
-    "    #band_energy_step = (band_energy_max - band_energy_min) / N_band_energy_index\n",
-    "    #N_allowed_states = np.zeros(N_band_energy_index + 1)\n",
-    "    #i_index_fermi = math.floor((0 - band_energy_min) / band_energy_step) #the index that stores states at the Fermi level\n",
-    "\n",
-    "    for i_k_points_all in range(N_k_points_all):\n",
-    "        for i_bands in range(N_bands):\n",
-    "            #i_band_index = math.floor((band_energies_all[i_bands][i_k_points_all] - band_energy_min) / band_energy_step)\n",
-    "            #N_allowed_states[index_band_energy] = N_allowed_states[index_band_energy] + 1\n",
-    "            band_energy = band_energies_all[i_bands][i_k_points_all]\n",
-    "            if(band_energy > 0):\n",
-    "                if(band_energy < LUMO):\n",
-    "                    LUMO = band_energy\n",
-    "            else:\n",
-    "                if(band_energy > HOMO):\n",
-    "                    HOMO = band_energy\n",
-    "    #for i_band_index in range(i_index_fermi, N_band_energy_index): #get LUMO\n",
-    "    #    if(N_allowed_states[i_band_index] > 0):\n",
-    "    #        LUMO = band_energy_min + band_energy_step * i_band_index\n",
-    "    print('HOMO, LUMO: ',HOMO, LUMO)\n",
-    "    band_gap_indirect = abs(LUMO - HOMO)\n",
-    "    \n",
-    "    if(band_gap_indirect < 0.5): #VBM and CBM has to be found in another way for metals/charged system:\n",
-    "        HOMO = -1000\n",
-    "        LUMO = 1000\n",
-    "        band_energy_max = 10\n",
-    "        band_energy_min = 0\n",
-    "        N_band_energy_index = 10000\n",
-    "        band_energy_step = (band_energy_max - band_energy_min) / N_band_energy_index\n",
-    "        N_allowed_states = np.zeros(N_band_energy_index + 1)\n",
-    "        \n",
-    "        #get the DOS and store in N_allowed_states[]\n",
-    "        for i_k_points_all in range(N_k_points_all):\n",
-    "            for i_bands in range(N_bands):\n",
-    "                band_energy = band_energies_all[i_bands][i_k_points_all]\n",
-    "                if(band_energy_min < band_energy < band_energy_max):\n",
-    "                    i_band_index = math.floor((band_energy - band_energy_min) / band_energy_step)\n",
-    "                    N_allowed_states[i_band_index] = N_allowed_states[i_band_index] + 1\n",
-    "        if_gapped = 0\n",
-    "        for i_band_index in range(N_band_energy_index): #go through the energy levels from the bottom\n",
-    "            band_energy = band_energy_min + band_energy_step * i_band_index\n",
-    "            if(N_allowed_states[i_band_index] == 0):\n",
-    "                if_gapped = if_gapped + 1\n",
-    "            if(band_energy > band_energy_max - 0.5) and (if_gapped == 0):\n",
-    "                print(\"No gap found in this system. It seems to be a metal.\")\n",
-    "                HOMO = 1000\n",
-    "                LUMO = 1000\n",
-    "                break\n",
-    "            #print(\"At \", band_energy,\": # allowed states = \", N_allowed_states[i_band_index],\" if_gapped = \", if_gapped)\n",
-    "            \n",
-    "            if(N_allowed_states[i_band_index] > 0):\n",
-    "                if(if_gapped * band_energy_step> 0.3 ): #above VBM-CBM gap: LUMO\n",
-    "                    if(band_energy < LUMO):\n",
-    "                        #print(\"LUMO got!\")\n",
-    "                        LUMO = band_energy\n",
-    "                        break #break before touching another gap that is above the band gap\n",
-    "                if(if_gapped * band_energy_step < 0.3): #below VBM-CBM gap: HOMO\n",
-    "                    if(band_energy > HOMO):\n",
-    "                        #print(\"HOMO got!\")\n",
-    "                        HOMO = band_energy\n",
-    "                        \n",
-    "                if_gapped = 0\n",
-    "    \n",
-    "        print('HOMO, LUMO for metal/charged system: ',HOMO, LUMO)\n",
-    "    \n",
-    "    '''\n",
-    "\n",
-    "#    print('HOMO: ',tmp_HOMO_max)\n",
-    "    HOMO_global = tmp_HOMO_max\n",
-    "    LUMO_global = tmp_LUMO_min\n",
-    "    band_gap_indirect = LUMO_global - HOMO_global\n",
-    "    E_top_valence = HOMO_global\n",
-    "    if(band_gap_indirect < 0):\n",
-    "        band_gap_indirect = 0\n",
-    "\n",
-    "    #Rescal HOMO and LUMO with respect to HOMO\n",
-    "    HOMO_global = round((HOMO_global - E_top_valence), 3)\n",
-    "    LUMO_global = round((LUMO_global - E_top_valence), 3)\n",
-    "    '''\n",
-    "  \n",
-    "            \n",
-    "            \n",
-    "    #Find the position of HOMO, LUMO\n",
-    "\n",
-    "    for i_k_points in range(N_k_points_all):\n",
-    "        for i_bands in range(N_bands):\n",
-    "            if(abs(band_energies_all[i_bands][i_k_points] - HOMO) < 0.001):\n",
-    "                coor_k_point_HOMO = k_coor_1D[i_k_points]\n",
-    "            if(abs(band_energies_all[i_bands][i_k_points] - LUMO) < 0.001):\n",
-    "                coor_k_point_LUMO = k_coor_1D[i_k_points]  \n",
-    "\n",
-    "\n",
-    "               \n",
-    "                \n",
-    "    #Store the band data to band_obj\n",
-    "\n",
-    "    band_obj = {}\n",
-    "    band_obj[\"band_x_axis\"] = np.array(k_coor_1D).tolist()\n",
-    "    band_obj[\"band_y_axis\"] = np.array(band_energies_all).tolist()\n",
-    "    band_obj[\"labels\"] = np.array(label_obj).tolist()\n",
-    "    band_obj[\"HOMO_energy\"] = np.array(HOMO).tolist()\n",
-    "    band_obj[\"HOMO_coor\"] = np.array(coor_k_point_HOMO).tolist()\n",
-    "    band_obj[\"LUMO_energy\"] = np.array(LUMO).tolist()\n",
-    "    band_obj[\"LUMO_coor\"] = np.array(coor_k_point_LUMO).tolist()\n",
-    "    band_obj[\"average_N_k_points_per_inverse_distance\"] = np.array(average_N_k_points_per_inverse_distance).tolist()\n",
-    "    \n",
-    "\n",
-    "    \n",
-    "    return band_obj\n",
-    "\n",
-    "\n",
-    "#===============Get the space group information===========\n",
-    "def get_space_group(band_data):\n",
-    "    import pymatgen as mg\n",
-    "    from pymatgen.symmetry.analyzer import SpacegroupAnalyzer\n",
-    "\n",
-    "    simulation_cell = np.array(band_data[\"section_run\"][\"section_system\"][0].get('simulation_cell',\"empty\")) * 10000000000\n",
-    "    atom_positions = np.array(band_data[\"section_run\"][\"section_system\"][0].get('atom_positions',\"empty\")) * 10000000000\n",
-    "    atom_labels = np.array(band_data[\"section_run\"][\"section_system\"][0].get('atom_labels',\"empty\"))\n",
-    "    structure = mg.Structure(simulation_cell,atom_labels, atom_positions, coords_are_cartesian = True)\n",
-    "    \n",
-    "    finder = SpacegroupAnalyzer(structure, symprec=1e-3, angle_tolerance=5)\n",
-    "    space_group_symbol = finder.get_space_group_symbol()\n",
-    "    lattice_constant = []\n",
-    "    for item in structure.lattice.abc:\n",
-    "        lattice_constant.append(item)\n",
-    "    for i in range(len(lattice_constant)):\n",
-    "        item = str(round(lattice_constant[i], 3))\n",
-    "        lattice_constant[i] = item\n",
-    "    \n",
-    "    return [space_group_symbol, lattice_constant]\n",
-    "\n",
-    "#================Get the DOS data==============================\n",
-    "def get_dos_obj(dos_path):\n",
-    "    #dos_data: read from json file    \n",
-    "    #Load the data files for dos\n",
-    "    dos_data = load_jsonfile(dos_path)\n",
-    "\n",
-    "    print(dos_path)\n",
-    "    #N_dos_values = len(dos_data['sections']['section_run-0']['sections']['section_single_configuration_calculation-0']['section_dos'][0]['dos_energies'])\n",
-    "    N_dos_values = len(dos_data['section_run']['section_single_configuration_calculation']['section_dos'][0]['dos_energies'])\n",
-    "    #in new parser, it seems that the spin channel of 'dos_energies' disappears: Shape: [ number_of_dos_values ]\n",
-    "\n",
-    "    dos_energies = np.zeros((N_dos_values))\n",
-    "    dos_energies_tmp = np.zeros((N_dos_values)) #tmp array for unit convertion\n",
-    "    dos_values = np.zeros((N_dos_values))\n",
-    "\n",
-    "    dos_energies_tmp = dos_data['section_run']['section_single_configuration_calculation']['section_dos'][0]['dos_energies']\n",
-    "    dos_values =  dos_data['section_run']['section_single_configuration_calculation']['section_dos'][0]['dos_values'][0]\n",
-    "    \n",
-    "\n",
-    "    dos_fermi_energy= dos_data['section_run']['section_single_configuration_calculation']['section_dos'][0].get('dos_fermi_energy',\"empty\")\n",
-    "    if(dos_fermi_energy == \"empty\"): #dos_fermi_energy is not available in EXCITING\n",
-    "        dos_fermi_energy_exciting = dos_data['section_run']['section_single_configuration_calculation'].get('x_exciting_dos_fermi',\"empty\")\n",
-    "        if(dos_fermi_energy_exciting == \"empty\"):\n",
-    "            dos_fermi_energy = 0\n",
-    "        else:\n",
-    "            dos_fermi_energy = dos_fermi_energy_exciting  / (1.60217656535 * pow(10,-19))\n",
-    "    else:\n",
-    "        dos_fermi_energy = dos_fermi_energy  / (1.60217656535 * pow(10,-19))\n",
-    "    print(\"dos_fermi_energy:\", dos_fermi_energy)\n",
-    "        \n",
-    "    for i_dos_values in range(N_dos_values):\n",
-    "        dos_energies[i_dos_values] = 0.0\n",
-    "        dos_energies[i_dos_values] = dos_energies_tmp[i_dos_values] / (1.60217656535 * pow(10,-19))\n",
-    "        dos_energies[i_dos_values] = round((dos_energies[i_dos_values] - dos_fermi_energy), 3) #reference with the fermi level\n",
-    "\n",
-    "    dos_obj = {}\n",
-    "    dos_obj[\"dos_x_axis\"] = np.array(dos_energies).tolist()\n",
-    "    dos_obj[\"dos_y_axis\"] = np.array(dos_values).tolist()\n",
-    "    dos_obj[\"dos_fermi_energy\"] = np.array(dos_fermi_energy).tolist()\n",
-    "\n",
-    "    return dos_obj\n",
-    "\n",
-    "\n",
-    "def get_info_obj(band_path):\n",
-    "\n",
-    "    #band_data: read from json file    \n",
-    "    #Load the data files for band\n",
-    "    band_data = load_jsonfile(band_path)\n",
-    "    info_obj = {}\n",
-    "    #---------Read the information of the calculation--------\n",
-    "    info_obj[\"program_name\"] = band_data[\"section_run\"][\"program_name\"];\n",
-    "    info_obj[\"program_basis_set_type\"] = band_data[\"section_run\"][\"program_basis_set_type\"];\n",
-    "    info_obj[\"atom_labels\"] = band_data[\"section_run\"][\"section_system\"][0][\"atom_labels\"];\n",
-    "    info_obj[\"XC_functional_name\"] = band_data[\"section_run\"][\"section_method\"][\"section_XC_functionals\"][0][\"XC_functional_name\"] + \" + \"+ band_data[\"section_run\"][\"section_method\"][\"section_XC_functionals\"][1][\"XC_functional_name\"];\n",
-    "    \n",
-    "    #----------Get the space group information----------\n",
-    "    \n",
-    "    [space_group_symbol, lattice_constant] = get_space_group(band_data)\n",
-    "    info_obj[\"space_group_symbol\"] = np.array(space_group_symbol).tolist()\n",
-    "    info_obj[\"lattice_constant\"] = np.array(lattice_constant).tolist()\n",
-    "    print(\"space group:\", info_obj[\"space_group_symbol\"])\n",
-    "    print(\"lattice_constant:\", lattice_constant)\n",
-    "    \n",
-    "    return info_obj\n",
-    "\n",
-    "\n",
-    "#============main===========================================\n",
-    "\n",
-    "#import matplotlib.pyplot as plt\n",
-    "band_obj_all = []\n",
-    "dos_obj_all = []\n",
-    "info_obj_all = []\n",
-    "print(\"Number of materials: \", N_materials)\n",
-    "\n",
-    "for i in range (N_materials):\n",
-    "    print(\"Material: \", i)\n",
-    "    band_path = band_paths[i]\n",
-    "    dos_path = dos_paths[i]\n",
-    "    \n",
-    "    \n",
-    "    dos_obj = get_dos_obj(dos_path)\n",
-    "    dos_fermi_energy = dos_obj[\"dos_fermi_energy\"]\n",
-    "    band_obj = get_band_obj(band_path, dos_fermi_energy)\n",
-    "    info_obj = get_info_obj(band_path)\n",
-    "    \n",
-    "    band_obj_all.append(band_obj)\n",
-    "    dos_obj_all.append(dos_obj)\n",
-    "    info_obj_all.append(info_obj)\n",
-    "    \n",
-    "    \n",
-    "    print(\"average_N_k_points_per_inverse_distance: \", band_obj[\"average_N_k_points_per_inverse_distance\"])\n",
-    "\n",
-    "print(\"Finish processing data.\")\n",
-    "\n",
-    "#run_cell_by_tag('save_data_to_js')\n",
-    "\n",
-    "print(\"Initialization of visulization finished.\")"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 331,
-   "metadata": {
-    "tags": [
-     "js_plot"
-    ]
-   },
-   "outputs": [
-    {
-     "data": {
-      "application/javascript": [
-       "  \n",
-       "var N_max_show = 10; //Number of results to be shown by default\n",
-       "\n",
-       "\n",
-       "\n",
-       "\n"
-      ],
-      "text/plain": [
-       "<IPython.core.display.Javascript object>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "%%javascript\n",
-    "  \n",
-    "var N_max_show = 10; //Number of results to be shown by default\n",
-    "\n",
-    "\n",
-    "\n",
-    "\n"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": []
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "%%javascript\n",
-    "// BACKUP!\n",
-    "/*\n",
-    "//Main plot function for given material:\n",
-    "    function plot_band_dos_i_backup(i, lowerLim, upperLim, if_show_VBM, if_compare, i_in_compare_list)\n",
-    "    {\n",
-    "        //alert(\"plot_band_dos_i\")\n",
-    "        //i=0;\n",
-    "        lowerLim = -10\n",
-    "        upperLim = 10\n",
-    "        if_show_VBM = 0\n",
-    "        if_compare = 0\n",
-    "        i_in_compare_list = -1\n",
-    "        //i=0;\n",
-    "        var placeholder_band = \"#div_band\" + i.toString();\n",
-    "        var placeholder_dos = \"#div_dos\" + i.toString();\n",
-    "        var placeholder_tools = \"#div_tools\" + i.toString();\n",
-    "        var placeholder_overview  = \"#div_overview\" + i.toString();\n",
-    "        var placeholder_overviewlegend = \"#overviewLegend\" + i.toString();\n",
-    "        var checkbox_VBM_id = \"checkbox_VBM\" + i.toString();\n",
-    "        var img_band_id = \"img_band\" + i.toString();\n",
-    "        var img_dos_id = \"img_dos\" + i.toString();\n",
-    "        var placeholder_band_compare = \"\";\n",
-    "\n",
-    "        if(i_in_compare_list == 1)\n",
-    "        {\n",
-    "            placeholder_band_compare = \"#div_band_compare_1\";\n",
-    "        }\n",
-    "        else if(i_in_compare_list == 2)\n",
-    "        {\n",
-    "            placeholder_band_compare = \"#div_band_compare_2\";\n",
-    "        }\n",
-    "        else\n",
-    "        {\n",
-    "            placeholder_band_compare = \"#div_band_compare_1\"; // just for safe\n",
-    "        }\n",
-    "\n",
-    "        Object.size = function(obj) {\n",
-    "            var size = 0, key;\n",
-    "            for (key in obj) \n",
-    "            {\n",
-    "                if (obj.hasOwnProperty(key)) size++;\n",
-    "            }\n",
-    "            return size;\n",
-    "        };\n",
-    "\n",
-    "        //Get the number of bands\n",
-    "        //alert(\"Getting band\")\n",
-    "        //alert(band_obj_all)\n",
-    "        //alert(\"band_obj_all got!\")\n",
-    "        var N_bands = Object.size(band_obj_all[i][\"band_y_axis\"]);\n",
-    "        var N_k_coors = Object.size(band_obj_all[i][\"band_x_axis\"]);\n",
-    "        alert(band_obj_all[i][\"band_y_axis\"])\n",
-    "        band_plotdata = [];\n",
-    "\n",
-    "        for(var i_band =0; i_band < N_bands; i_band++)\n",
-    "        {\n",
-    "          var tmp_data = [];\n",
-    "          for(var j_k_coor = 0; j_k_coor < N_k_coors; j_k_coor ++)\n",
-    "          {\n",
-    "            tmp_data.push([band_obj_all[i][\"band_x_axis\"][j_k_coor],band_obj_all[i][\"band_y_axis\"][i_band][j_k_coor]]);\n",
-    "          }\n",
-    "          plotData = { shadowSize: 0 , data: tmp_data, color: 'black',  series: { lines: { show: true } , points: {show: false} } };\n",
-    "          band_plotdata.push(plotData);\n",
-    "        }\n",
-    "\n",
-    "\n",
-    "        var tmp_data0 = [[0, 0], [1, 0]];\n",
-    "        plotData0 = { shadowSize:0, color: 'black', data: tmp_data0, dashes:{ show:true, lineWidth: 1.5}};\n",
-    "        band_plotdata.push(plotData0);\n",
-    "\n",
-    "        band_plotdata_overview = band_plotdata.slice(0);\n",
-    "\n",
-    "        var HOMOdata= [[band_obj_all[i][\"HOMO_coor\"],band_obj_all[i][\"HOMO_energy\"]]];\n",
-    "        HOMOlabel = [\"VBM\"];\n",
-    "        plotHOMO={ shadowSize:0, color: 'blue', data: HOMOdata, points:{show:true, radius: 4 , fill: true, fillColor: 'blue'},lines:{show: false},  showLabels: true, labels: HOMOlabel, canvasRender: true, cColor: 'red', cFont:\"2em Arial\"};\n",
-    "\n",
-    "        var LUMOdata= [[band_obj_all[i][\"LUMO_coor\"],band_obj_all[i][\"LUMO_energy\"]]];\n",
-    "        LUMOlabel = [\"CBM\"];\n",
-    "        plotLUMO={ shadowSize:0, color: 'red', data: LUMOdata, points:{show:true, radius: 4 , fill: true, fillColor: 'red'},lines:{show: false},  showLabels: true, labels: LUMOlabel, canvasRender: true, cColor: 'red', cFont:\"2em Arial\"};\n",
-    "\n",
-    "        //if_show_VBM = check_show_VBM(checkbox_VBM_id);\n",
-    "        if (if_show_VBM == 1)\n",
-    "        {\n",
-    "          band_plotdata.push(plotHOMO);\n",
-    "          band_plotdata.push(plotLUMO);\n",
-    "        }\n",
-    "\n",
-    " \n",
-    "        alert(img_band_id + band_plotdata)\n",
-    "            \n",
-    "        //!!!FIXME: if ($(\"#showVBM:checked\").length > 0 && gap > 0.1) \n",
-    "        //plotHOMOLUMO={ shadowSize:0, color: 'red', data: d5, points:{show:true, radius: 0.8 , fill: true}, showLabels: true, labels: d5label, labelPlacement: labelPos, canvasRender: true, cColor: 'red', cFont:\"1em Arial\"  }\n",
-    "\n",
-    "        var canvas_band;\n",
-    "        var options_band = {\n",
-    "          canvas: true,\n",
-    "          //legend:{ type: \"canvas\" },\n",
-    "          series: { lines: { show: true, lineWidth: 2 }, \n",
-    "          points: { show: false } }, \n",
-    "          xaxis: { \n",
-    "            ticks: band_obj_all[i][\"labels\"], \n",
-    "            color:\"#000\", \n",
-    "            font: {size: 20}, \n",
-    "            zoomRange: false,\n",
-    "            panRange: false \n",
-    "          }, \n",
-    "          yaxis: { \n",
-    "            axisLabel: \"Energy (eV)\", \n",
-    "            axisLabelUseCanvas: true,\n",
-    "            //axisLabelUseCanvas: false,\n",
-    "            axisLabelFontSizePixels: 20,\n",
-    "            axisLabelFontFamily: 'Arial', \n",
-    "            axisLabelPadding: 10, \n",
-    "            color:\"#000\", \n",
-    "            font: {size: 20, family:\"Arial\"},\n",
-    "            tickLength:-5, \n",
-    "            min: lowerLim, \n",
-    "            max: upperLim,\n",
-    "            tickDecimals: 0, \n",
-    "            zoomRange: [0.001, 1000],\n",
-    "            panRange: [-100, 100] \n",
-    "          },\n",
-    "\n",
-    "          zoom: { \n",
-    "            interactive: true\n",
-    "          },\n",
-    "\n",
-    "          pan: {\n",
-    "            interactive: true\n",
-    "          }, \n",
-    "\n",
-    "          //selection: { mode: \"xy\", color: \"#86a6b4\" }, \n",
-    "\n",
-    "          grid: { \n",
-    "            labelMargin: 15,\n",
-    "            hoverable: true, \n",
-    "            backgroundColor: { colors: [\"#fff\", \"#fff\"] }, \n",
-    "            borderWidth: {\n",
-    "              top: 2, \n",
-    "              right: 2,\n",
-    "              bottom: 2,\n",
-    "              left: 2,\n",
-    "              color : null } \n",
-    "          }\n",
-    "        }\n",
-    "        //var plot_band = $.plot($(placeholder_band), band_plotdata, options_band);\n",
-    "        //var plot_band = $.plot(\"#div_bandx\", band_plotdata, options_band);\n",
-    "        var plot_band = $.plot($(placeholder_band), band_plotdata, options_band).getCanvas(); // save the canvas\n",
-    "        image_band = plot_band.toDataURL();\n",
-    "        image_band = image_band.replace(\"image/png\",\"image/octet-stream\");\n",
-    "        //beakerx.image_band = image_band;\n",
-    "        document.getElementById(img_band_id).href= image_band;\n",
-    "        image_band_links[i] = image_band;\n",
-    "        alert(\"band plot done.\")\n",
-    "\n",
-    "\n",
-    "        //----Plot DOS----------------------\n",
-    "        var dos_plotdata = [];\n",
-    "        alert(\"dos:\"+dos_obj_all[i])\n",
-    "        var xdos = dos_obj_all[i][\"dos_x_axis\"];\n",
-    "        var ydos = dos_obj_all[i][\"dos_y_axis\"];\n",
-    "        var dosLabelPos = Math.max.apply(Math, ydos)/2;\n",
-    "        var d2 = [];\n",
-    "        for (var ii = 0; ii < xdos.length; ii+=1) {\n",
-    "          d2.push([ydos[ii],xdos[ii]]);\n",
-    "        }\n",
-    "        var plotData2={ shadowSize: 0, color: 'black' , data: d2}\n",
-    "        dos_plotdata.push(plotData2)\n",
-    "\n",
-    "        function find_xaxis_max_min(data, lowerbound, upperbound)\n",
-    "        {\n",
-    "                //data[xaxis,y] find the max and min value of x axis\n",
-    "                //alert(\"dos[0]:\" + data[0][\"data\"]);\n",
-    "                //alert(\"Bounds: \" + lowerbound + \" ,  \" + upperbound)\n",
-    "                var n_data = data.length;\n",
-    "                //alert(\"N dos: \" + n_data);\n",
-    "                var data_min = 1000000;\n",
-    "                var data_max = -1000000;\n",
-    "                var data_current = 0;\n",
-    "                for (var i = 0; i < n_data; i++)\n",
-    "                {\n",
-    "                    if((data[i][1] >= lowerbound) && (data[i][1] <= upperbound))\n",
-    "                    {\n",
-    "                        data_current = data[i][0];\n",
-    "                        //alert(\"data[i]: \" + data[i] + \"data[i][0]: \" + data_current);\n",
-    "                        if(data_current >= data_max)\n",
-    "                        {\n",
-    "                            data_max = data_current;\n",
-    "                        }\n",
-    "                        if(data_current <= data_min)\n",
-    "                        {\n",
-    "                            data_min = data_current;\n",
-    "                        }\n",
-    "                    }\n",
-    "                }\n",
-    "                var data_max_min = [data_max, data_min];\n",
-    "                //alert(\"data_max_min: \" + data_max_min);\n",
-    "                return data_max_min;\n",
-    "        }\n",
-    "        var dos_x_max_min = find_xaxis_max_min(dos_plotdata[0][\"data\"], lowerLim, upperLim);\n",
-    "        var dosLabelPos = (dos_x_max_min[0] + dos_x_max_min[1])/2;\n",
-    "\n",
-    "        var options_dos ={\n",
-    "          canvas: true,\n",
-    "          series: {\n",
-    "            lines: { show: true, lineWidth:2 },\n",
-    "            points: { show: false }\n",
-    "          },\n",
-    "\n",
-    "          yaxis: { \n",
-    "            axisLabel: \"\", \n",
-    "            axisLabelUseCanvas: true,\n",
-    "            axisLabelFontSizePixels: 20,\n",
-    "            axisLabelFontFamily: 'Arial', \n",
-    "            axisLabelPadding: 10, \n",
-    "            color:\"#000\", \n",
-    "            font: {size: 20},\n",
-    "            tickLength:-5, \n",
-    "            min: lowerLim, \n",
-    "            max: upperLim,\n",
-    "            tickDecimals: 0, \n",
-    "            zoomRange: [0.001, 1000],\n",
-    "            panRange: [-100, 100] \n",
-    "          },\n",
-    "\n",
-    "          xaxis: {\n",
-    "            axisLabel: \" \",\n",
-    "            axisLabelUseCanvas: false,\n",
-    "            axisLabelFontSizePixels: 20,\n",
-    "            axisLabelFontFamily: 'Arial',\n",
-    "            axisLabelPadding: 3,\n",
-    "            color:\"rgb(0, 0, 0)\",\n",
-    "            font: {size: 20, family:\"Arial\"},\n",
-    "            //ticks: 10,\n",
-    "            tickLength:0,\n",
-    "            min: dos_x_max_min[1],//0,\n",
-    "            max: dos_x_max_min[0],//1,\n",
-    "            tickDecimals: 0,\n",
-    "            ticks: [[ dosLabelPos ,'DOS']],\n",
-    "            //tickFormatter: MyFormatter\n",
-    "            panRange: false\n",
-    "          },\n",
-    "          pan: {\n",
-    "            interactive: true\n",
-    "          }, \n",
-    "\n",
-    "          grid: {\n",
-    "            labelMargin: 15,\n",
-    "            hoverable: true,\n",
-    "            //borderWidth : 1000,\n",
-    "            //show : false,\n",
-    "            //  //backgroundColor: { colors: [ \"#fff\", \"#eee\" ] },\n",
-    "            backgroundColor: { colors: [\"#fff\", \"#fff\"] },\n",
-    "            borderWidth: {\n",
-    "              top: 2,\n",
-    "              right: 2,\n",
-    "              bottom: 2,\n",
-    "              left: 2,\n",
-    "              color : null\n",
-    "            }\n",
-    "          }\n",
-    "        }\n",
-    "        var plot_dos = $.plot(placeholder_dos, dos_plotdata, options_dos).getCanvas();\n",
-    "        var image_dos = plot_dos.toDataURL();\n",
-    "        image_dos = image_dos.replace(\"image/png\",\"image/octet-stream\");\n",
-    "        image_dos = image_dos;\n",
-    "        document.getElementById(img_dos_id).href= image_dos;\n",
-    "        \n",
-    "    }\n",
-    "*/"
-   ]
-  }
- ],
- "metadata": {
-  "celltoolbar": "Tags",
-  "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"
-  },
-  "toc": {
-   "base_numbering": 1,
-   "nav_menu": {},
-   "number_sections": false,
-   "sideBar": false,
-   "skip_h1_title": false,
-   "title_cell": "Table of Contents",
-   "title_sidebar": "Contents",
-   "toc_cell": false,
-   "toc_position": {},
-   "toc_section_display": false,
-   "toc_window_display": false
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 2
-}
diff --git a/band_structure_visualization.ipynb b/band_structure_visualization.ipynb
index ae802f47de3dca31c7508a4235089d6b4bb680f0..c78ff91f874a77ef49c5feed6f698083e86cfc78 100644
--- a/band_structure_visualization.ipynb
+++ b/band_structure_visualization.ipynb
@@ -4947,7 +4947,7 @@
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython3",
-   "version": "3.6.7"
+   "version": "3.7.3"
   },
   "toc": {
    "base_numbering": 1,