def _process_results(self, results):
        assert len(results['states']) == 1
        jsonprops = results['states'][0]['calculated']
        if 'orbitals' in jsonprops:
            wfn = self._make_wfn(results['states'][0])
        else:
            wfn = None

        result = mdt.MolecularProperties(self.mol,
                                         **self._json_to_quantities(jsonprops))
        if wfn:
            result['wfn'] = wfn
        return result
예제 #2
0
def test_h2_calculation_caching(h2_harmonic):
    h2 = h2_harmonic
    h2.properties = mdt.MolecularProperties(h2)
    true_energy = h2.calc_potential_energy()
    assert 'potential_energy' in h2.properties
    assert 'forces' in h2.properties
    h2.potential_energy
    h2.forces
    h2.properties['potential_energy'] = 'banana'
    assert h2.potential_energy == h2.calc_potential_energy() == 'banana'
    props = h2.calculate()
    assert props.potential_energy == h2.potential_energy == h2.calc_potential_energy(
    ) == 'banana'
    props2 = h2.calculate(use_cache=False)
    assert props2.potential_energy == h2.potential_energy == true_energy
    assert h2.calc_potential_energy() == true_energy
    def calculate(self, requests):
        import openbabel as ob

        self.prep()
        for atom, pbatom in zip(self.mol.atoms, self._pbmol.atoms):
            pbatom.OBAtom.SetVector(*atom.position.value_in(u.angstrom))
        self._ff.SetCoordinates(self._pbmol.OBMol)
        energy = self._ff.Energy(True)
        self._ff.GetCoordinates(self._pbmol.OBMol)

        # http://forums.openbabel.org/Doing-an-energ-force-calculation-with-openbabel-td1590730.html
        data = ob.toConformerData(self._pbmol.OBMol.GetData(ob.ConformerData))
        force_iterator = data.GetForces()[0]

        forces = np.array([[f.GetX(), f.GetY(), f.GetZ()]
                           for f in force_iterator])
        forces[np.abs(forces) < 1e-30] = 0.0  # prevent underflows

        result = mdt.MolecularProperties(self.mol,
                                         potential_energy=energy * self._units,
                                         forces=forces * self._units /
                                         u.angstrom)
        return result
 def _process_results(self, results):
     assert len(results['states']) == 1
     jsonprops = results['states'][0]['calculated']
     result = mdt.MolecularProperties(self.mol,
                                      **self._get_properties(jsonprops))
     return result