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
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