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()
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")
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")
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 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
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