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>  #\" + (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\"] + ';   ';\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\"] + ';   ';\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\"] + ';   ';\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() + ';   ';\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\"] + ';   ';\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\"] + ';   ';\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 >   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:   ' + band_paths[i] + ',    DOS:   ' + 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:    </font><textarea id=\\\"lowerlimit' + i.toString() + '\\\" rows=\\\"1\\\" style = \\\"width: 70px;\\\">-10</textarea> <font color=\\\"black\\\" size = 3px>   eV</font>    <font color=\\\"black\\\" size = 3px> Upper limit:    </font><textarea id=\\\"upperlimit' + i.toString() + '\\\" rows=\\\"1\\\" style = \\\"width: 70px;\\\">10</textarea> <font color=\\\"black\\\" size = 3px>   eV   </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>     \" + info_obj_all[i][\"atom_labels\"] + '</font></p>';\n", - " //str += \"<font size = 3pt><b>Space group:</b>     \" + info_obj_all[i][\"space_group_symbol\"] + '</font>';\n", - " //str += \"<font size = 3pt><b>Lattice constants (in Ang):</b>     \" + info_obj_all[i][\"lattice_constant\"] + '</font>';\n", - " str += \"<p style=\\\"text-align:left\\\"><font size = 3pt><b>Program name:</b>    \" + info_obj_all[i][\"program_name\"].toUpperCase() + '</font></p>';\n", - " str += \"<p style=\\\"text-align:left\\\"><font size = 3pt><b>Basis set type:</b>    \" + info_obj_all[i][\"program_basis_set_type\"] + '</font></p>';\n", - " str += \"<p style=\\\"text-align:left\\\"><font size = 3pt><b>Functional:</b>    \" + 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>    \" + 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>    \" + origData[\"program_name\"];\n", - " //document.getElementById('program_basis_set_type_1').innerHTML = \"<b>Basis set type:</b>    \" + origData[\"program_basis_set_type\"];\n", - " //document.getElementById('XC_functional_name_1').innerHTML = \"<b>Functional:</b>    \" + 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>     \" + info_obj_all[i][\"atom_labels\"];\n", - " //str += \"<br> <b>Space group:</b>     \" + info_obj_all[i][\"space_group_symbol\"];\n", - " //str += \"<br> <b>Lattice constants (in Ang):</b>     \" + info_obj_all[i][\"lattice_constant\"];\n", - " str += \"<br> <b>Program name:</b>    \" + info_obj_all[i][\"program_name\"].toUpperCase();\n", - " str += \"<br> <b>Basis set type:</b>    \" + info_obj_all[i][\"program_basis_set_type\"];\n", - " str += \"<br> <b>Functional:</b>    \" + info_obj_all[i][\"XC_functional_name\"];\n", - " str += \"<br> <b>Number of <i>k</i> points per inverse distance:</b>    \" + 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>     \" + info_obj_all[j][\"atom_labels\"];\n", - " //str += \"<br> <b>Space group:</b>     \" + info_obj_all[j][\"space_group_symbol\"];\n", - " //str += \"<br> <b>Lattice constants (in Ang):</b>     \" + info_obj_all[j][\"lattice_constant\"];\n", - " str += \"<br> <b>Program name:</b>    \" + info_obj_all[j][\"program_name\"].toUpperCase();\n", - " str += \"<br> <b>Basis set type:</b>    \" + info_obj_all[j][\"program_basis_set_type\"]; \n", - " str += \"<br> <b>Functional:</b>    \" + info_obj_all[j][\"XC_functional_name\"];\n", - " str += \"<br> <b>Number of <i>k</i> points per inverse distance:</b>    \" + 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>  #\" + (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\"] + ';   ';\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\"] + ';   ';\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\"] + ';   ';\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() + ';   ';\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\"] + ';   ';\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\"] + ';   ';\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 >   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:   ' + band_paths[i] + ',    DOS:   ' + 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:    </font><textarea id=\\\"lowerlimit' + i.toString() + '\\\" rows=\\\"1\\\" style = \\\"width: 70px;\\\">-10</textarea> <font color=\\\"black\\\" size = 3px>   eV</font>    <font color=\\\"black\\\" size = 3px> Upper limit:    </font><textarea id=\\\"upperlimit' + i.toString() + '\\\" rows=\\\"1\\\" style = \\\"width: 70px;\\\">10</textarea> <font color=\\\"black\\\" size = 3px>   eV   </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>     \" + info_obj_all[i][\"atom_labels\"] + '</font></p>';\n", - " //str += \"<font size = 3pt><b>Space group:</b>     \" + info_obj_all[i][\"space_group_symbol\"] + '</font>';\n", - " //str += \"<font size = 3pt><b>Lattice constants (in Ang):</b>     \" + info_obj_all[i][\"lattice_constant\"] + '</font>';\n", - " str += \"<p style=\\\"text-align:left\\\"><font size = 3pt><b>Program name:</b>    \" + info_obj_all[i][\"program_name\"].toUpperCase() + '</font></p>';\n", - " str += \"<p style=\\\"text-align:left\\\"><font size = 3pt><b>Basis set type:</b>    \" + info_obj_all[i][\"program_basis_set_type\"] + '</font></p>';\n", - " str += \"<p style=\\\"text-align:left\\\"><font size = 3pt><b>Functional:</b>    \" + 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>    \" + 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>    \" + origData[\"program_name\"];\n", - " //document.getElementById('program_basis_set_type_1').innerHTML = \"<b>Basis set type:</b>    \" + origData[\"program_basis_set_type\"];\n", - " //document.getElementById('XC_functional_name_1').innerHTML = \"<b>Functional:</b>    \" + 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>     \" + info_obj_all[i][\"atom_labels\"];\n", - " //str += \"<br> <b>Space group:</b>     \" + info_obj_all[i][\"space_group_symbol\"];\n", - " //str += \"<br> <b>Lattice constants (in Ang):</b>     \" + info_obj_all[i][\"lattice_constant\"];\n", - " str += \"<br> <b>Program name:</b>    \" + info_obj_all[i][\"program_name\"].toUpperCase();\n", - " str += \"<br> <b>Basis set type:</b>    \" + info_obj_all[i][\"program_basis_set_type\"];\n", - " str += \"<br> <b>Functional:</b>    \" + info_obj_all[i][\"XC_functional_name\"];\n", - " str += \"<br> <b>Number of <i>k</i> points per inverse distance:</b>    \" + 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>     \" + info_obj_all[j][\"atom_labels\"];\n", - " //str += \"<br> <b>Space group:</b>     \" + info_obj_all[j][\"space_group_symbol\"];\n", - " //str += \"<br> <b>Lattice constants (in Ang):</b>     \" + info_obj_all[j][\"lattice_constant\"];\n", - " str += \"<br> <b>Program name:</b>    \" + info_obj_all[j][\"program_name\"].toUpperCase();\n", - " str += \"<br> <b>Basis set type:</b>    \" + info_obj_all[j][\"program_basis_set_type\"]; \n", - " str += \"<br> <b>Functional:</b>    \" + info_obj_all[j][\"XC_functional_name\"];\n", - " str += \"<br> <b>Number of <i>k</i> points per inverse distance:</b>    \" + 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,