def setup_domains(self): # scale the temperature (necessary at high pulling speeds) if self.temperature: atoms = self.soup.atoms() anderson_velocity_scale(atoms, self.temperature, 3 * len(atoms)) # select the atoms from the domains definition selection = data.backbone_atoms if self.is_backbone_only else None self.atoms1 = get_atoms_of_residues(self.soup, self.domain1, selection) self.atoms2 = get_atoms_of_residues(self.soup, self.domain2, selection) # get direction vectors based on domains self.disp2to1 = pdbatoms.get_center(self.atoms1) \ - pdbatoms.get_center(self.atoms2) self.axis2to1 = v3.norm(self.disp2to1) # calculate relative velocities between domains self.vel2to1 = average_vel(self.atoms1) - average_vel(self.atoms2) self.axis_vel2to1 = v3.parallel(self.vel2to1, self.axis2to1) self.vel = v3.dot(self.axis_vel2to1, self.axis2to1) if self.is_first_domain_only: self.move_atoms = self.atoms1 else: self.move_atoms = self.atoms1 + self.atoms2
def setup_domains(self): # scale the temperature (necessary at high pulling speeds) if self.temperature: atoms = self.soup.atoms() anderson_velocity_scale(atoms, self.temperature, 3*len(atoms)) # select the atoms from the domains definition selection = ['CA'] if self.is_backbone_only else None self.atoms1 = get_atoms_of_residues(self.soup, self.domain1, selection) self.atoms2 = get_atoms_of_residues(self.soup, self.domain2, selection) # get direction vectors based on domains self.disp2to1 = pdbatoms.get_center(self.atoms1) \ - pdbatoms.get_center(self.atoms2) self.axis2to1 = v3.norm(self.disp2to1) # calculate relative velocities between domains self.vel2to1 = average_vel(self.atoms1) - average_vel(self.atoms2) self.axis_vel2to1 = v3.parallel(self.vel2to1, self.axis2to1) self.vel = v3.dot(self.axis_vel2to1, self.axis2to1) if self.is_first_domain_only: self.move_atoms = self.atoms1 else: self.move_atoms = self.atoms1 + self.atoms2
def change_vels(self): # calculate the vel diff vector self.old_kinetic_energy = kinetic_energy(self.move_atoms) vel_target = self.target_val*self.axis2to1 if self.is_first_domain_only: change_sets = [(self.atoms1, vel_target)] else: change_sets = [ (self.atoms1, 0.5*vel_target), (self.atoms2, -0.5*vel_target)] # now change velocities of movable atoms for move_atoms, vel_target in change_sets: for a in move_atoms: vel_axis = v3.parallel(a.vel, self.axis2to1) vel_diff = vel_target - vel_axis a.vel += vel_diff self.kinetic_energy = kinetic_energy(self.move_atoms)