From 211eaffcb4a9d4117c3bab4e309ff538d7fa5e58 Mon Sep 17 00:00:00 2001 From: sakul-45 <81963567+sakul-45@users.noreply.github.com> Date: Sun, 20 Feb 2022 18:39:04 +0100 Subject: [PATCH] Initial commit --- .idea/.gitignore | 3 + .idea/AMM.iml | 10 +++ .../inspectionProfiles/profiles_settings.xml | 6 ++ .idea/misc.xml | 4 + .idea/modules.xml | 8 ++ .idea/vcs.xml | 6 ++ exspectrum | 32 ++++++++ exspectrum_plotter.py | 80 +++++++++++++++++++ 8 files changed, 149 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 .idea/AMM.iml create mode 100644 .idea/inspectionProfiles/profiles_settings.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 exspectrum create mode 100644 exspectrum_plotter.py diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/AMM.iml b/.idea/AMM.iml new file mode 100644 index 0000000..3357973 --- /dev/null +++ b/.idea/AMM.iml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..9567659 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..01a69c2 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/exspectrum b/exspectrum new file mode 100644 index 0000000..43e2918 --- /dev/null +++ b/exspectrum @@ -0,0 +1,32 @@ +# Excitation spectrum ; written at 2021-12-23 18:00:19 +# Exc. energy (Eh) energy (eV) energy (cm-1) energy (nm) Osc.(vel) Osc.(len) + 1 a 0.081632 2.22132 17916.184 558.155 0.59324546 0.63875147 + 2 a 0.097816 2.66170 21468.087 465.808 0.01013849 0.01104033 + 3 a 0.101932 2.77371 22371.482 446.998 0.18173513 0.19477660 + 4 a 0.119431 3.24989 26212.132 381.503 0.64359780 0.65859697 + 5 a 0.121826 3.31506 26737.749 374.003 0.07358580 0.07053363 + 6 a 0.124153 3.37836 27248.345 366.995 0.58084889 0.60692493 + 7 a 0.133071 3.62104 29205.673 342.399 0.44634456 0.45611903 + 8 a 0.136025 3.70142 29853.943 334.964 0.01543649 0.01724145 + 9 a 0.138425 3.76673 30380.708 329.156 0.06870782 0.06655899 + 10 a 0.139343 3.79172 30582.302 326.986 0.09547385 0.09610700 + 11 a 0.139697 3.80135 30659.928 326.159 0.31050776 0.32244116 + 12 a 0.141117 3.83998 30971.558 322.877 0.04646558 0.04287950 + 13 a 0.143354 3.90086 31462.590 317.838 0.00140278 0.00117080 + 14 a 0.143957 3.91727 31594.889 316.507 0.07233739 0.07315710 + 15 a 0.144246 3.92514 31658.403 315.872 0.00752599 0.00818926 + 16 a 0.144772 3.93944 31773.723 314.725 0.00168315 0.00167697 + 17 a 0.145201 3.95111 31867.834 313.796 0.00226231 0.00201420 + 18 a 0.145758 3.96629 31990.274 312.595 0.00003515 0.00003452 + 19 a 0.146169 3.97747 32080.469 311.716 0.00837502 0.00898456 + 20 a 0.146494 3.98631 32151.783 311.025 0.00974370 0.00905770 + 21 a 0.148519 4.04140 32596.061 306.786 0.23894747 0.26006671 + 22 a 0.149195 4.05981 32744.572 305.394 0.01999536 0.02004168 + 23 a 0.149254 4.06140 32757.367 305.275 0.00860917 0.00890324 + 24 a 0.149750 4.07490 32866.276 304.263 0.02541908 0.02508246 + 25 a 0.151961 4.13507 33351.586 299.836 0.00081672 0.00066642 + 26 a 0.152157 4.14040 33394.610 299.450 0.00012992 0.00013872 + 27 a 0.152234 4.14249 33411.414 299.299 0.00004462 0.00004261 + 28 a 0.153115 4.16647 33604.808 297.576 0.03615181 0.04035899 + 29 a 0.153534 4.17787 33696.766 296.764 0.00006776 0.00007273 + 30 a 0.154251 4.19738 33854.151 295.385 0.03348557 0.03561208 diff --git a/exspectrum_plotter.py b/exspectrum_plotter.py new file mode 100644 index 0000000..9ef369f --- /dev/null +++ b/exspectrum_plotter.py @@ -0,0 +1,80 @@ +""" +Turbomole-Spectrum-Plotter +(c) 2022 Lukas Schank + +This script will run through all subfolders of the given folder and plot excitation spectra of TDDFT calculations. +""" + +import sys +import numpy as np +import pandas as pd +import matplotlib.pyplot as plt +from pathlib import Path + + +def exspectrum_plotter(data_folder: str, output_folder: str): + + # convert input to path objects + data_folder = Path(data_folder) + output_folder = Path(output_folder) + if not output_folder.exists(): + output_folder.mkdir() + + # convert data to plot + for data_file in data_folder.glob('**/exspectrum'): # path.glob iterates through given folder for pattern + # read data + rawdata = pd.read_csv( + data_file, + sep='\s+', # seperator is one or more spaces + skiprows=2, # skip header rows + header=None # prevent getting first numbers as header + ) + data_energy = np.array(rawdata.iloc[:, 3]) + data_osc_strength = np.array(rawdata.iloc[:, 6]) + + # calculate gauss broadening for spectrum + def gauss_spectrum(energy, osc_strength, sigma, gauss_energy_range): + gauss_osc_strength = [] + for E_i in gauss_energy_range: + tot = 0 + for E_j, osc in zip(energy, osc_strength): + tot += osc * np.exp(-(((E_j - E_i) / sigma) ** 2)) + gauss_osc_strength.append(tot) + return gauss_osc_strength + + calc_energy_range = np.linspace(0, 6, num=500, endpoint=True) # x values for calculated spectrum + calc_sigma = 0.15 # std for gauss broadening + calc_osc_strength = gauss_spectrum(data_energy, data_osc_strength, calc_sigma, calc_energy_range) + + # create plot + fig, ax = plt.subplots(dpi=300, figsize=(6, 4)) + ax.plot(calc_energy_range, calc_osc_strength, "-k") # plot calculated spectrum + for plt_energy, plt_osc_strength in zip(data_energy, data_osc_strength): + ax.plot((plt_energy, plt_energy), (0, plt_osc_strength), c="k") # plot lines from data + ax.set_xlabel("Energy / eV", fontsize=16) + ax.set_ylabel("Osc. Strength / a.u.", fontsize=16) + ax.xaxis.set_tick_params(labelsize=14, width=1.5) + ax.yaxis.set_tick_params(labelsize=14, width=1.5) + for axis in ['top', 'bottom', 'left', 'right']: + ax.spines[axis].set_linewidth(1.5) + ax.set_xlim(1.5, 5) + plt.tight_layout() + + # save plot + data_name = Path(data_file) + output_name = data_name.parts[data_folder.parts.__len__()] + for name in data_name.parts[(data_folder.parts.__len__() + 1):]: + output_name += "_" + name + output_name += ".pdf" # change here for pdf or png output + output_path = output_folder / output_name + plt.savefig(output_path) + plt.close(fig) # close plot + + +# getting commandline input and pass it to function +if __name__ == "__main__": + a = str(sys.argv[1]) + b = str(sys.argv[2]) + exspectrum_plotter(a, b) + +# python exspectrum_plotter.py "C:\Path\to\Calculations" "C:\path\to\results"