{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "import mlatom as ml"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Optimized geometry:\n",
      "\n",
      "12\n",
      "\n",
      "C             0.0000000000000           1.3925401460472           0.0000000000000\n",
      "C             1.2059751422665           0.6962700730233           0.0000000000000\n",
      "C             1.2059751422665          -0.6962700730233           0.0000000000000\n",
      "C            -0.0000000000000          -1.3925401460472           0.0000000000000\n",
      "C            -1.2059751422665          -0.6962700730233           0.0000000000000\n",
      "C            -1.2059751422665           0.6962700730233           0.0000000000000\n",
      "H             0.0000000000000           2.4748778305515           0.0000000000000\n",
      "H             2.1433070725205           1.2374389152757           0.0000000000000\n",
      "H             2.1433070725205          -1.2374389152757           0.0000000000000\n",
      "H            -0.0000000000000          -2.4748778305515           0.0000000000000\n",
      "H            -2.1433070725205          -1.2374389152757           0.0000000000000\n",
      "H            -2.1433070725205           1.2374389152757           0.0000000000000\n",
      "\n"
     ]
    }
   ],
   "source": [
    "# here we demonstrate on an example of benzene molecule how to calculate its UV/vis spectrum via single-point convolution\n",
    "# load the initial guess for geometry\n",
    "mol = ml.data.molecule.from_xyz_string('''12\n",
    "\n",
    "C        0.00000000      1.39110400      0.00000000\n",
    "C        1.20473100      0.69555200      0.00000000\n",
    "C        1.20473100     -0.69555200      0.00000000\n",
    "C       -0.00000000     -1.39110400      0.00000000\n",
    "C       -1.20473100     -0.69555200     -0.00000000\n",
    "C       -1.20473100      0.69555200      0.00000000\n",
    "H        0.00000000      2.47330200      0.00000000\n",
    "H        2.14194200      1.23665100      0.00000000\n",
    "H        2.14194200     -1.23665100      0.00000000\n",
    "H       -0.00000000     -2.47330200      0.00000000\n",
    "H       -2.14194200     -1.23665100     -0.00000000\n",
    "H       -2.14194200      1.23665100      0.00000000\n",
    "''')\n",
    "\n",
    "# define the method\n",
    "aiqm1 = ml.models.methods(method='AIQM1')\n",
    "\n",
    "# optimize the geometry in the ground state (can be done in a different method than used for calculating excited-state properties)\n",
    "ml.optimize_geometry(molecule=mol, model=aiqm1)\n",
    "print('Optimized geometry:\\n')\n",
    "print(mol.get_xyz_string())\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Excitation energies in eV: [5.3710049  5.60304691 6.61331818 6.67385531 6.67385531 6.76922225\n",
      " 7.08701569 7.08701569 7.09072088 7.09072088 7.19999454 7.33800668\n",
      " 7.33800668 7.68971288 7.68971288 7.78272969 7.94352801 7.94352801\n",
      " 8.03701885 8.03701885 8.04044002 8.3125381  8.3125381  8.35760543\n",
      " 8.49747267 8.51403753 8.51403753 8.52262497 8.52262497]\n",
      "Oscillator strengths: [0.0, 0.0, 0.0, 0.0, 0.0, 0.001118, 0.0, 0.0, 0.200732, 0.200732, 0.0, 0.0, 0.0, 0.0, 0.0, 0.035603, 2.750769, 2.750769, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]\n"
     ]
    }
   ],
   "source": [
    "# perform single-point excited-state calculations\n",
    "aiqm1.predict(molecule=mol, \n",
    "                nstates=30, # Number of electronic states to calculate\n",
    "                )\n",
    "# after all this work, let's dump the molecule so that we can re-use the calculations later if needed:\n",
    "mol.dump(filename='benzene.json', format='json')\n",
    "# you can load it later as\n",
    "# mol = ml.molecule.load(filename='benzene.json', format='json')\n",
    "\n",
    "# show the excitation energies and oscillator strengths\n",
    "print(f'Excitation energies in eV: {mol.excitation_energies*ml.constants.hartree2eV}')\n",
    "print(f'Oscillator strengths: {mol.oscillator_strengths}')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "mol = ml.molecule.load(filename='benzene.json', format='json')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# now we can use single-point convolution to obtain UV/vis absorption spectrum from our calculations\n",
    "spectrum = ml.spectra.uvvis.spc(molecule=mol, band_width=0.3)\n",
    "# dump spectrum in a text or npy format\n",
    "spectrum.dump('benzene_spc.txt', format='txt')\n",
    "# you can load it later as\n",
    "# spectrum = ml.spectra.uvvis.load('benzene_spc.txt', format='txt')\n",
    "# quick plot to save the spectrum in a file or check it in the Jupyter notebook\n",
    "spectrum.plot(filename='UVvis.png')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "054bc6b335c44294bdc491340dce7e73",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "interactive(children=(FloatSlider(value=0.06, description='width (eV):', max=0.5, min=0.01, step=0.01), Output…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# it might be useful to use dedicated plotting routines which are more flexible,\n",
    "# e.g., for showing the slider to interactively modify the broadening width in Jupyter notebook\n",
    "ml.spectra.plot_uvvis(molecule=mol,\n",
    "               normalize=True,\n",
    "               spc=True, band_width=0.06,\n",
    "               band_width_slider=True, # might want to swith off if not used interactively\n",
    "               )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "# more useful might be comparison to experiment\n",
    "# let's get the experimental spectrum from file (got from NIST, baseline is not removed)\n",
    "wavelengths = []\n",
    "cross_section = []\n",
    "import numpy as np\n",
    "\n",
    "raw_data = np.loadtxt(f'benzene_exp.dat').T\n",
    "exp_spectrum = ml.spectra.uvvis(wavelengths_nm=raw_data[0],molar_absorbance=raw_data[1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "790c2e187af24c7d95948614050296ec",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "interactive(children=(FloatSlider(value=0.06, description='width (eV):', max=0.5, min=0.01, step=0.01), Output…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "ml.spectra.plot_uvvis(spectra=[exp_spectrum], \n",
    "               molecule=mol,\n",
    "               normalize=True,\n",
    "               labels=['experiment', 'theory'],\n",
    "               shift=True,\n",
    "               spc=True, band_width=0.06,\n",
    "               band_width_slider=True,\n",
    "               filename='UVvis_sp_comparison.png'\n",
    "               #plotstart=300, plotend=600, # other potentially useful options\n",
    "               #linespectra=[linespec]\n",
    "               )"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "base",
   "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.11.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
