def main( args ): wts = Weights( args.density_score_wt, args.overlap_score_wt, args.closab_score_wt, args.clash_score_wt ) scorefxn = ScoreFunction( args.density_scorefile, args.overlap_scorefile, args.nonoverlap_scorefile, wts, args.null_frag_score ) for model in range( args.nstruct ): pose = Pose() # empty pose pose.initialization( scorefxn._density_score_dict, args.initialization ) # default initialize by random pose.show_state( "initialization" ) temp = args.starting_temperature steps = args.steps_per_temp mc = MonteCarlo( scorefxn, temp ) trajectory_tracker_dict = {} while temp>=0 or anneal_temp==0: # it would never reach this criteria run_tag = "model_" + str( model ) + "_temp_" + str( temp ) mc.apply( pose, steps ) pose.show_state( run_tag ) #pose.dump_pickle( run_tag + ".pickle" ) trajectory_tracker_dict[ run_tag ] = pose anneal_temp = round( temp*args.cooling_rate, 1 ) temp -= anneal_temp if temp == mc.temperature(): break mc.set_temperature( temp ) pickle.dump( trajectory_tracker_dict, open( "model_" + str( model ) + ".pickle", "w" ) ) pose.show_state( "model_" + str( model ) + "_end", True ) # True for verbose
def run( self, runid ): ''' run id is a identification for a model to dump ''' self.__fragidx_pose.clear() self.__fragidx_pose.initialization( self._scorefxn.get_density_score_dict(), self._initialization ) # default initialize by random #print self.__fragidx_pose.show_state( "initialization" ) mc = MonteCarlo( self._scorefxn, self._temperature ) mc.apply( self.__fragidx_pose, self._steps ) # to prevent a silly bug that at the very first state SCORE==0, such that you wouldn't lower than that during high temperatures sampling self._lowest_score_pose = self.__fragidx_pose.clone() tracker = TrajectoryTracker( runid ) tag = "model_" + str( runid ) while self._temperature >=0 : # it would never reach this criteria if self._quench: self.recover_low() # retrieve the lowest-score pose from previous runs mc.apply( self.__fragidx_pose, self._steps ) residual_pose = self._scorefxn.residualize_pose() # residual_pose will be filled with #print residual_pose.show_state( tag + "_" + str( self._temperature ) ) self.set_annealing_temperature() # update self._temperature if self._temperature == mc.get_temperature(): break mc.set_temperature( self._temperature ) if self._record_trajectory: tracker.save( self._temperature, self.__fragidx_pose ) tracker.save( self._temperature, self._scorefxn.residualize_pose() ) tracker.dump_pickle( tag ) residual_pose.show_state( tag + "_final", True ) # True for verbose showing all residues states
def main( args ): print print_args( args ) wts = Weights( args.density_score_wt, args.overlap_score_wt, args.closab_score_wt, args.clash_score_wt ) scorefxn = ScoreFunction( args.density_scorefile, args.overlap_scorefile, args.nonoverlap_scorefile, wts, args.null_frag_score ) pose = Pose() # empty pose pose.initialization( scorefxn._density_score_dict ) # default initialize by random temp = args.temperature mc = MonteCarlo( scorefxn, temp ) for each_round in range( 1, args.round+1 ): mc.apply( pose, args.steps ) pose.show_state( temp ) temp -= round( temp*0.1, 2 ) if temp <= 0: break mc.set_temperature( temp ) pose.dump_pickle()