{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# DFT + GWBSE Energy Calculation Using CH4" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Introduction" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This tutorial explains how to perform calculation to predict electronic excitation using the **GWBSE** method. See [the GW Compendium: A Practical Guide to Theoretical Photoemission Spectroscopy](https://doi.org/10.3389/fchem.2019.00377), for an excellent introduction to the method." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Requirements\n", "* You will need to install **VOTCA** using the instructions described [here](https://github.com/votca/votca/blob/master/share/sphinx/INSTALL.rst)\n", "* Once the installation is completed you need to activate the VOTCA enviroment by running the `VOTCARC.bash` script that has been installed at the bin subfolder for the path that you have provided for the installation step above" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Interacting with the XTP command line interface\n", "To run a DFT-GWBSE calculation we will use the [xtp_tools](https://www.votca.org/xtp/xtp_tools_overview.html) calculator. Run the following command to view the help message of `xtp_tools`:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "execution": { "iopub.execute_input": "2025-12-12T05:32:02.654971Z", "iopub.status.busy": "2025-12-12T05:32:02.654795Z", "iopub.status.idle": "2025-12-12T05:32:02.803697Z", "shell.execute_reply": "2025-12-12T05:32:02.803145Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "==================================================\r\n", "======== VOTCA (http://www.votca.org) ========\r\n", "==================================================\r\n", "\r\n", "please read and cite: https://doi.org/10.21105/joss.06864\r\n", "and submit bugs to https://github.com/votca/votca/issues\r\n", "\r\n", "xtp_tools, version 2025.1-dev gitid: ae99527 (compiled Dec 12 2025, 05:30:20)\r\n", "\r\n", "Runs excitation/charge transport tools\r\n", "\r\n", "\r\n", "\r\n", "Allowed options:\r\n", " -h [ --help ] display this help and exit\r\n", " --verbose be loud and noisy\r\n", " --verbose1 be very loud and noisy\r\n", " -v [ --verbose2 ] be extremly loud and noisy\r\n", " -o [ --options ] arg Tool user options.\r\n", " -t [ --nthreads ] arg (=1) number of threads to create\r\n", " -e [ --execute ] arg Name of Tool to run\r\n", " -l [ --list ] Lists all available Tools\r\n", " -d [ --description ] arg Short description of a Tools\r\n", " -c [ --cmdoptions ] arg Modify options via command line by e.g. '-c \r\n", " xmltag.subtag=value'. Use whitespace to separate \r\n", " multiple options\r\n", " -p [ --printoptions ] arg Prints xml options of a Tool\r\n", "\r\n" ] } ], "source": [ "!xtp_tools --help" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Note\n", "> * In Jupyter the `!` symbol means: *run the following command as a standard unix command*\n", "> * In Jupyter the command `%env` set an environmental variable" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Running a calculation with the default options\n", "To run a DFT-GWBSE calculation we just need to provide the path to the file in XYZ with the molecular coordinates. Check the [dftgwbse defaults](https://www.votca.org/xtp/dftgwbse.html) for further information." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "execution": { "iopub.execute_input": "2025-12-12T05:32:02.806424Z", "iopub.status.busy": "2025-12-12T05:32:02.806240Z", "iopub.status.idle": "2025-12-12T05:32:07.594001Z", "shell.execute_reply": "2025-12-12T05:32:07.593269Z" } }, "outputs": [], "source": [ "!xtp_tools -c job_name=methane -t 2 -e dftgwbse > dftgwbse.log" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The previous command will run the DFT-GWBSE calculation using the aforementioned defaults and the results are store in the *Current Work Directory* in a file named `methane_summary.xml`. The `-c` option is important and we will come back to it later. It allows changing options form the command line." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Running a calculation using your own input file\n", "Let create a folder to store the input `options` for XTP and use the `-p` option to print an option file, specified by `-o`, with all the options so we can modify it afterwards" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "execution": { "iopub.execute_input": "2025-12-12T05:32:07.597481Z", "iopub.status.busy": "2025-12-12T05:32:07.597106Z", "iopub.status.idle": "2025-12-12T05:32:07.851036Z", "shell.execute_reply": "2025-12-12T05:32:07.850359Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Writing options for calculator dftgwbse to OPTIONFILES/dftgwbse.xml\r\n", "Done - stopping here\r\n" ] } ], "source": [ "!mkdir -p OPTIONFILES\n", "!xtp_tools -p dftgwbse -o OPTIONFILES/dftgwbse.xml" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You should have a *XML* file with the DFTWGSE options that looks like" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "execution": { "iopub.execute_input": "2025-12-12T05:32:07.853775Z", "iopub.status.busy": "2025-12-12T05:32:07.853415Z", "iopub.status.idle": "2025-12-12T05:32:07.963453Z", "shell.execute_reply": "2025-12-12T05:32:07.962903Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\r\n", "\r\n", "\tsystem\r\n", "\t\r\n", "\t\txtp\r\n", "\t\t0\r\n", "\t\t1\r\n", "\t\tdef2-tzvp\r\n", "\t\t\r\n", "\t\t\r\n" ] } ], "source": [ "!head -n 10 OPTIONFILES/dftgwbse.xml" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Some options are labelled as `OPTIONAL`, either fill them in or delete them if you do not want that functionality" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We created a small options file" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "execution": { "iopub.execute_input": "2025-12-12T05:32:07.966068Z", "iopub.status.busy": "2025-12-12T05:32:07.965884Z", "iopub.status.idle": "2025-12-12T05:32:08.075262Z", "shell.execute_reply": "2025-12-12T05:32:08.074659Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\r\n", " \r\n", " methane\r\n", " \r\n", " ubecppol\r\n", " aux-ubecppol\r\n", " \r\n", " \r\n", "\r\n" ] } ], "source": [ "!cat dftgwbse2.xml" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "execution": { "iopub.execute_input": "2025-12-12T05:32:08.077638Z", "iopub.status.busy": "2025-12-12T05:32:08.077264Z", "iopub.status.idle": "2025-12-12T05:32:11.885608Z", "shell.execute_reply": "2025-12-12T05:32:11.885015Z" } }, "outputs": [], "source": [ "!xtp_tools -o dftgwbse2.xml -t 2 -e dftgwbse > dftgwbse2.log" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "XTP will automatically compare the default values with the user-provided and overwrites the defaults with the user input. Also, If I given property does not have a default value you can provide one using the XML file described above." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Partial Charges\n", "We can compute now the partial charges using the `CHELPG` method by default. For more information see the [partialcharges documentation](https://www.votca.org/xtp/partialcharges.html). Once again, we only need to provide the name of the system to compute, which in our case is `methane`." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "execution": { "iopub.execute_input": "2025-12-12T05:32:11.888383Z", "iopub.status.busy": "2025-12-12T05:32:11.888201Z", "iopub.status.idle": "2025-12-12T05:32:14.564019Z", "shell.execute_reply": "2025-12-12T05:32:14.563296Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "==================================================\r\n", "======== VOTCA (http://www.votca.org) ========\r\n", "==================================================\r\n", "\r\n", "please read and cite: https://doi.org/10.21105/joss.06864\r\n", "and submit bugs to https://github.com/votca/votca/issues\r\n", "\r\n", "xtp_tools, version 2025.1-dev gitid: ae99527 (compiled Dec 12 2025, 05:30:20)\r\n", "\r\n", "Initializing tool\r\n", "... partialcharges Evaluating tool\r\n", "... partialcharges Using 1 threads\r\n", "... ... Loading QM data from methane.orb\r\n", "... ... ===== Running on 1 threads ===== " ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r\n", "... ... 2025-12-12 5:32:12 Calculated Densities at Numerical Grid, Number of electrons is -2.37461e-08\r\n", "... ... 2025-12-12 5:32:12 Calculating ESP at CHELPG grid points" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r\n", "... ... 2025-12-12 5:32:14 Netcharge constrained to 0\r\n", "... ... Sum of fitted charges: 2.42376e-14\r\n", "... ... RMSE of fit: 0.00221585\r\n", "... ... RRMSE of fit: 0.107179\r\n", "... ... El Dipole from fitted charges [e*bohr]:\r\n", "\t\t dx = +0.7278 dy = -0.4713 dz = +0.4706 |d|^2 = +0.9733\r\n", "... ... El Dipole from exact qm density [e*bohr]:\r\n", "\t\t dx = +0.7620 dy = -0.4941 dz = +0.4932 |d|^2 = +1.0681\r\n", "... ... Written charges to methane.mps" ] } ], "source": [ "!xtp_tools -c job_name=methane -e partialcharges" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Spectrum Calculation\n", "Finally, lets compute a convolution of the singlet spectrum using a gaussian function. For doing so, we will modify the default values for the [spectrum calculator](https://www.votca.org/xtp/spectrum.html) to compute the spectrum between 9 and 25 eV, using 1000 points in that energy range. We will use the `-c` option to modify the options accordingly. Instead we could have printed out an options file using the `xtp_tools -p spectrum` command and then modify the entries accordingly and then read them in using the `-o` option." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "execution": { "iopub.execute_input": "2025-12-12T05:32:14.566701Z", "iopub.status.busy": "2025-12-12T05:32:14.566492Z", "iopub.status.idle": "2025-12-12T05:32:14.717977Z", "shell.execute_reply": "2025-12-12T05:32:14.717462Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "==================================================\r\n", "======== VOTCA (http://www.votca.org) ========\r\n", "==================================================\r\n", "\r\n", "please read and cite: https://doi.org/10.21105/joss.06864\r\n", "and submit bugs to https://github.com/votca/votca/issues\r\n", "\r\n", "xtp_tools, version 2025.1-dev gitid: ae99527 (compiled Dec 12 2025, 05:30:20)\r\n", "\r\n", "Initializing tool\r\n", "... spectrum Evaluating tool\r\n", "... spectrum Using 1 threads\r\n", "... ... Calculating absorption spectrum plot methane.orb\r\n", "... ... Loading QM data from methane.orb\r\n", "... ... Considering 10 excitation with max energy 14.6581 eV / min wave length 84.7405 nm\r\n", "... ... Spectrum in energy range from 9 to 25 eV and with broadening of FWHM 0.2 eV written to file methane_spectrum.dat" ] } ], "source": [ "!xtp_tools -c job_name=methane lower=9 upper=25 points=1000 -e spectrum" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The results are stored in the `methane_spectrum.dat` file." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## (Optional) Plot the spectrum" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We will use [matplotlib](https://matplotlib.org/), [seaborn](https://seaborn.pydata.org/) and [pandas](https://pandas.pydata.org/) libraries to plot the spectrum. You can install it using [pip](https://pip.pypa.io/en/stable/) like" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "execution": { "iopub.execute_input": "2025-12-12T05:32:14.720675Z", "iopub.status.busy": "2025-12-12T05:32:14.720468Z", "iopub.status.idle": "2025-12-12T05:32:15.408246Z", "shell.execute_reply": "2025-12-12T05:32:15.407620Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: seaborn in /usr/lib/python3.14/site-packages (0.13.2)\r\n", "Requirement already satisfied: numpy!=1.24.0,>=1.20 in /usr/lib64/python3.14/site-packages (from seaborn) (2.3.5)\r\n", "Requirement already satisfied: pandas>=1.2 in /usr/lib64/python3.14/site-packages (from seaborn) (2.3.3)\r\n", "Requirement already satisfied: matplotlib!=3.6.1,>=3.4 in /usr/lib64/python3.14/site-packages (from seaborn) (3.10.6)\r\n", "Requirement already satisfied: contourpy>=1.0.1 in /usr/lib64/python3.14/site-packages (from matplotlib!=3.6.1,>=3.4->seaborn) (1.3.3)\r\n", "Requirement already satisfied: cycler>=0.10 in /usr/lib/python3.14/site-packages (from matplotlib!=3.6.1,>=3.4->seaborn) (0.11.0)\r\n", "Requirement already satisfied: fonttools>=4.22.0 in /usr/lib64/python3.14/site-packages (from matplotlib!=3.6.1,>=3.4->seaborn) (4.60.1)\r\n", "Requirement already satisfied: kiwisolver>=1.3.1 in /usr/lib64/python3.14/site-packages (from matplotlib!=3.6.1,>=3.4->seaborn) (1.4.9)\r\n", "Requirement already satisfied: packaging>=20.0 in /usr/lib/python3.14/site-packages (from matplotlib!=3.6.1,>=3.4->seaborn) (25.0)\r\n", "Requirement already satisfied: pillow>=8 in /usr/lib64/python3.14/site-packages (from matplotlib!=3.6.1,>=3.4->seaborn) (11.3.0)\r\n", "Requirement already satisfied: pyparsing>=2.3.1 in /usr/lib/python3.14/site-packages (from matplotlib!=3.6.1,>=3.4->seaborn) (3.1.2)\r\n", "Requirement already satisfied: python-dateutil>=2.7 in /usr/lib/python3.14/site-packages (from matplotlib!=3.6.1,>=3.4->seaborn) (2.9.0.post0)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: pytz>=2020.1 in /usr/lib/python3.14/site-packages (from pandas>=1.2->seaborn) (2025.2)\r\n", "Requirement already satisfied: six>=1.5 in /usr/lib/python3.14/site-packages (from python-dateutil>=2.7->matplotlib!=3.6.1,>=3.4->seaborn) (1.17.0)\r\n" ] } ], "source": [ "!pip install seaborn --user" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "execution": { "iopub.execute_input": "2025-12-12T05:32:15.411129Z", "iopub.status.busy": "2025-12-12T05:32:15.410832Z", "iopub.status.idle": "2025-12-12T05:32:16.463238Z", "shell.execute_reply": "2025-12-12T05:32:16.462637Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "<>:5: SyntaxWarning: \"\\s\" is an invalid escape sequence. Such sequences will not work in the future. Did you mean \"\\\\s\"? A raw string is also an option.\n", "<>:5: SyntaxWarning: \"\\s\" is an invalid escape sequence. Such sequences will not work in the future. Did you mean \"\\\\s\"? A raw string is also an option.\n", "/tmp/ipykernel_7877/3151737206.py:5: SyntaxWarning: \"\\s\" is an invalid escape sequence. Such sequences will not work in the future. Did you mean \"\\\\s\"? A raw string is also an option.\n", " df = pd.read_table(\"methane_spectrum.dat\", comment=\"#\", sep='\\s+',names=columns)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/usr/lib/python3.14/site-packages/seaborn/axisgrid.py:854: FutureWarning: \n", "\n", "The `ci` parameter is deprecated. Use `errorbar=None` for the same effect.\n", "\n", " func(*plot_args, **plot_kwargs)\n" ] }, { "data": { "text/plain": [ "[]" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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bdumefPmadKkSXrsscdUXl4eegBHktPorO+6P+n6BmCapLq+f/CDH0iSxo4dG+pSdH9Bjho1KnTs8Xjk9/tT11qgGW7FHNXzHdb1TVADMEtSQf3OO++kviVACrhj1A2WEA1typGWZgFA0pIK6mHDhmn58uV65plntGnTJs2bN0/HHXecnn/+efXq1UtDhgxJfUuBOLizvhtsc+lhm0sAZkpqjPrll1/WpZdeqtatW+sf//iHqqqqJEn79+/X1KlTU91GIG6NrvUd/ElnMhkA0yQV1L/85S/19NNP69lnn1WrVq1C58877zytXr06le0DEtLoEqJsygHAUEkF9fr16zV06NAG5/Py8vTtt9+mol1AUgKhJUQjz7tLiJLTAEyTVFB3795dn3/+eYPz7777rnr37p2KdgFJaW73LLq+AZgmqaD+2c9+pttvv10ffPCBPB6Ptm/frj//+c+66667dPPNN6e+lUCcAo3N+vZyexYAMyU16/uee+5RWVmZLrzwQh06dEhDhw6Vz+fTXXfdpYkTJ6a+lUCc3NuvGlbUdX+yzSUA0yRVUUvSI488oj179ujDDz/UihUr9PXXX+vhhx9O6D1KSko0aNAgtW/fXl27dtXll1+u9evXJ9skIFQxNxijZjIZAEMlHdSS1KZNGw0cOFDf+c531K5du4S/funSpbrlllu0YsUKLV68WLW1tRo+fLgOHDhwOM3CUayxWd9eNuUAYKikur5TZdGiRRHHs2fPVteuXfXRRx/FnFVeVVUVumdbEmuJo4HQZLLGxqhJagCGOayKOtXKysokSZ06dYr5fElJifLz80OPwsLCI9xCZLrGd88KPk/XNwDDZExQO46j4uJiDRkyRP3794/5msmTJ6usrCz0KC0tPeLtRGZzczh61ndoUw4qagCGSWvXd7iJEyfqk08+0bvvvtvoa3w+n3w+3xFtF8ziVsyeRjblIKcBmCYjgvrWW2/VggULtGzZMvXo0SPdzYHB6ru+I8972eYSgKHSGtSO4+jWW2/Vq6++qiVLlqhXr17pbA4s0OisbzblAGCotAb1LbfcohdeeEGvvfaa2rdvr507d0qS8vPz1bp163Q2DYZqdtY3FTUAw6R1MtmsWbNUVlamCy64QN27dw895s6dm85mwWBuwcx91ABskfaubyCVAo1U1GzKAcBUGXN7FpAKfqfprm/x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h2699Va99tprR7ytjVm6dKluueUWrVixQosXL1Ztba2GDx+uAwcOhF6T6Z/r5q7BhM91PH8Prkz+XCfMQYuS5Lz66quh40Ag4HTr1s159NFHQ+cOHTrk5OfnO08//XSaWtm06GuI5cMPP3QkOV9++eURa1ciGruGbdu2Occdd5zz6aefOkVFRc706dPT0r54xLqGq666yrn++uvT1qZExbqGU0891XnooYcizg0YMMD5r//6ryPcuvjt3r3bkeQsXbrUcQz9XEdfQyyZ/rlu7BpM+lzHg4r6CNu8ebN27typ4cOHh875fD4NGzZM77//flrbdjjKysrk8XjUoUOHdDclboFAQOPGjdPdd9+tU089Nd3NSVggEND//u//6qSTTtKll16qrl276pxzzmmyiz8TDRkyRAsWLNBXX30lx3H0zjvvaMOGDbr00kvT3bRGlZWVSZI6deokGfq5jr6Gxl6TyZ/rWNdg+uc6FoL6CNu5c6ck6dhjj404f+yxx4aeM82hQ4d077336tprrzVqMfzHHntM2dnZuu2229LdlKTs3r1bFRUVevTRRzVixAj93//9n370ox/piiuu0NKlS9PdvLg9+eST6tevn3r06KGcnByNGDFCM2fO1JAhQ9LdtJgcx1FxcbGGDBmi/v37SwZ+rmNdQ7RM/1w3dg2mf65jMXr3LJNFb2vmOI4RW3VGq6mp0dVXX61AIKCZM2emuzlx++ijj/TEE09o9erVRv5/V7BykKQf/vCHuuOOOyRJZ555pt5//309/fTTGjZsWJpbGJ8nn3xSK1as0IIFC1RUVKRly5bp5ptvVvfu3XXxxRenu3kNTJw4UZ988onefffdBs+Z8rlu6hpkyOc61jXY8LmOhYr6COvWrZsU9i9w1+7duxv8azzT1dTUaOzYsdq8ebMWL16ckf/qbszy5cu1e/du9ezZU9nZ2crOztaXX36pO++8U8cff3y6mxeXLl26KDs7W/369Ys4f8opp2TUrO+mHDx4UPfdd5+mTZumUaNG6fTTT9fEiRN11VVX6de//nW6m9fArbfeqgULFuidd96J2GLXpM91Y9fgMuFz3dg12PC5joWgPsJ69eqlbt26afHixaFz1dXVWrp0qc4777y0ti0R7od548aNeuutt9S5c+d0Nykh48aN0yeffKI1a9aEHgUFBbr77rv15ptvprt5ccnJydGgQYMa3J6yYcMGFRUVpa1diaipqVFNTY283shfRVlZWaEeg0zgOI4mTpyoV155RW+//bZ69eoV8bwJn+vmrkEGfK6buwYbPtex0PXdAioqKvT555+Hjjdv3qw1a9aoU6dO6tmzpyZNmqSpU6fqxBNP1IknnqipU6eqTZs2uvbaa9Pa7nBNXUNBQYHGjBmj1atXa+HChfL7/aFKolOnTsrJyUljy+s19/cQ/UuoVatW6tatm/r27ZuG1sbW3DXcfffduuqqqzR06FBdeOGFWrRokV5//XUtWbIkre0O19w1DBs2THfffbdat26toqIiLV26VHPmzNG0adPS2u5wt9xyi1544QW99tprat++fejnPT8/X61bt5bH48n4z3Vz11BbW5vxn+vmrqFz585GfK4Tlu5p5zZ65513HEkNHuPHj3ec4K0cv/jFL5xu3bo5Pp/PGTp0qLN27dp0NztCU9ewefPmmM9Jct555510Nz2kub+HaJl4G0c81/D73//e6dOnj5Obm+ucccYZzvz589Pa5mjNXcOOHTucG2+80SkoKHByc3Odvn37Or/5zW+cQCCQ7qaHNPbzPnv27NBrMv1z3dw1mPC5jufvIVomfq4TxTaXAABkMMaoAQDIYAQ1AAAZjKAGACCDEdQAAGQwghoAgAxGUAMAkMEIagAAMhhBDQBABiOogaPY22+/rZNPPjnl62rPmDFDo0ePTul7Akcrghqw1I033iiPx9PgMWLEiNBr7rnnHt1///0NNsWIpbq6Wl26dNEvf/nLmM+XlJSoS5cuqq6u1k9+8hOtXLmy0W0UAcSPoAYsNmLECO3YsSPi8eKLL0qS3n//fW3cuFFXXnllXO+Vk5Oj66+/Xs8995xirTw8e/ZsjRs3Tjk5OfL5fLr22mv11FNPpfyagKMNQQ1YzOfzqVu3bhGPjh07SpJeeuklDR8+XLm5uRFf8/rrr+vss89Wbm6uevfurSlTpqi2tlaSNGHCBG3atEnLli2L+Jrly5dr48aNmjBhQujc6NGjNX/+fB08ePCIXCtgK4IaOEotW7ZMAwcOjDj35ptv6vrrr9dtt92mzz77TM8884yee+45PfLII5Kk0047TYMGDdLs2bMjvu4Pf/iDvvOd76h///6hcwMHDlRNTY0+/PDDI3RFgJ0IasBiCxcuVLt27SIeDz/8sCRpy5YtKigoiHj9I488onvvvVfjx49X7969dckll+jhhx/WM888E3rNTTfdpHnz5qmiokIK7jf917/+NaKalqS2bduqQ4cO2rJlyxG5VsBW2eluAICWc+GFF2rWrFkR5zp16iRJOnjwYINu748++kgrV64MVdCS5Pf7dejQIVVWVqpNmza65pprVFxcrLlz52rChAmaO3euHMfR1Vdf3eD7t27dWpWVlS12fcDRgKAGLNa2bVv16dMn5nNdunTRvn37Is4FAgFNmTJFV1xxRYPXu6Gen5+vMWPGaPbs2ZowYYJmz56tMWPGKC8vr8HXfPPNNzrmmGNSdj3A0YigBo5SZ511lj777LOIcwMGDND69esbDXfXhAkTdMEFF2jhwoV67733NHXq1Aav2bRpkw4dOqSzzjor5W0HjiYENWCxqqoq7dy5M+Jcdna2unTpoksvvVR//OMfI5777//+b/3gBz9QYWGhrrzySnm9Xn3yySdau3ZtxP3Tw4YNU58+fXTDDTeoT58+Gjp0aIPvvXz5cvXu3VsnnHBCC14hYD8mkwEWW7Rokbp37x7xGDJkiCTp+uuv12effab169eHXn/ppZdq4cKFWrx4sQYNGqTBgwdr2rRpKioqavDeN910k/bt26ebbrop5vd+8cUX9ZOf/KQFrw44OnicWCsXADgq3HPPPSorK4uY1Z0Kn376qS666CJt2LBB+fn5KX1v4GhDRQ0cxe6//34VFRXJ7/en9H23b9+uOXPmENJAClBRAwCQwaioAQDIYAQ1AAAZjKAGACCDEdQAAGQwghoAgAxGUAMAkMEIagAAMhhBDQBABiOoAQDIYP8fYEljnGnlZ6sAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import pandas as pd \n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "columns = [\"E(eV)\", \"epsGaussian\",\"IM(eps)Gaussian\", \"epsLorentz\", \"Im(esp)Lorentz\"] \n", "df = pd.read_table(\"methane_spectrum.dat\", comment=\"#\", sep='\\s+',names=columns) \n", "sns.relplot(x=\"E(eV)\", y=\"epsGaussian\", ci=None, kind=\"line\", data=df) \n", "plt.plot()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.14.2" } }, "nbformat": 4, "nbformat_minor": 4 }