Exemple #1
0
    def __call__(self):
        self.center_of_mass_info()
        if self.reset_velocities:
            self.set_velocities()
            self.center_of_mass_info()

        self.non_solvent_vxyz = self.vxyz.select(~self.er_data.solvent_sel)
        self.non_solvent_weights = self.weights.select(
            ~self.er_data.solvent_sel)
        self.solvent_vxyz = self.vxyz.select(self.er_data.solvent_sel)
        self.solvent_weights = self.weights.select(self.er_data.solvent_sel)
        #
        self.non_solvent_kt = dynamics.kinetic_energy_and_temperature(
            self.non_solvent_vxyz, self.non_solvent_weights)
        self.solvent_kt = dynamics.kinetic_energy_and_temperature(
            self.solvent_vxyz, self.solvent_weights)
        self.kt = dynamics.kinetic_energy_and_temperature(
            self.vxyz, self.weights)

        if self.stop_cm_motion:
            self.stop_global_motion()

        self.velocity_rescaling()

        self.verlet_leapfrog_integration()
        if self.verbose >= 1.0:
            self.print_detailed_dynamics_stats()
 def verlet_leapfrog_integration(self):
     # start verlet_leapfrog_integration loop
     for cycle in range(1, self.n_steps + 1, 1):
         sites_cart = None
         if ([self.stop_at_diff, self.states_collector].count(None) != 2):
             sites_cart = self.xray_structure.sites_cart()
         if (self.stop_at_diff is not None):
             dist = flex.mean(
                 flex.sqrt((self.sites_cart_start - sites_cart).dot()))
             if (dist >= self.stop_at_diff): return
         accelerations = self.accelerations()
         print_flag = 0
         switch = math.modf(float(cycle) / self.n_print)[0]
         if ((switch == 0 or cycle == 1 or cycle == self.n_steps)
                 and self.verbose >= 1):
             print_flag = 1
         if (self.states_collector is not None):
             switch2 = math.modf(float(cycle) / self.n_collect)[0]
             if (switch2 == 0 or cycle == 1 or cycle == self.n_steps):
                 self.states_collector.add(sites_cart=sites_cart)
         if (print_flag == 1):
             text = "integration step number = %5d" % cycle
             self.center_of_mass_info()
             kt = dynamics.kinetic_energy_and_temperature(
                 self.vxyz, self.atomic_weights)
             self.current_temperature = kt.temperature
             self.ekin = kt.kinetic_energy
             self.print_dynamics_stat(text)
         if (self.stop_cm_motion):
             self.center_of_mass_info()
             self.stop_global_motion()
         # calculate velocities at t+dt/2
         dynamics.vxyz_at_t_plus_dt_over_2(self.vxyz, self.atomic_weights,
                                           accelerations, self.tstep)
         # calculate the temperature and kinetic energy from new velocities
         kt = dynamics.kinetic_energy_and_temperature(
             self.vxyz, self.atomic_weights)
         self.current_temperature = kt.temperature
         self.ekin = kt.kinetic_energy
         self.velocity_rescaling()
         if (print_flag == 1 and 0):
             self.center_of_mass_info()
             self.print_dynamics_stat(text)
         # do the verlet_leapfrog_integration to get coordinates at t+dt
         self.xray_structure.set_sites_cart(
             sites_cart=self.xray_structure.sites_cart() +
             self.vxyz * self.tstep)
         self.xray_structure.apply_symmetry_sites()
         # prevent explosions by doing very quick model geometry regularization
         if (self.interleaved_minimization and cycle == self.n_steps):
             self.run_interleaved_minimization()
         kt = dynamics.kinetic_energy_and_temperature(
             self.vxyz, self.atomic_weights)
         self.current_temperature = kt.temperature
         self.ekin = kt.kinetic_energy
         if (print_flag == 1 and 0):
             self.center_of_mass_info()
             self.print_dynamics_stat(text)
         self.accelerations()
 def verlet_leapfrog_integration(self):
   # start verlet_leapfrog_integration loop
   for cycle in range(1,self.n_steps+1,1):
     sites_cart = None
     if([self.stop_at_diff,self.states_collector].count(None) != 2):
       sites_cart = self.xray_structure.sites_cart()
     if(self.stop_at_diff is not None):
       dist = flex.mean(flex.sqrt((self.sites_cart_start - sites_cart).dot()))
       if(dist >= self.stop_at_diff): return
     accelerations = self.accelerations()
     print_flag = 0
     switch = math.modf(float(cycle)/self.n_print)[0]
     if((switch==0 or cycle==1 or cycle==self.n_steps) and self.verbose >= 1):
       print_flag = 1
     if(self.states_collector is not None):
       switch2 = math.modf(float(cycle)/self.n_collect)[0]
       if(switch2==0 or cycle==1 or cycle==self.n_steps):
         self.states_collector.add(sites_cart = sites_cart)
     if(print_flag == 1):
       text = "integration step number = %5d"%cycle
       self.center_of_mass_info()
       kt=dynamics.kinetic_energy_and_temperature(self.vxyz,self.atomic_weights)
       self.current_temperature = kt.temperature
       self.ekin = kt.kinetic_energy
       self.print_dynamics_stat(text)
     if(self.stop_cm_motion):
       self.center_of_mass_info()
       self.stop_global_motion()
     # calculate velocities at t+dt/2
     dynamics.vxyz_at_t_plus_dt_over_2(
       self.vxyz, self.atomic_weights, accelerations, self.tstep)
     # calculate the temperature and kinetic energy from new velocities
     kt=dynamics.kinetic_energy_and_temperature(self.vxyz,self.atomic_weights)
     self.current_temperature = kt.temperature
     self.ekin = kt.kinetic_energy
     self.velocity_rescaling()
     if(print_flag == 1 and 0):
       self.center_of_mass_info()
       self.print_dynamics_stat(text)
     # do the verlet_leapfrog_integration to get coordinates at t+dt
     self.xray_structure.set_sites_cart(
       sites_cart=self.xray_structure.sites_cart() + self.vxyz * self.tstep)
     self.xray_structure.apply_symmetry_sites()
     # prevent explosions by doing very quick model geometry regularization
     if(self.interleaved_minimization and cycle==self.n_steps):
       self.run_interleaved_minimization()
     kt=dynamics.kinetic_energy_and_temperature(self.vxyz,self.atomic_weights)
     self.current_temperature = kt.temperature
     self.ekin = kt.kinetic_energy
     if(print_flag == 1 and 0):
       self.center_of_mass_info()
       self.print_dynamics_stat(text)
     self.accelerations()
