def energies_sites( self, sites_cart, geometry_flags=None, external_energy_function=None, custom_nonbonded_function=None, compute_gradients=False, gradients=None, force_restraints_model=False, disable_asu_cache=False, hd_selection=None, ): """ Compute energies for coordinates. Originally this just used the standard geometry restraints from the monomer library, but it has since been extended to optionally incorporate a variety of external energy functions. :returns: scitbx.restraints.energies object """ result = scitbx.restraints.energies( compute_gradients=compute_gradients, gradients=gradients, gradients_size=sites_cart.size(), gradients_factory=flex.vec3_double, normalization=self.normalization) if (self.geometry is None): result.geometry = None else: if (self.use_amber and not force_restraints_model): geometry_energy = self.geometry.energies_sites( sites_cart=sites_cart, flags=geometry_flags, external_energy_function=external_energy_function, custom_nonbonded_function=custom_nonbonded_function, compute_gradients=False, gradients=None, disable_asu_cache=disable_asu_cache, normalization=False) ################################################################## # # # AMBER CALL - Amber force field gradients and target # # # ################################################################## import amber_adaptbx amber_geometry_manager = amber_adaptbx.geometry_manager( sites_cart=sites_cart, number_of_restraints=geometry_energy.number_of_restraints, gradients_factory=flex.vec3_double, amber_structs=self.amber_structs) result.geometry = amber_geometry_manager.energies_sites( crystal_symmetry=self.geometry.crystal_symmetry, compute_gradients=compute_gradients) elif (self.use_afitt and len(sites_cart) == self.afitt_object.total_model_atoms): ################################################################## # # # AFITT CALL - OpenEye AFITT gradients and target # # # ################################################################## from mmtbx.geometry_restraints import afitt result.geometry = self.geometry.energies_sites( sites_cart=sites_cart, flags=geometry_flags, external_energy_function=external_energy_function, custom_nonbonded_function=custom_nonbonded_function, compute_gradients=compute_gradients, gradients=result.gradients, disable_asu_cache=disable_asu_cache, normalization=False, ) result = afitt.apply(result, self.afitt_object, sites_cart) result = afitt.adjust_energy_and_gradients( result, self, sites_cart, hd_selection, self.afitt_object, ) result.target = result.residual_sum result.afitt_energy = result.residual_sum else: result.geometry = self.geometry.energies_sites( sites_cart=sites_cart, flags=geometry_flags, external_energy_function=external_energy_function, custom_nonbonded_function=custom_nonbonded_function, compute_gradients=compute_gradients, gradients=result.gradients, disable_asu_cache=disable_asu_cache, normalization=False) result += result.geometry if (self.cartesian_ncs_manager is None): result.cartesian_ncs_manager = None else: result.cartesian_ncs_manager = self.cartesian_ncs_manager.energies_sites( sites_cart=sites_cart, compute_gradients=compute_gradients, gradients=result.gradients, normalization=False) result += result.cartesian_ncs_manager result.finalize_target_and_gradients() return result
def energies_sites(self, sites_cart, geometry_flags=None, external_energy_function=None, custom_nonbonded_function=None, compute_gradients=False, gradients=None, force_restraints_model=False, disable_asu_cache=False, hd_selection=None, ): """ Compute energies for coordinates. Originally this just used the standard geometry restraints from the monomer library, but it has since been extended to optionally incorporate a variety of external energy functions. :returns: scitbx.restraints.energies object """ result = scitbx.restraints.energies( compute_gradients=compute_gradients, gradients=gradients, gradients_size=sites_cart.size(), gradients_factory=flex.vec3_double, normalization=self.normalization) if (self.geometry is None): result.geometry = None else: if (self.use_amber and not force_restraints_model) : geometry_energy = self.geometry.energies_sites( sites_cart=sites_cart, flags=geometry_flags, external_energy_function=external_energy_function, custom_nonbonded_function=custom_nonbonded_function, compute_gradients=False, gradients=None, disable_asu_cache=disable_asu_cache, normalization=False) ################################################################## # # # AMBER CALL - Amber force field gradients and target # # # ################################################################## import amber_adaptbx amber_geometry_manager = amber_adaptbx.geometry_manager( sites_cart=sites_cart, number_of_restraints=geometry_energy.number_of_restraints, gradients_factory=flex.vec3_double, amber_structs=self.amber_structs) result.geometry = amber_geometry_manager.energies_sites( crystal_symmetry = self.geometry.crystal_symmetry, compute_gradients = compute_gradients) elif (self.use_afitt and len(sites_cart)==self.afitt_object.total_model_atoms ): ################################################################## # # # AFITT CALL - OpenEye AFITT gradients and target # # # ################################################################## from mmtbx.geometry_restraints import afitt result.geometry = self.geometry.energies_sites( sites_cart=sites_cart, flags=geometry_flags, external_energy_function=external_energy_function, custom_nonbonded_function=custom_nonbonded_function, compute_gradients=compute_gradients, gradients=result.gradients, disable_asu_cache=disable_asu_cache, normalization=False, ) result = afitt.apply(result, self.afitt_object, sites_cart) result = afitt.adjust_energy_and_gradients( result, self, sites_cart, hd_selection, self.afitt_object, ) result.target = result.residual_sum result.afitt_energy=result.residual_sum else : result.geometry = self.geometry.energies_sites( sites_cart=sites_cart, flags=geometry_flags, external_energy_function=external_energy_function, custom_nonbonded_function=custom_nonbonded_function, compute_gradients=compute_gradients, gradients=result.gradients, disable_asu_cache=disable_asu_cache, normalization=False) result += result.geometry if (self.ncs_groups is None): result.ncs_groups = None else: result.ncs_groups = self.ncs_groups.energies_sites( sites_cart=sites_cart, compute_gradients=compute_gradients, gradients=result.gradients, normalization=False) result += result.ncs_groups result.finalize_target_and_gradients() return result