@@ -198,7 +198,7 @@ def generate_doc(self, dir_name, qcinput_files, qcoutput_files, multirun):
198
198
elif "ESP" in d_calc_final :
199
199
d ["output" ]["esp" ] = d_calc_final ["ESP" ][- 1 ]
200
200
201
- if d ["output" ]["job_type" ] == "opt" or d [ "output" ][ "job_type" ] == "optimization" :
201
+ if d ["output" ]["job_type" ] in [ "opt" , "optimization" , "ts" ] :
202
202
if "molecule_from_optimized_geometry" in d_calc_final :
203
203
d ["output" ]["optimized_molecule" ] = d_calc_final [
204
204
"molecule_from_optimized_geometry" ]
@@ -210,22 +210,35 @@ def generate_doc(self, dir_name, qcinput_files, qcoutput_files, multirun):
210
210
d_calc_final ["opt_constraint" ][0 ],
211
211
float (d_calc_final ["opt_constraint" ][6 ])
212
212
]
213
- if d ["output" ]["job_type" ] == "freq" or d [ "output" ][ "job_type" ] == " frequency" :
213
+ if d ["output" ]["job_type" ] in [ "freq" , " frequency"] :
214
214
d ["output" ]["frequencies" ] = d_calc_final ["frequencies" ]
215
+ d ["output" ]["frequency_modes" ] = d_calc_final ["frequency_mode_vectors" ]
215
216
d ["output" ]["enthalpy" ] = d_calc_final ["total_enthalpy" ]
216
217
d ["output" ]["entropy" ] = d_calc_final ["total_entropy" ]
217
- if d ["input" ]["job_type" ] == "opt" or d ["input" ]["job_type" ] == "optimization" :
218
- d ["output" ]["optimized_molecule" ] = d_calc_final [
219
- "initial_molecule" ]
220
- d ["output" ]["final_energy" ] = d ["calcs_reversed" ][1 ][
221
- "final_energy" ]
218
+ if d ["input" ]["job_type" ] in ["opt" , "optimization" , "ts" ]:
219
+ d ["output" ]["optimized_molecule" ] = d_calc_final ["initial_molecule" ]
220
+ d ["output" ]["final_energy" ] = d ["calcs_reversed" ][1 ]["final_energy" ]
221
+ # For frequency-first calcs
222
+ else :
223
+ if len (d ["calcs_reversed" ]) > 1 :
224
+ first_calc = d ["calcs_reversed" ][- 1 ]["input" ]["rem" ]["job_type" ]
225
+ second_calc = d ["calcs_reversed" ][- 2 ]["input" ]["rem" ]["job_type" ]
226
+ if first_calc in ["freq" , "frequency" ] and second_calc in ["opt" , "optimization" , "ts" ]:
227
+ d ["output" ]["optimized_molecule" ] = d_calc_final ["initial_molecule" ]
228
+ d ["output" ]["final_energy" ] = d ["calcs_reversed" ][1 ]["final_energy" ]
229
+
230
+ if d ["output" ]["job_type" ] == "pes_scan" :
231
+ d ["output" ]["scan_energies" ] = d_calc_final .get ("scan_energies" )
232
+ d ["input" ]["scan_variables" ] = d_calc_final .get ("scan_variables" )
233
+ d ["output" ]["scan_geometries" ] = d_calc_final .get ("optimized_geometries" )
234
+ d ["output" ]["scan_molecules" ] = d_calc_final .get ("molecules_from_optimized_geometries" )
222
235
223
236
opt_trajectory = []
224
237
calcs = copy .deepcopy (d ["calcs_reversed" ])
225
238
calcs .reverse ()
226
239
for calc in calcs :
227
240
job_type = calc ["input" ]["rem" ]["job_type" ]
228
- if job_type == "opt" or job_type == "optimization" :
241
+ if job_type in [ "opt" , "optimization" , "ts" ] :
229
242
for ii ,geom in enumerate (calc ["geometries" ]):
230
243
site_properties = {"Mulliken" :calc ["Mulliken" ][ii ]}
231
244
if "RESP" in calc :
@@ -282,17 +295,35 @@ def generate_doc(self, dir_name, qcinput_files, qcoutput_files, multirun):
282
295
283
296
d ["state" ] = "successful" if d_calc_final ["completion" ] else "unsuccessful"
284
297
if "special_run_type" in d :
285
- if d ["special_run_type" ] == "frequency_flattener" :
298
+ if d ["special_run_type" ] in [ "frequency_flattener" , "ts_frequency_flattener" ] :
286
299
if d ["state" ] == "successful" :
287
- orig_num_neg_freq = sum (1 for freq in d ["calcs_reversed" ][- 2 ]["frequencies" ] if freq < 0 )
288
- orig_energy = d_calc_init ["final_energy" ]
300
+ orig_num_neg_freq = None
301
+ for calc in d ["calcs_reversed" ][::- 1 ]:
302
+ if "frequencies" in calc :
303
+ orig_num_neg_freq = sum (1 for freq in calc ["frequencies" ] if freq < 0 )
304
+ break
305
+ orig_energy = None
306
+ for calc in d ["calcs_reversed" ][::- 1 ]:
307
+ if "final_energy" in calc :
308
+ orig_energy = calc ["final_energy" ]
309
+ break
289
310
final_num_neg_freq = sum (1 for freq in d_calc_final ["frequencies" ] if freq < 0 )
290
311
final_energy = d ["calcs_reversed" ][1 ]["final_energy" ]
291
- d ["num_frequencies_flattened" ] = orig_num_neg_freq - final_num_neg_freq
292
- if final_num_neg_freq > 0 : # If a negative frequency remains,
293
- # and it's too large to ignore,
294
- if final_num_neg_freq > 1 or abs (d ["output" ]["frequencies" ][0 ]) >= 15.0 :
295
- d ["state" ] = "unsuccessful" # then the flattening was unsuccessful
312
+ if orig_num_neg_freq is None :
313
+ d ["num_frequencies_flattened" ] = 0
314
+ else :
315
+ d ["num_frequencies_flattened" ] = orig_num_neg_freq - final_num_neg_freq
316
+
317
+ if d ["special_run_type" ] == "frequency_flattener" :
318
+ if final_num_neg_freq > 0 : # If a negative frequency remains,
319
+ # and it's too large to ignore,
320
+ if final_num_neg_freq > 1 or abs (d ["output" ]["frequencies" ][0 ]) >= 15.0 :
321
+ d ["state" ] = "unsuccessful" # then the flattening was unsuccessful
322
+ else :
323
+ if final_num_neg_freq > 1 : # If a negative frequency remains,
324
+ # and it's too large to ignore,
325
+ if final_num_neg_freq > 2 or abs (d ["output" ]["frequencies" ][1 ]) >= 15.0 :
326
+ d ["state" ] = "unsuccessful" # then the flattening was unsuccessful
296
327
if final_energy > orig_energy :
297
328
d ["warnings" ]["energy_increased" ] = True
298
329
0 commit comments