Exemple #4
0
    def verlet_leapfrog_integration(self):
        # start verlet_leapfrog_integration loop
        for self.cycle in range(1, self.n_steps + 1, 1):
            if (self.stop_at_diff is not None):
                diff = flex.mean(
                    self.structure_start.distances(other=self.structure))
                if (diff >= self.stop_at_diff): return
            accelerations = self.accelerations()
            if (self.stop_cm_motion):
                self.center_of_mass_info()
                self.stop_global_motion()

            # calculate velocities at t+dt/2
            dynamics.vxyz_at_t_plus_dt_over_2(self.vxyz, self.weights,
                                              accelerations, self.tstep)

            # calculate the temperature and kinetic energy from new velocities
            self.non_solvent_vxyz = self.vxyz.select(~self.er_data.solvent_sel)
            self.non_solvent_weights = self.weights.select(
                ~self.er_data.solvent_sel)
            self.solvent_vxyz = self.vxyz.select(self.er_data.solvent_sel)
            self.solvent_weights = self.weights.select(
                self.er_data.solvent_sel)
            #
            self.kt = dynamics.kinetic_energy_and_temperature(
                self.vxyz, self.weights)
            self.non_solvent_kt = dynamics.kinetic_energy_and_temperature(
                self.non_solvent_vxyz, self.non_solvent_weights)
            self.solvent_kt = dynamics.kinetic_energy_and_temperature(
                self.solvent_vxyz, self.solvent_weights)
            #Store sys, solvent, nonsolvet temperatures
            if self.er_data is not None:
                self.store_temperatures()
            self.velocity_rescaling()
            if self.verbose >= 1.0:
                print('Scale factor : ', self.v_factor, file=self.log)
                self.vxyz_length_sq = flex.sqrt(self.vxyz.dot())
                print('vxyz_length_sq pst scale', file=self.log)
                self.vxyz_length_sq.min_max_mean().show(out=self.log)
            # do the verlet_leapfrog_integration to get coordinates at t+dt
            self.structure.set_sites_cart(
                sites_cart=self.structure.sites_cart() +
                self.vxyz * self.tstep)
            self.structure.apply_symmetry_sites()
            if (self.interleaved_minimization_flag):
                self.interleaved_minimization()
            self.kt = dynamics.kinetic_energy_and_temperature(
                self.vxyz, self.weights)
            if (self.er_data is None):
                self.accelerations()
            else:
                self.er_data.velocities = self.vxyz
 def __call__(self):
     self.center_of_mass_info()
     #print "0:",self.temperature, self.current_temperature
     kt = dynamics.kinetic_energy_and_temperature(self.vxyz,
                                                  self.atomic_weights)
     self.current_temperature = kt.temperature
     #print "1:",self.temperature, self.current_temperature
     self.ekin = kt.kinetic_energy
     if (self.verbose >= 1):
         self.print_dynamics_stat(text="restrained dynamics start")
     if (self.reset_velocities):
         self.set_velocities()
         self.center_of_mass_info()
         kt = dynamics.kinetic_energy_and_temperature(
             self.vxyz, self.atomic_weights)
         self.current_temperature = kt.temperature
         self.ekin = kt.kinetic_energy
         if (self.verbose >= 1):
             self.print_dynamics_stat(text="set velocities")
     if (self.stop_cm_motion):
         self.stop_global_motion()
     self.center_of_mass_info()
     kt = dynamics.kinetic_energy_and_temperature(self.vxyz,
                                                  self.atomic_weights)
     self.current_temperature = kt.temperature
     self.ekin = kt.kinetic_energy
     if (self.verbose >= 1):
         self.print_dynamics_stat(text="center of mass motion removed")
     self.velocity_rescaling()
     self.center_of_mass_info()
     kt = dynamics.kinetic_energy_and_temperature(self.vxyz,
                                                  self.atomic_weights)
     self.current_temperature = kt.temperature
     #print "2:",self.temperature, self.current_temperature
     self.ekin = kt.kinetic_energy
     if (self.verbose >= 1):
         self.print_dynamics_stat(text="velocities rescaled")
     if (self.verbose >= 1):
         print("integration starts", file=self.log)
     self.verlet_leapfrog_integration()
     self.center_of_mass_info()
     kt = dynamics.kinetic_energy_and_temperature(self.vxyz,
                                                  self.atomic_weights)
     self.current_temperature = kt.temperature
     self.ekin = kt.kinetic_energy
     if (self.verbose >= 1):
         self.print_dynamics_stat(text="after final integration step")
