def test_scores(self): carbon = dataset_pb2.BondTopology.AtomType.ATOM_C single_bond = dataset_pb2.BondTopology.BondType.BOND_SINGLE double_bond = dataset_pb2.BondTopology.BondType.BOND_DOUBLE # For testing, turn off the need for complete matching. smu_molecule.default_must_match_all_bonds = False all_distributions = bond_length_distribution.AllAtomPairLengthDistributions( ) x, y = triangular_distribution(1.0, 1.4, 2.0) df = pd.DataFrame({"length": x, "count": y}) bldc1c = bond_length_distribution.EmpiricalLengthDistribution(df, 0.0) all_distributions.add(carbon, carbon, single_bond, bldc1c) x, y = triangular_distribution(1.0, 1.5, 2.0) df = pd.DataFrame({"length": x, "count": y}) bldc2c = bond_length_distribution.EmpiricalLengthDistribution(df, 0.0) all_distributions.add(carbon, carbon, double_bond, bldc2c) bond_topology = text_format.Parse( """ atoms: ATOM_C atoms: ATOM_C bonds: { atom_a: 0 atom_b: 1 bond_type: BOND_SINGLE } """, dataset_pb2.BondTopology()) geometry = text_format.Parse( """ atom_positions { x: 0.0 y: 0.0 z: 0.0 }, atom_positions { x: 0.0 y: 0.0 z: 0.0 } """, dataset_pb2.Geometry()) geometry.atom_positions[1].x = 1.4 / smu_utils_lib.BOHR_TO_ANGSTROMS matching_parameters = smu_molecule.MatchingParameters() matching_parameters.must_match_all_bonds = False result = topology_from_geom.bond_topologies_from_geom( all_distributions, bond_topology, geometry, matching_parameters) self.assertIsNotNone(result) self.assertEqual(len(result.bond_topology), 2) self.assertEqual(len(result.bond_topology[0].bonds), 1) self.assertEqual(len(result.bond_topology[1].bonds), 1) self.assertGreater(result.bond_topology[0].score, result.bond_topology[1].score) self.assertEqual(result.bond_topology[0].bonds[0].bond_type, single_bond) self.assertEqual(result.bond_topology[1].bonds[0].bond_type, double_bond)
def zero2(): """Return a Geometry with two points at the origin.""" return text_format.Parse( """ atom_positions: { x:0.0, y:0.0, z:0.0 }, atom_positions: { x:0.0, y:0.0, z:0.0 } """, dataset_pb2.Geometry())
def geom_to_angstroms(geometry): """Convert all the coordinates in `geometry` to Angstroms. Args: geometry: starting Geometry Returns New Geometry with adjusted coordinates. Returns: Coordinates in Angstroms. """ result = dataset_pb2.Geometry() for atom in geometry.atom_positions: new_atom = dataset_pb2.Geometry.AtomPos() new_atom.x = smu_utils_lib.bohr_to_angstroms(atom.x) new_atom.y = smu_utils_lib.bohr_to_angstroms(atom.y) new_atom.z = smu_utils_lib.bohr_to_angstroms(atom.z) result.atom_positions.append(new_atom) return result
def test_scores(self): carbon = dataset_pb2.BondTopology.ATOM_C single_bond = dataset_pb2.BondTopology.BondType.BOND_SINGLE double_bond = dataset_pb2.BondTopology.BondType.BOND_DOUBLE # For testing, turn off the need for complete matching. topology_molecule.default_must_match_all_bonds = False all_distributions = bond_length_distribution.AllAtomPairLengthDistributions( ) bldc1c = triangular_distribution(1.0, 1.4, 2.0) all_distributions.add(carbon, carbon, single_bond, bldc1c) bldc2c = triangular_distribution(1.0, 1.5, 2.0) all_distributions.add(carbon, carbon, double_bond, bldc2c) molecule = dataset_pb2.Molecule() molecule.bond_topologies.append( text_format.Parse( """ atoms: ATOM_C atoms: ATOM_C bonds: { atom_a: 0 atom_b: 1 bond_type: BOND_SINGLE } """, dataset_pb2.BondTopology())) molecule.optimized_geometry.MergeFrom( text_format.Parse( """ atom_positions { x: 0.0 y: 0.0 z: 0.0 }, atom_positions { x: 0.0 y: 0.0 z: 0.0 } """, dataset_pb2.Geometry())) molecule.optimized_geometry.atom_positions[1].x = ( 1.4 / smu_utils_lib.BOHR_TO_ANGSTROMS) matching_parameters = topology_molecule.MatchingParameters() matching_parameters.must_match_all_bonds = False molecule.properties.errors.fate = dataset_pb2.Properties.FATE_SUCCESS molecule.molecule_id = 1001 result = topology_from_geom.bond_topologies_from_geom( molecule, all_distributions, matching_parameters) self.assertIsNotNone(result) self.assertLen(result.bond_topology, 2) self.assertLen(result.bond_topology[0].bonds, 1) self.assertLen(result.bond_topology[1].bonds, 1) self.assertEqual(result.bond_topology[0].bonds[0].bond_type, single_bond) self.assertEqual(result.bond_topology[1].bonds[0].bond_type, double_bond) self.assertGreater(result.bond_topology[0].topology_score, result.bond_topology[1].topology_score) self.assertAlmostEqual( np.sum(np.exp([bt.topology_score for bt in result.bond_topology])), 1.0) self.assertAlmostEqual(result.bond_topology[0].geometry_score, np.log(bldc1c.pdf(1.4))) self.assertAlmostEqual(result.bond_topology[1].geometry_score, np.log(bldc2c.pdf(1.4)))