Example #1
0
    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
Example #2
0
  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
Example #3
0
  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)