Sigma and output type are optional arguments now. Also added an option to store calculated spectra as csv files.

This commit is contained in:
sakul-45 2022-03-03 23:32:02 +01:00
parent c5b83aa5c7
commit 16b5948a36
3 changed files with 39 additions and 13 deletions

5
.idea/AMM.iml generated
View File

@ -4,7 +4,10 @@
<content url="file://$MODULE_DIR$"> <content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/venv" /> <excludeFolder url="file://$MODULE_DIR$/venv" />
</content> </content>
<orderEntry type="jdk" jdkName="Python 3.8 (AMM)" jdkType="Python SDK" /> <orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" /> <orderEntry type="sourceFolder" forTests="false" />
</component> </component>
<component name="PackageRequirementsSettings">
<option name="versionSpecifier" value="Greater or equal (&gt;=x.y.z)" />
</component>
</module> </module>

View File

@ -3,16 +3,31 @@ Turbomole-Spectrum-Plotter
(c) 2022 Lukas Schank (c) 2022 Lukas Schank
This script will run through all subfolders of the given folder and plot excitation spectra of TDDFT calculations. This script will run through all subfolders of the given folder and plot excitation spectra of TDDFT calculations.
Call on command line like this:
python exspectrum_plotter.py --data_folder "C:\Path\to\Calculations" --output_folder "C:\path\to\results" --calc_sigma 0.15 --output_type "pdf" --save_csv False
calc_sigma output_type and save_csv are optional.
""" """
import sys import argparse
import numpy as np import numpy as np
import pandas as pd import pandas as pd
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
from pathlib import Path from pathlib import Path
def exspectrum_plotter(data_folder: str, output_folder: str): def exspectrum_plotter(data_folder: str, output_folder: str, calc_sigma=0.15, output_type="pdf", save_csv=False):
"""
Iterates through all subfolders of data_folder and plots data of exspectrum files.
:param data_folder: path to input folder
:param output_folder: path to output folder, gets created if necessary
:param calc_sigma: standard deviation of gauss broadening for calculated transitions
:param output_type: graphs can be saved as "pdf" or "png"
:param save_csv: write interpolated spectrum as csv
:return: files to the folder specified in output_folder
"""
# convert input to path objects # convert input to path objects
data_folder = Path(data_folder) data_folder = Path(data_folder)
@ -43,7 +58,6 @@ def exspectrum_plotter(data_folder: str, output_folder: str):
return gauss_osc_strength return gauss_osc_strength
calc_energy_range = np.linspace(0, 6, num=500, endpoint=True) # x values for calculated spectrum 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) calc_osc_strength = gauss_spectrum(data_energy, data_osc_strength, calc_sigma, calc_energy_range)
# create plot # create plot
@ -57,7 +71,7 @@ def exspectrum_plotter(data_folder: str, output_folder: str):
ax.yaxis.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']: for axis in ['top', 'bottom', 'left', 'right']:
ax.spines[axis].set_linewidth(1.5) ax.spines[axis].set_linewidth(1.5)
ax.set_xlim(1.5, 5) ax.set_xlim(0, 6)
plt.tight_layout() plt.tight_layout()
# save plot # save plot
@ -65,16 +79,26 @@ def exspectrum_plotter(data_folder: str, output_folder: str):
output_name = data_name.parts[data_folder.parts.__len__()] output_name = data_name.parts[data_folder.parts.__len__()]
for name in data_name.parts[(data_folder.parts.__len__() + 1):]: for name in data_name.parts[(data_folder.parts.__len__() + 1):]:
output_name += "_" + name output_name += "_" + name
output_name += ".pdf" # change here for pdf or png output output_name_plot = output_name + "." + output_type
output_path = output_folder / output_name output_path = output_folder / output_name_plot
plt.savefig(output_path) plt.savefig(output_path)
plt.close(fig) # close plot plt.close(fig) # close plot
# save calculated data
if save_csv:
csv_output = pd.DataFrame({'Energy': calc_energy_range.tolist(), 'Osc. Strength': calc_osc_strength})
output_name_csv = output_name + ".csv"
output_path_2 = output_folder / output_name_csv
csv_output.to_csv(output_path_2)
# getting commandline input and pass it to function # getting commandline input and pass it to function
if __name__ == "__main__": if __name__ == "__main__":
a = str(sys.argv[1]) parser = argparse.ArgumentParser()
b = str(sys.argv[2]) parser.add_argument('--data_folder', type=str, required=True)
exspectrum_plotter(a, b) parser.add_argument('--output_folder', type=str, required=True)
parser.add_argument('--calc_sigma', type=float, required=False)
# python exspectrum_plotter.py "C:\Path\to\Calculations" "C:\path\to\results" parser.add_argument('--output_type', type=str, required=False)
parser.add_argument('--save_csv', type=bool, required=False)
args = parser.parse_args()
exspectrum_plotter(**vars(args))

View File

@ -1,4 +1,3 @@
numpy~=1.22.1 numpy~=1.22.1
pandas~=1.4.0 pandas~=1.4.0
matplotlib~=3.5.1 matplotlib~=3.5.1
pathlib~=1.0.1