Exemple #6
0
    def verlet_leapfrog_integration(self):
        # start verlet_leapfrog_integration loop
        for self.cycle in range(1, self.n_steps + 1, 1):
            if self.stop_at_diff is not None:
                diff = flex.mean(self.structure_start.distances(other=self.structure))
                if diff >= self.stop_at_diff:
                    return
            accelerations = self.accelerations()
            if self.stop_cm_motion:
                self.center_of_mass_info()
                self.stop_global_motion()

            # calculate velocities at t+dt/2
            dynamics.vxyz_at_t_plus_dt_over_2(self.vxyz, self.weights, accelerations, self.tstep)

            # calculate the temperature and kinetic energy from new velocities
            self.non_solvent_vxyz = self.vxyz.select(~self.er_data.solvent_sel)
            self.non_solvent_weights = self.weights.select(~self.er_data.solvent_sel)
            self.solvent_vxyz = self.vxyz.select(self.er_data.solvent_sel)
            self.solvent_weights = self.weights.select(self.er_data.solvent_sel)
            #
            self.kt = dynamics.kinetic_energy_and_temperature(self.vxyz, self.weights)
            self.non_solvent_kt = dynamics.kinetic_energy_and_temperature(
                self.non_solvent_vxyz, self.non_solvent_weights
            )
            self.solvent_kt = dynamics.kinetic_energy_and_temperature(self.solvent_vxyz, self.solvent_weights)
            # Store sys, solvent, nonsolvet temperatures
            if self.er_data is not None:
                self.store_temperatures()
            self.velocity_rescaling()
            if self.verbose >= 1.0:
                print >>self.log, "Scale factor : ", self.v_factor
                self.vxyz_length_sq = flex.sqrt(self.vxyz.dot())
                print >>self.log, "vxyz_length_sq pst scale"
                self.vxyz_length_sq.min_max_mean().show(out=self.log)
            # do the verlet_leapfrog_integration to get coordinates at t+dt
            self.structure.set_sites_cart(sites_cart=self.structure.sites_cart() + self.vxyz * self.tstep)
            self.structure.apply_symmetry_sites()
            if self.interleaved_minimization_flag:
                self.interleaved_minimization()
            self.kt = dynamics.kinetic_energy_and_temperature(self.vxyz, self.weights)
            if self.er_data is None:
                self.accelerations()
            else:
                self.er_data.velocities = self.vxyz
 def __call__(self):
   self.center_of_mass_info()
   #print "0:",self.temperature, self.current_temperature
   kt = dynamics.kinetic_energy_and_temperature(self.vxyz,self.atomic_weights)
   self.current_temperature = kt.temperature
   #print "1:",self.temperature, self.current_temperature
   self.ekin = kt.kinetic_energy
   if(self.verbose >= 1):
     self.print_dynamics_stat(text="restrained dynamics start")
   if(self.reset_velocities):
      self.set_velocities()
      self.center_of_mass_info()
      kt=dynamics.kinetic_energy_and_temperature(self.vxyz,self.atomic_weights)
      self.current_temperature = kt.temperature
      self.ekin = kt.kinetic_energy
      if(self.verbose >= 1):
        self.print_dynamics_stat(text="set velocities")
   if(self.stop_cm_motion):
     self.stop_global_motion()
   self.center_of_mass_info()
   kt = dynamics.kinetic_energy_and_temperature(self.vxyz,self.atomic_weights)
   self.current_temperature = kt.temperature
   self.ekin = kt.kinetic_energy
   if(self.verbose >= 1):
     self.print_dynamics_stat(text="center of mass motion removed")
   self.velocity_rescaling()
   self.center_of_mass_info()
   kt = dynamics.kinetic_energy_and_temperature(self.vxyz,self.atomic_weights)
   self.current_temperature = kt.temperature
   #print "2:",self.temperature, self.current_temperature
   self.ekin = kt.kinetic_energy
   if(self.verbose >= 1):
     self.print_dynamics_stat(text="velocities rescaled")
   if(self.verbose >= 1):
     print >> self.log, "integration starts"
   self.verlet_leapfrog_integration()
   self.center_of_mass_info()
   kt = dynamics.kinetic_energy_and_temperature(self.vxyz,self.atomic_weights)
   self.current_temperature = kt.temperature
   self.ekin = kt.kinetic_energy
   if(self.verbose >= 1):
     self.print_dynamics_stat(text="after final integration step")
