def test_consistent_atom_order(self): """Test that the atom order is preserved whether starting from SMILES or from xyz""" spc1 = ARCSpecies(label='spc1', smiles='CCCO') xyz1 = spc1.get_xyz() for adj, coord in zip(spc1.mol.toAdjacencyList().splitlines(), xyz1.splitlines()): if adj and coord: self.assertEqual(adj.split()[1], coord.split()[0]) xyz2 = """C -0.37147383 -0.54225753 0.07779977 C 0.99011397 0.11006088 -0.10715587 H -0.33990169 -1.22256017 0.93731544 H -0.60100180 -1.16814809 -0.79292035 H 1.26213386 0.70273091 0.77209458 O 1.96607463 -0.90691160 -0.28642183 H 0.99631715 0.75813344 -0.98936747 H -1.27803075 1.09840370 1.16400304 C -1.46891192 0.48768649 0.27579733 H -2.43580767 -0.00829320 0.40610628 H -1.54270451 1.15356356 -0.58992943 H 2.82319256 -0.46240839 -0.40178723""" spc2 = ARCSpecies(label='spc2', xyz=xyz2) for adj, coord in zip(spc2.mol.toAdjacencyList().splitlines(), xyz2.splitlines()): if adj and coord: self.assertEqual(adj.split()[1], coord.split()[0]) n3_xyz = str("""N -1.1997440839 -0.1610052059 0.0274738287 H -1.4016624407 -0.6229695533 -0.8487034080 H -0.0000018759 1.2861082773 0.5926077870 N 0.0000008520 0.5651072858 -0.1124621525 H -1.1294692206 -0.8709078271 0.7537518889 N 1.1997613019 -0.1609980472 0.0274604887 H 1.1294795781 -0.8708998550 0.7537444446 H 1.4015274689 -0.6230592706 -0.8487058662""") spc3 = ARCSpecies(label=str('N3'), xyz=n3_xyz, multiplicity=1, smiles=str('NNN')) self.assertEqual(spc3.mol.atoms[1].symbol, 'H') spc3.generate_conformers() self.assertEqual(len(spc3.conformers), 5) xyz4 = """O -1.48027320 0.36597456 0.41386552 C -0.49770656 -0.40253648 -0.26500019 C 0.86215119 0.24734211 -0.11510338 H -0.77970114 -0.46128090 -1.32025907 H -0.49643724 -1.41548311 0.14879346 H 0.84619526 1.26924854 -0.50799415 H 1.14377239 0.31659216 0.94076336 H 1.62810781 -0.32407050 -0.64676910 H -1.22610851 0.40421362 1.35170355""" spc4 = ARCSpecies(label='CCO', smiles='CCO', xyz=xyz4) # define from xyz for consistent atom order for atom1, atom2 in zip(spc4.mol.atoms, spc4.mol_list[0].atoms): self.assertEqual(atom1.symbol, atom2.symbol)
def test_save_conformers_file(self): """test the save_conformers_file function""" project = 'arc_project_for_testing_delete_after_usage' project_directory = os.path.join(arc_path, 'Projects', project) label = 'butanol' spc1 = ARCSpecies(label=label, smiles='CCCCO') spc1.generate_conformers(n_confs=3) self.assertIn(len(spc1.conformers), [2, 3]) plotter.save_conformers_file(project_directory=project_directory, label=spc1.label, xyzs=spc1.conformers, level_of_theory='APFD/def2tzvp', multiplicity=spc1.multiplicity, charge=spc1.charge, is_ts=False, energies=spc1.conformer_energies) conf_file_path = os.path.join(project_directory, 'output', 'Species', label, 'geometry', 'conformers', 'conformers_before_optimization.txt') self.assertTrue(os.path.isfile(conf_file_path))
def test_conformers(self): """Test conformer generation""" self.spc1.conformers = list() self.spc1.conformer_energies = list() self.assertEqual(len(self.spc1.conformers), len(self.spc1.conformer_energies)) self.spc1.generate_conformers() self.assertIn(len(self.spc1.conformers), [2, 3]) self.assertEqual(len(self.spc1.conformers), len(self.spc1.conformer_energies)) self.spc2.conformers = list() self.spc2.generate_conformers() self.assertEqual(len(self.spc2.conformers), 1) self.spc3.conformers = list() self.spc3.generate_conformers() self.assertEqual(len(self.spc3.conformers), 1) self.spc4.conformers = list() self.spc4.generate_conformers() self.assertIn(len(self.spc4.conformers), [3, 4, 5]) self.spc5.conformers = list() self.spc5.generate_conformers() self.assertEqual(len(self.spc5.conformers), 3) self.spc6.conformers = list() self.spc6.generate_conformers() self.assertEqual(len(self.spc6.conformers), 4) self.spc8.conformers = list() self.spc8.generate_conformers() self.assertEqual(len(self.spc8.conformers), 4) self.spc9.conformers = list() self.spc9.generate_conformers() self.assertEqual(len(self.spc9.conformers), 1) self.spc10.conformers = list() self.spc10.generate_conformers(confs_to_dft=1) self.assertEqual(len(self.spc10.conformers), 1) self.spc10.conformers = list() self.spc10.generate_conformers(confs_to_dft=2) self.assertEqual(len(self.spc10.conformers), 2) self.spc10.conformers = list() self.spc10.generate_conformers(confs_to_dft=3) self.assertEqual(len(self.spc10.conformers), 3) self.spc11.conformers = list() self.spc11.generate_conformers(confs_to_dft=1) self.assertEqual(len(self.spc11.conformers), 2) # has more confs due to chiral center self.spc11.conformers = list() self.spc11.generate_conformers(confs_to_dft=2) self.assertEqual(len(self.spc11.conformers), 3) self.spc11.conformers = list() self.spc11.generate_conformers(confs_to_dft=3) self.assertIn(len(self.spc11.conformers), [3, 4]) xyz12 = """C 0.00000000 0.00000000 0.00000000 H 1.07008000 -0.14173100 0.00385900 H -0.65776100 -0.85584100 -0.00777700 H -0.41231900 0.99757300 0.00391900""" spc12 = ARCSpecies(label='CH3', smiles='[CH3]', xyz=xyz12) spc12.generate_conformers() self.assertEqual(len(spc12.conformers), 2) self.assertEqual(len(spc12.conformer_energies), 2)