def test_set_vector_length(self): """Test changing a vector's length""" v1 = [1, 0, 0] self.assertEqual(vectors.get_vector_length(v1), 1) v1_transformed = vectors.set_vector_length(v1, 5) self.assertAlmostEqual(vectors.get_vector_length(v1_transformed), 5) v1 = [1, 1, 1] self.assertEqual(vectors.get_vector_length(v1), 3 ** 0.5) v1_transformed = vectors.set_vector_length(v1, 5) self.assertAlmostEqual(vectors.get_vector_length(v1_transformed), 5) label = 'CNCC' pivot = 0 xyz = {'symbols': ('N', 'C', 'C', 'C', 'H', 'H', 'H', 'H', 'H', 'H', 'H', 'H', 'H'), 'isotopes': (14, 12, 12, 12, 1, 1, 1, 1, 1, 1, 1, 1, 1), 'coords': ((0.7419854952964929, -0.18588322859265055, -0.8060295165375653), (-0.38476668007897186, -0.8774643553523614, -0.1815530887172187), (-1.4977348513273125, 0.05995564693605262, 0.26652181022311233), (1.5633235727172392, 0.5360966415350092, 0.15477859056711452), (-0.04458112063725271, -1.4936027355391557, 0.6589418973690523), (-0.7986335015469359, -1.5715787743431335, -0.9219907626214912), (-2.348455608682208, -0.5210498432021002, 0.6375394558854425), (-1.8523669868240424, 0.6790455638159553, -0.5642494434208211), (-1.170505453235269, 0.7210016856743618, 1.0746899133307615), (2.4283037770451084, 0.9651590522064675, -0.36083882142892065), (1.945994527876002, -0.1322800197070601, 0.9328203647772167), (1.0178974719106297, 1.3595978302624294, 0.6250164549219148), (0.39953935748654607, 0.4610025363062083, -1.5156468543485933))} mol = ARCSpecies(label='CNCC', xyz=xyz).mol v1 = vectors.get_lp_vector(label, mol, xyz, pivot) self.assertAlmostEqual(vectors.get_vector_length(v1), 1) # should return a unit vector v1_transformed = vectors.set_vector_length(v1, 5) self.assertAlmostEqual(vectors.get_vector_length(v1_transformed), 5)
def test_get_lp_vector(self): """Test the lone pair vector""" xyz1 = converter.str_to_xyz( """O 1.13971727 -0.35763357 -0.91809799 N -0.16022228 -0.63832421 -0.32863338 C -0.42909096 0.49864538 0.54457751 H -1.36471297 0.33135829 1.08632108 H 0.37059419 0.63632068 1.27966893 H -0.53867601 1.41749835 -0.03987146 H 0.03832076 -1.45968957 0.24914206 H 0.94407000 -0.42817536 -1.87310674""") spc1 = ARCSpecies(label='tst1', smiles='CN(O)', xyz=xyz1) vector = vectors.get_lp_vector(label='tst1', mol=spc1.mol, xyz=xyz1, pivot=1) self.assertAlmostEqual(vector[0], -0.7582151013592212, 5) self.assertAlmostEqual(vector[1], -0.14276808320949216, 5) self.assertAlmostEqual(vector[2], -0.6361816835523585, 5) self.assertAlmostEqual((sum([vi**2 for vi in vector]))**0.5, 1) # puts the following dummy atom in xyz1: 'Cl -0.91844 -0.78109 -0.96482' xyz2 = converter.str_to_xyz( """N -0.70735114 0.81971647 0.24999886 C 0.58016992 0.65919122 -0.42405305 C 1.44721132 -0.43727777 0.17945348 C -1.63900905 -0.25796649 -0.04936095 H 1.11974047 1.60931343 -0.33768790 H 0.43764604 0.48458543 -1.49689220 H 1.00255021 -1.42757899 0.04242741 H 2.42947502 -0.44523307 -0.30432399 H 1.60341053 -0.27376799 1.25093890 H -1.81252045 -0.34624671 -1.12667881 H -2.60396918 -0.04100469 0.41960198 H -1.29274859 -1.22036999 0.33877281 H -0.56460509 0.87663914 1.25780346""") spc2 = ARCSpecies(label='tst2', smiles='CNCC', xyz=xyz2) vector = vectors.get_lp_vector(label='tst2', mol=spc2.mol, xyz=xyz2, pivot=0) self.assertAlmostEqual(vector[0], -0.40585301456248446, 5) self.assertAlmostEqual(vector[1], 0.8470158636326891, 5) self.assertAlmostEqual(vector[2], -0.34328917449449764, 5) self.assertAlmostEqual((sum([vi**2 for vi in vector]))**0.5, 1)
def test_get_vector_length(self): """Test getting a vector's length""" # unit vector v1 = [1, 0, 0] self.assertEqual(vectors.get_vector_length(v1), 1) # a vector with 0 entries v1 = [0, 0, 0] self.assertEqual(vectors.get_vector_length(v1), 0) # 10D vector v1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] self.assertAlmostEqual(vectors.get_vector_length(v1), 19.6214169) # default: places=7 # 1D vector v1 = [2] self.assertEqual(vectors.get_vector_length(v1), 2) # a vector with small entries v1 = [0.0000001, 0.0000002, 0.0000003] self.assertAlmostEqual(vectors.get_vector_length(v1), 0.000000374165739, places=15) # a vector with large entries v1 = [100, 200, 300] self.assertAlmostEqual(vectors.get_vector_length(v1), 374.165738677394000) # default: places=7 # a real example borrowed from test_set_vector_length label = 'CNCC' pivot = 0 xyz = {'symbols': ('N', 'C', 'C', 'C', 'H', 'H', 'H', 'H', 'H', 'H', 'H', 'H', 'H'), 'isotopes': (14, 12, 12, 12, 1, 1, 1, 1, 1, 1, 1, 1, 1), 'coords': ((0.7419854952964929, -0.18588322859265055, -0.8060295165375653), (-0.38476668007897186, -0.8774643553523614, -0.1815530887172187), (-1.4977348513273125, 0.05995564693605262, 0.26652181022311233), (1.5633235727172392, 0.5360966415350092, 0.15477859056711452), (-0.04458112063725271, -1.4936027355391557, 0.6589418973690523), (-0.7986335015469359, -1.5715787743431335, -0.9219907626214912), (-2.348455608682208, -0.5210498432021002, 0.6375394558854425), (-1.8523669868240424, 0.6790455638159553, -0.5642494434208211), (-1.170505453235269, 0.7210016856743618, 1.0746899133307615), (2.4283037770451084, 0.9651590522064675, -0.36083882142892065), (1.945994527876002, -0.1322800197070601, 0.9328203647772167), (1.0178974719106297, 1.3595978302624294, 0.6250164549219148), (0.39953935748654607, 0.4610025363062083, -1.5156468543485933))} mol = ARCSpecies(label='CNCC', xyz=xyz).mol v1 = vectors.get_lp_vector(label, mol, xyz, pivot) # --> Returns a unit vector pointing from the pivotal (nitrogen) atom towards its lone electron pairs orbital. self.assertAlmostEqual(vectors.get_vector_length(v1), 1)