Exemple #8
0
    def __call__(self):
        self.center_of_mass_info()
        if self.reset_velocities:
            self.set_velocities()
            self.center_of_mass_info()

        self.non_solvent_vxyz = self.vxyz.select(~self.er_data.solvent_sel)
        self.non_solvent_weights = self.weights.select(~self.er_data.solvent_sel)
        self.solvent_vxyz = self.vxyz.select(self.er_data.solvent_sel)
        self.solvent_weights = self.weights.select(self.er_data.solvent_sel)
        #
        self.non_solvent_kt = dynamics.kinetic_energy_and_temperature(self.non_solvent_vxyz, self.non_solvent_weights)
        self.solvent_kt = dynamics.kinetic_energy_and_temperature(self.solvent_vxyz, self.solvent_weights)
        self.kt = dynamics.kinetic_energy_and_temperature(self.vxyz, self.weights)

        if self.stop_cm_motion:
            self.stop_global_motion()

        self.velocity_rescaling()

        self.verlet_leapfrog_integration()
        if self.verbose >= 1.0:
            self.print_detailed_dynamics_stats()
Exemple #9
0
    def velocity_rescaling(self):
        if self.protein_thermostat and self.er_data is not None:
            if self.kt.temperature <= 1.0e-10:
                self.v_factor = 1.0
            else:
                self.v_factor = math.sqrt(self.temperature / self.non_solvent_kt.temperature)
        else:
            if self.kt.temperature <= 1.0e-10:
                self.v_factor = 1.0
            else:
                self.v_factor = math.sqrt(self.temperature / self.kt.temperature)

        self.vyz_vscale_remove = self.vxyz * (1.0 - self.v_factor)
        self.kt_vscale_remove = dynamics.kinetic_energy_and_temperature(self.vyz_vscale_remove, self.weights)
        self.vxyz = self.vxyz * self.v_factor
Exemple #10
0
    def velocity_rescaling(self):
        if self.protein_thermostat and self.er_data is not None:
            if (self.kt.temperature <= 1.e-10):
                self.v_factor = 1.0
            else:
                self.v_factor = math.sqrt(self.temperature /
                                          self.non_solvent_kt.temperature)
        else:
            if (self.kt.temperature <= 1.e-10):
                self.v_factor = 1.0
            else:
                self.v_factor = math.sqrt(self.temperature /
                                          self.kt.temperature)

        self.vyz_vscale_remove = self.vxyz * (1.0 - self.v_factor)
        self.kt_vscale_remove = dynamics.kinetic_energy_and_temperature(
            self.vyz_vscale_remove, self.weights)
        self.vxyz = self.vxyz * self.v_factor