def test_load_co_modes_from_qchem_log(self): """ Uses a QChem log file for CO to test that its molecular degrees of freedom can be properly read. """ log = QChemLog(os.path.join(self.data_path, 'co.out')) conformer, unscaled_frequencies = log.load_conformer() E0 = log.load_energy() self.assertTrue( len([ mode for mode in conformer.modes if isinstance(mode, IdealGasTranslation) ]) == 1) self.assertTrue( len([ mode for mode in conformer.modes if isinstance(mode, LinearRotor) ]) == 1) self.assertTrue( len([ mode for mode in conformer.modes if isinstance(mode, NonlinearRotor) ]) == 0) self.assertTrue( len([ mode for mode in conformer.modes if isinstance(mode, HarmonicOscillator) ]) == 1) self.assertTrue( len([ mode for mode in conformer.modes if isinstance(mode, HinderedRotor) ]) == 0)
def test_check_for_errors(self): """ Uses a QChem log file that reached to maximum number of optimization cycles to test if errors are properly parsed. """ with self.assertRaises(LogError): QChemLog(os.path.join(self.data_path, 'formyl_azide.out'))
def test_energy_from_qchem_log(self): """ Uses QChem log files to test that molecular energies can be properly read. """ log = QChemLog(os.path.join(self.data_path, 'npropyl.out')) self.assertAlmostEqual(log.load_energy(), -310896203.5432524, delta=1e-7) log = QChemLog(os.path.join(self.data_path, 'co.out')) self.assertAlmostEqual(log.load_energy(), -297402545.0217114, delta=1e-7) log = QChemLog(os.path.join(self.data_path, 'CH4_sp.out')) self.assertAlmostEqual(log.load_energy(), -106356735.53661588, delta=1e-7)
def test_zero_point_energy_from_qchem_log(self): """ Uses QChem log files to test that zero point energies can be properly read. """ log = QChemLog(os.path.join(self.data_path, 'npropyl.out')) self.assertAlmostEqual(log.load_zero_point_energy(), 228785.304, delta=1e-3) log = QChemLog(os.path.join(self.data_path, 'co.out')) self.assertAlmostEqual(log.load_zero_point_energy(), 13476.664, delta=1e-3) log = QChemLog(os.path.join(self.data_path, 'formyl_azide.out'), check_for_errors=False) self.assertAlmostEqual(log.load_zero_point_energy(), 83014.744, delta=1e-3)
def test_number_of_atoms_from_qchem_log(self): """ Uses QChem log files to test that number of atoms can be properly read. """ log = QChemLog(os.path.join(self.data_path, 'npropyl.out')) self.assertEqual(log.get_number_of_atoms(), 10) log = QChemLog(os.path.join(self.data_path, 'co.out')) self.assertEqual(log.get_number_of_atoms(), 2)
def test_spin_multiplicity_from_qchem_log(self): """ Uses QChem log files to test that molecular degrees of freedom can be properly read. """ log = QChemLog(os.path.join(self.data_path, 'npropyl.out')) conformer, unscaled_frequencies = log.load_conformer() self.assertEqual(conformer.spin_multiplicity, 2) log = QChemLog(os.path.join(self.data_path, 'co.out')) conformer, unscaled_frequencies = log.load_conformer() self.assertEqual(conformer.spin_multiplicity, 1)
def test_load_vibrations_from_qchem_log(self): """ Uses QChem log files to test that molecular energies can be properly read. """ log = QChemLog(os.path.join(self.data_path, 'npropyl.out')) conformer, unscaled_frequencies = log.load_conformer() self.assertEqual(len(conformer.modes[2]._frequencies.value), 24) self.assertEqual(conformer.modes[2]._frequencies.value[5], 881.79) log = QChemLog(os.path.join(self.data_path, 'co.out')) conformer, unscaled_frequencies = log.load_conformer() self.assertEqual(len(conformer.modes[2]._frequencies.value), 1) self.assertEqual(conformer.modes[2]._frequencies.value, 2253.16)
def test_rotor_symmetry_determination(self): """ Test that the correct symmetry number is determined for rotor potential scans. """ path1 = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'data', 'NCC_NRotor.out') path2 = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'data', 'NCC_CRotor.out') scan_log1 = QChemLog(path1) scan_log2 = QChemLog(path2) v_list1, angle = scan_log1.load_scan_energies() v_list2, angle = scan_log2.load_scan_energies() symmetry1 = determine_rotor_symmetry(energies=v_list1, label='NCC', pivots=[]) symmetry2 = determine_rotor_symmetry(energies=v_list2, label='NCC', pivots=[]) self.assertEqual(symmetry1, 1) self.assertEqual(symmetry2, 3)