def __init__(self, sites_cart, unit_cell=None, bond_proxies=None, nonbonded_proxies=None, nonbonded_function=None, angle_proxies=None, dihedral_proxies=None, reference_coordinate_proxies=None, reference_dihedral_manager=None, ncs_dihedral_manager=None, den_manager=None, chirality_proxies=None, planarity_proxies=None, parallelity_proxies=None, bond_similarity_proxies=None, ramachandran_manager=None, external_energy_function=None, compute_gradients=True, gradients=None, disable_asu_cache=False, normalization=False, extension_objects=[]): # runsnaked away... #adopt_init_args(self, locals()) #for local in sorted(locals()): # print " self.%(local)s=%(local)s" % locals() #assert 0 # self.angle_proxies=angle_proxies self.bond_proxies=bond_proxies self.bond_similarity_proxies=bond_similarity_proxies self.chirality_proxies=chirality_proxies self.compute_gradients=compute_gradients self.den_manager=den_manager self.dihedral_proxies=dihedral_proxies self.disable_asu_cache=disable_asu_cache self.extension_objects=extension_objects self.external_energy_function=external_energy_function self.gradients=gradients self.ncs_dihedral_manager=ncs_dihedral_manager self.nonbonded_function=nonbonded_function self.nonbonded_proxies=nonbonded_proxies self.normalization=normalization self.parallelity_proxies=parallelity_proxies self.planarity_proxies=planarity_proxies self.ramachandran_manager=ramachandran_manager self.reference_coordinate_proxies=reference_coordinate_proxies self.reference_dihedral_manager=reference_dihedral_manager self.sites_cart=sites_cart self.unit_cell=unit_cell # scitbx.restraints.energies.__init__(self, compute_gradients=compute_gradients, gradients=gradients, gradients_size=sites_cart.size(), gradients_factory=flex.vec3_double, normalization=normalization) self.n_dihedral_restraints = None self.dihedral_restraints_residual_sum = 0 if (nonbonded_proxies is not None): assert nonbonded_function is not None if (compute_gradients): if (self.gradients is None): self.gradients = flex.vec3_double(sites_cart.size(), [0,0,0]) else: assert self.gradients.size() == sites_cart.size() if (bond_proxies is None): self.n_bond_proxies = None self.bond_residual_sum = 0 else: self.n_bond_proxies = bond_proxies.n_total() self.bond_residual_sum = geometry_restraints.bond_residual_sum( sites_cart=sites_cart, sorted_asu_proxies=bond_proxies, gradient_array=self.gradients, disable_cache=disable_asu_cache) self.number_of_restraints += self.n_bond_proxies self.residual_sum += self.bond_residual_sum if (nonbonded_proxies is None): self.n_nonbonded_proxies = None self.nonbonded_residual_sum = 0 else: self.n_nonbonded_proxies = nonbonded_proxies.n_total() self.nonbonded_residual_sum = geometry_restraints.nonbonded_residual_sum( sites_cart=sites_cart, sorted_asu_proxies=nonbonded_proxies, gradient_array=self.gradients, function=nonbonded_function, disable_cache=False) self.number_of_restraints += self.n_nonbonded_proxies self.residual_sum += self.nonbonded_residual_sum # ==================================================================== # Unit cell dependent # ==================================================================== # name, parameter, function to call for name, proxies, residual_sum_function in [ ("angle", angle_proxies, geometry_restraints.angle_residual_sum), ("dihedral",dihedral_proxies, geometry_restraints.dihedral_residual_sum), ("planarity", planarity_proxies, geometry_restraints.planarity_residual_sum), ("parallelity", parallelity_proxies, geometry_restraints.parallelity_residual_sum), ("bond_similarity", bond_similarity_proxies, geometry_restraints.bond_similarity_residual_sum)]: setattr(self, "n_%s_proxies" % name, None) setattr(self, "%s_residual_sum" % name, 0) if proxies is not None: n_proxies = proxies.size() # setattr(self, "n_%s_proxies" % name, proxies.size()) if unit_cell is None: res_sum = residual_sum_function( sites_cart=sites_cart, proxies=proxies, gradient_array=self.gradients) else: res_sum = residual_sum_function( unit_cell=unit_cell, sites_cart=sites_cart, proxies=proxies, gradient_array=self.gradients) self.number_of_restraints += n_proxies self.residual_sum += res_sum setattr(self, "n_%s_proxies" % name, n_proxies) setattr(self, "%s_residual_sum" % name, res_sum) # ==================================================================== # Managers # ==================================================================== for name, manager in [ ("reference_dihedral", reference_dihedral_manager), ("ncs_dihedral", ncs_dihedral_manager), ("den", den_manager), ("ramachandran", ramachandran_manager)]: setattr(self, "n_%s_proxies" % name, None) setattr(self, "%s_residual_sum" % name, 0) if manager is not None: n_proxies = manager.get_n_proxies() res_sum = manager.target_and_gradients( unit_cell=unit_cell, sites_cart=sites_cart, gradient_array=self.gradients) self.number_of_restraints += n_proxies self.residual_sum += res_sum setattr(self, "n_%s_proxies" % name, n_proxies) setattr(self, "%s_residual_sum" % name, res_sum) # ==================================================================== # The rest (not yet unified) # ==================================================================== if reference_coordinate_proxies is None: self.n_reference_coordinate_proxies = None self.reference_coordinate_residual_sum = 0 else: import boost.python ext = boost.python.import_ext("mmtbx_reference_coordinate_ext") self.n_reference_coordinate_proxies = reference_coordinate_proxies.size() self.reference_coordinate_residual_sum = \ ext.reference_coordinate_residual_sum( sites_cart=sites_cart, proxies=reference_coordinate_proxies, gradient_array=self.gradients) self.number_of_restraints += self.n_reference_coordinate_proxies self.residual_sum += self.reference_coordinate_residual_sum if (chirality_proxies is None): self.n_chirality_proxies = None self.chirality_residual_sum = 0 else: self.n_chirality_proxies = len(chirality_proxies) self.chirality_residual_sum = geometry_restraints.chirality_residual_sum( sites_cart=sites_cart, proxies=chirality_proxies, gradient_array=self.gradients) self.number_of_restraints += self.n_chirality_proxies self.residual_sum += self.chirality_residual_sum if (external_energy_function is not None) : self.external_energy = external_energy_function( sites_cart=sites_cart, gradient_array=self.gradients) self.residual_sum += self.external_energy else : self.external_energy = 0 for extension_obj in self.extension_objects: extension_obj.energies_add(energies_obj=self) self.finalize_target_and_gradients()
def __init__(self, sites_cart, unit_cell=None, bond_proxies=None, nonbonded_proxies=None, nonbonded_function=None, angle_proxies=None, dihedral_proxies=None, reference_coordinate_proxies=None, reference_dihedral_manager=None, ncs_dihedral_manager=None, den_manager=None, chirality_proxies=None, planarity_proxies=None, parallelity_proxies=None, bond_similarity_proxies=None, ramachandran_manager=None, external_energy_function=None, compute_gradients=True, gradients=None, disable_asu_cache=False, normalization=False, extension_objects=[]): # runsnaked away... #adopt_init_args(self, locals()) #for local in sorted(locals()): # print " self.%(local)s=%(local)s" % locals() #assert 0 # self.angle_proxies = angle_proxies self.bond_proxies = bond_proxies self.bond_similarity_proxies = bond_similarity_proxies self.chirality_proxies = chirality_proxies self.compute_gradients = compute_gradients self.den_manager = den_manager self.dihedral_proxies = dihedral_proxies self.disable_asu_cache = disable_asu_cache self.extension_objects = extension_objects self.external_energy_function = external_energy_function self.gradients = gradients self.ncs_dihedral_manager = ncs_dihedral_manager self.nonbonded_function = nonbonded_function self.nonbonded_proxies = nonbonded_proxies self.normalization = normalization self.parallelity_proxies = parallelity_proxies self.planarity_proxies = planarity_proxies self.ramachandran_manager = ramachandran_manager self.reference_coordinate_proxies = reference_coordinate_proxies self.reference_dihedral_manager = reference_dihedral_manager self.sites_cart = sites_cart self.unit_cell = unit_cell # scitbx.restraints.energies.__init__( self, compute_gradients=compute_gradients, gradients=gradients, gradients_size=sites_cart.size(), gradients_factory=flex.vec3_double, normalization=normalization) self.n_dihedral_restraints = None self.dihedral_restraints_residual_sum = 0 if (nonbonded_proxies is not None): assert nonbonded_function is not None if (compute_gradients): if (self.gradients is None): self.gradients = flex.vec3_double(sites_cart.size(), [0, 0, 0]) else: assert self.gradients.size() == sites_cart.size() if (bond_proxies is None): self.n_bond_proxies = None self.bond_residual_sum = 0 else: self.n_bond_proxies = bond_proxies.n_total() self.bond_residual_sum = geometry_restraints.bond_residual_sum( sites_cart=sites_cart, sorted_asu_proxies=bond_proxies, gradient_array=self.gradients, disable_cache=disable_asu_cache) self.number_of_restraints += self.n_bond_proxies self.residual_sum += self.bond_residual_sum if (nonbonded_proxies is None): self.n_nonbonded_proxies = None self.nonbonded_residual_sum = 0 else: self.n_nonbonded_proxies = nonbonded_proxies.n_total() self.nonbonded_residual_sum = geometry_restraints.nonbonded_residual_sum( sites_cart=sites_cart, sorted_asu_proxies=nonbonded_proxies, gradient_array=self.gradients, function=nonbonded_function, disable_cache=False) self.number_of_restraints += self.n_nonbonded_proxies self.residual_sum += self.nonbonded_residual_sum # ==================================================================== # Unit cell dependent # ==================================================================== # name, parameter, function to call for name, proxies, residual_sum_function in [ ("angle", angle_proxies, geometry_restraints.angle_residual_sum), ("dihedral", dihedral_proxies, geometry_restraints.dihedral_residual_sum), ("planarity", planarity_proxies, geometry_restraints.planarity_residual_sum), ("parallelity", parallelity_proxies, geometry_restraints.parallelity_residual_sum), ("bond_similarity", bond_similarity_proxies, geometry_restraints.bond_similarity_residual_sum) ]: setattr(self, "n_%s_proxies" % name, None) setattr(self, "%s_residual_sum" % name, 0) if proxies is not None: n_proxies = proxies.size() # setattr(self, "n_%s_proxies" % name, proxies.size()) if unit_cell is None: res_sum = residual_sum_function( sites_cart=sites_cart, proxies=proxies, gradient_array=self.gradients) else: res_sum = residual_sum_function( unit_cell=unit_cell, sites_cart=sites_cart, proxies=proxies, gradient_array=self.gradients) self.number_of_restraints += n_proxies self.residual_sum += res_sum setattr(self, "n_%s_proxies" % name, n_proxies) setattr(self, "%s_residual_sum" % name, res_sum) # ==================================================================== # Managers # ==================================================================== for name, manager in [("reference_dihedral", reference_dihedral_manager), ("ncs_dihedral", ncs_dihedral_manager), ("den", den_manager), ("ramachandran", ramachandran_manager)]: setattr(self, "n_%s_proxies" % name, None) setattr(self, "%s_residual_sum" % name, 0) if manager is not None: n_proxies = manager.get_n_proxies() res_sum = manager.target_and_gradients( unit_cell=unit_cell, sites_cart=sites_cart, gradient_array=self.gradients) self.number_of_restraints += n_proxies self.residual_sum += res_sum setattr(self, "n_%s_proxies" % name, n_proxies) setattr(self, "%s_residual_sum" % name, res_sum) # ==================================================================== # The rest (not yet unified) # ==================================================================== if reference_coordinate_proxies is None: self.n_reference_coordinate_proxies = None self.reference_coordinate_residual_sum = 0 else: import boost.python ext = boost.python.import_ext("mmtbx_reference_coordinate_ext") self.n_reference_coordinate_proxies = reference_coordinate_proxies.size( ) self.reference_coordinate_residual_sum = \ ext.reference_coordinate_residual_sum( sites_cart=sites_cart, proxies=reference_coordinate_proxies, gradient_array=self.gradients) self.number_of_restraints += self.n_reference_coordinate_proxies self.residual_sum += self.reference_coordinate_residual_sum if (chirality_proxies is None): self.n_chirality_proxies = None self.chirality_residual_sum = 0 else: self.n_chirality_proxies = len(chirality_proxies) self.chirality_residual_sum = geometry_restraints.chirality_residual_sum( sites_cart=sites_cart, proxies=chirality_proxies, gradient_array=self.gradients) self.number_of_restraints += self.n_chirality_proxies self.residual_sum += self.chirality_residual_sum if (external_energy_function is not None): self.external_energy = external_energy_function( sites_cart=sites_cart, gradient_array=self.gradients) self.residual_sum += self.external_energy else: self.external_energy = 0 for extension_obj in self.extension_objects: extension_obj.energies_add(energies_obj=self) self.finalize_target_and_gradients()