99from collections import defaultdict
1010from moldscript .argument_parser import load_variables
1111import numpy as np
12+ from moldscript .utils import eV_to_hartree
1213
1314class fukui :
1415 """
@@ -23,17 +24,14 @@ def __init__(self, data, data_dicts, create_dat=True, **kwargs):
2324 self .data = data
2425 self .data_dict = data_dicts
2526
26- try :
27- if len (self .data .keys ()) == 0 :
28- self .args .log .write (
29- f"x Could not find files to obtain information for calculating Fukui Coefficients\n "
30- )
31- self .args .log .finalize ()
32- sys .exit ()
33- else :
34- self .file_data = self .get_data ()
35- except :
36- print ('' )
27+ if len (self .data .keys ()) == 0 :
28+ self .args .log .write (
29+ f"x Could not find files to obtain information for calculating Fukui Coefficients\n "
30+ )
31+ self .args .log .finalize ()
32+ sys .exit ()
33+ else :
34+ self .file_data = self .get_data ()
3735
3836 if create_dat :
3937 elapsed_time = round (time .time () - start_time_overall , 2 )
@@ -50,7 +48,8 @@ def get_data(self):
5048 self .args .log .write (
5149 f"-- Fukui Parameter Collection starting"
5250 )
53- for file_name in self .data .keys ():
51+
52+ for file_name in list (self .data .keys ()):
5453 neutral_data , oxidized_data , reduced_data = None , None , None
5554 if "neutral" in self .data [file_name ].keys ():
5655 neutral_data = self .parse_cc_data (
@@ -91,16 +90,22 @@ def get_data(self):
9190 self .data_dict [file_name ]['atom' ]['reduced_natural_charges' ] = (
9291 reduced_data .atomcharges ["natural" ]
9392 )
94-
93+ neut_e = neutral_data .scfenergies [- 1 ] * eV_to_hartree
94+ red_e = reduced_data .scfenergies [- 1 ] * eV_to_hartree
95+ ox_e = oxidized_data .scfenergies [- 1 ] * eV_to_hartree
96+ self .data_dict [file_name ]['mol' ]['vertical_ie' ] = ox_e - neut_e
97+ self .data_dict [file_name ]['mol' ]['vertical_ea' ] = red_e - neut_e
98+
9599 reduced_charges = np .array (reduced_data .atomcharges ["natural" ])
96100 neutral_charges = np .array (neutral_data .atomcharges ["natural" ])
97101 oxidized_charges = np .array (oxidized_data .atomcharges ["natural" ])
98- nuc_fukui = reduced_charges - neutral_charges
99- ele_fukui = neutral_charges - oxidized_charges
100- rad_fukui = (nuc_fukui + ele_fukui )/ 2
101- self .data_dict [file_name ]['atom' ]['nucleophilic_fukui_index' ] = (nuc_fukui )
102- self .data_dict [file_name ]['atom' ]['electrophilic_fukui_index' ] = (ele_fukui )
103- self .data_dict [file_name ]['atom' ]['radical_fukui_index' ] = (rad_fukui )
102+ #multiplied by -1 to change from charge density to electron density to meet fukui definition
103+ fplus = - 1 * (reduced_charges - neutral_charges )
104+ fminus = - 1 * (neutral_charges - oxidized_charges )
105+ rad_fukui = (fplus + fminus )/ 2
106+ self .data_dict [file_name ]['atom' ]['fplus' ] = (fplus )
107+ self .data_dict [file_name ]['atom' ]['fminus' ] = (fminus )
108+ self .data_dict [file_name ]['atom' ]['frad' ] = (rad_fukui )
104109 else :
105110 self .args .log .write (
106111 f"x Skipping file { file_name } as one either neutral, oxidized or reduced does not exist!"
@@ -137,10 +142,11 @@ def npa_data(self, file, cc_data):
137142 start_npop = None
138143 outfile = open (file , "r" )
139144 lines = outfile .readlines ()
145+ list_npop = []
140146 for i , line in enumerate (lines ):
141147 if line .find (" Summary of Natural Population Analysis:" ) > - 1 :
142- start_npop = i + 6
143-
148+ list_npop . append ( i + 6 )
149+ start_npop = list_npop [ 0 ]
144150 if start_npop != None :
145151 nat_charges = []
146152 end_npop = start_npop + len (cc_data .atomnos )
0 commit comments