rosetta module
(c) Copyright Rosetta Commons Member Institutions. (c) This file is part of the Rosetta software suite and is made available under (c) license. (c) The Rosetta software is developed by the contributing members of the (c) Rosetta Commons. (c) For more information, see http://www.rosettacommons.org. (c) Questions about this can be addressed to University of Washington UW (c) TechTransfer, email: license@u.washington.edu.
# :noTabs=true: """ (c) Copyright Rosetta Commons Member Institutions. (c) This file is part of the Rosetta software suite and is made available under (c) license. (c) The Rosetta software is developed by the contributing members of the (c) Rosetta Commons. (c) For more information, see http://www.rosettacommons.org. (c) Questions about this can be addressed to University of Washington UW (c) TechTransfer, email: license@u.washington.edu. """ ############################################################################### # Imports. # Standard library. import os, sys, platform, os.path, json import logging logger = logging.getLogger("rosetta") # Rosetta import warnings warnings.filterwarnings("ignore", "to-Python converter for .+ already registered; second conversion method ignored.", RuntimeWarning, "^rosetta\\.") # bindings config # print __name__ # print sys.modules[__name__].__file__ #config = json.load( file( os.path.join( os.path.split(__file__)[0], 'config.json' ) ) ) #config = json.load( file( os.path.join( os.path.split(__file__)[0], 'config.json' ) ) ) #config = {"low_memory_mode": False, "protocols": False, "core": False, "basic": False, "numeric": False, "utility": True, 'monolith': True} #config = {"low_memory_mode": False, "protocols": False, "core": True, "basic": True, "numeric": True, "utility": True, 'monolith': True} config = {"low_memory_mode": False, "protocols": True, "core": True, "basic": True, "numeric": True, "utility": True, 'monolith': True} if '__file__' in vars(): config_file_name = os.path.join( os.path.split(__file__)[0], 'config.json' ) if os.path.isfile(config_file_name): config = json.load( file( config_file_name ) ) # import rosetta # print dir(rosetta) # print version # import version # import rosetta.version # from version import * # from rosetta.version import * # print 'version.url', version.url # print 'rosetta.version.url', rosetta.version.url # if config['monolith']: # import _rosetta_ as rosetta # from _rosetta_ import * # #for m in ['utility', 'numeric', 'basic', 'core', 'protocols']: # def add_modules(module, parent_name): # for a in dir(module): # if hasattr( getattr(module, a), '__package__'): # name = parent_name + '.' + a # #print 'adding:', name # sys.modules[name] = getattr(module, a) # add_modules(getattr(module, a), name) # add_modules(_rosetta_, __name__) #if config[m]: sys.modules[__name__+'.' + m] = eval(m) # emulate imports # # from rosetta.core.pose import Pose # # from rosetta.core.import_pose import pose_from_pdb # # from rosetta.core.io.pdb import dump_pdb # # from rosetta.core.pose import make_pose_from_sequence # # from rosetta.core.id import * # # from rosetta.core.conformation import * # # from rosetta.core.chemical import * # # from rosetta.core.scoring import * # # from rosetta.core.kinematics import * # # from rosetta.core.fragment import * # # from rosetta.core.pack.task import * # # from rosetta.core.pack.task.operation import * # # from rosetta.protocols.moves import * # # from rosetta.protocols.simple_moves import * # # from rosetta.protocols.abinitio import * # # from rosetta.protocols.docking import * # # from rosetta.protocols.loops import * # # from rosetta.protocols.relax import * # # from rosetta.protocols.simple_moves import * # # from rosetta.PyMolLink import * # Double-checked right order... import rosetta.utility import rosetta.utility.py import rosetta.utility.excn import rosetta.utility.file if config['monolith']: if config['basic']: import rosetta.basic.resource_manager import rosetta.basic.datacache if config['core']: import rosetta.core.scoring.func if config['low_memory_mode']: import rosetta.core.pose import rosetta.core.graph import rosetta.core.scoring.methods import rosetta.protocols.init from rosetta.core.pose import Pose from rosetta.core.scoring import * else: if config['numeric']: import rosetta.numeric import rosetta.numeric.geometry.hashing if config['basic']: import rosetta.basic import rosetta.basic.datacache import rosetta.basic.resource_manager if config['core']: import rosetta.core import rosetta.core.graph import rosetta.core.chemical import rosetta.core.chemical.orbitals import rosetta.core.scoring import rosetta.core.scoring.methods import rosetta.core.scoring.constraints import rosetta.core.scoring.etable import rosetta.core.kinematics import rosetta.core.io.silent import rosetta.core.pose import rosetta.core.graph import rosetta.core.conformation import rosetta.core.id import rosetta.core.io import rosetta.core.io.pdb import rosetta.core.fragment import rosetta.core.kinematics import rosetta.core.pack import rosetta.core.pack.task import rosetta.core.scoring.hbonds from rosetta.core.id import * from rosetta.core.conformation import * from rosetta.core.chemical import * from rosetta.core.pose import Pose from rosetta.core.import_pose import pose_from_pdb from rosetta.core.io.pdb import dump_pdb from rosetta.core.pose import make_pose_from_sequence import rosetta.core.pose from rosetta.core.scoring import * from rosetta.core.kinematics import * from rosetta.core.fragment import * from rosetta.core.pack.task import * from rosetta.core.pack.task.operation import * if config['protocols']: import rosetta.protocols import rosetta.protocols.moves import rosetta.protocols.canonical_sampling import rosetta.protocols.simple_moves import rosetta.protocols.jumping import rosetta.protocols.jd2 import rosetta.protocols.jd2.archive import rosetta.protocols.abinitio import rosetta.protocols.filters import rosetta.protocols.docking import rosetta.protocols.init import rosetta.protocols.loops import rosetta.protocols.wum import rosetta.protocols.relax import rosetta.core.pose.signals import rosetta.protocols.simple_moves from rosetta.protocols.moves import * from rosetta.protocols.simple_moves import * from rosetta.protocols.abinitio import * from rosetta.protocols.docking import * from rosetta.protocols.loops import * from rosetta.protocols.relax import * #from rosetta.protocols.rigid import * from rosetta.protocols.simple_moves import * # PyMOLMover and associated methods. if config['protocols']: from rosetta.PyMolLink import * import version if config['basic']: import rosetta.logging_support as logging_support ############################################################################### # Constants and globals __version__ = version.commit_id + ':' + version.commit # rosetta.core.minirosetta_svn_version() # Create global '_PLATFORM' that will hold info of current system. if sys.platform.startswith("linux"): _PLATFORM = "linux" # can be linux1, linux2, etc. elif sys.platform == "darwin": _PLATFORM = "macos" elif sys.platform == "cygwin": _PLATFORM = "cygwin" elif sys.platform == 'win32': _PLATFORM = 'windows' else: _PLATFORM = "_unknown_" #PlatformBits = platform.architecture()[0][:2] # unused? _python_py_exit_callback = None ############################################################################### #Exception handling. class PyRosettaException(Exception): #def __init__(self): pass def __str__(self): return 'PyRosettaException' class PythonPyExitCallback(rosetta.utility.py.PyExitCallback): def __init__(self): rosetta.utility.py.PyExitCallback.__init__(self) def exit_callback(self): raise PyRosettaException() ############################################################################### # def rosetta_database_from_env(): """Read rosetta database directory from environment or standard install locations. Returns database path if found, else None.""" # Figure out database dir.... if 'PYROSETTA_DATABASE' in os.environ: database = os.path.abspath(os.environ['PYROSETTA_DATABASE']) if os.path.isdir(database): logger.info('PYROSETTA_DATABASE environment variable was set to: %s; using it....', database) return database else: logger.warning('Invalid PYROSETTA_DATABASE environment variable was specified: %s', database) database_names = ["rosetta_database", "database"] for database_name in database_names: candidate_paths = [] #Current directory database candidate_paths.append(database_name) #Package directory database if '__file__' in vars(): candidate_paths.append(os.path.join(os.path.dirname(__file__), "..", database_name)) #Home directory database if 'HOME' in os.environ: candidate_paths.append(os.path.join(os.environ['HOME'], database_name)) #Cygwin root install if sys.platform == "cygwin": candidate_paths.append(os.path.join('/', database_name)) # Mac /usr/lib database install candidate_paths.append(os.path.join('rosetta', database_name)) for candidate in candidate_paths: if os.path.isdir(candidate): database = os.path.abspath(candidate) logger.info('Found rosetta database at: %s; using it....', database) return database # No database found. return None _ROSETTA_DATABASE_PATH_ = None def get_rosetta_database_path(): return _ROSETTA_DATABASE_PATH_ # rosetta.init() def init(options='-ex1 -ex2aro', extra_options='', set_logging_handler=True): import rosetta """Initialize Rosetta. Includes core data and global options. options string with default Rosetta command-line options args. (default: '-ex1 -ex2aro') kargs - extra_options - Extra command line options to pass rosetta init. (default None) set_logging_handler - Route rosetta tracing through logging logger 'rosetta'. (default True) Examples: init() # uses default flags init(extra_options='-pH') # adds flags to supplement the default init('-pH -database /home/me/pyrosetta/rosetta_database') # overrides default flags - be sure to include the dB last """ if config['basic']: logging_support.initialize_logging() #global _python_py_exit_callback _python_py_exit_callback = PythonPyExitCallback() rosetta.utility.py_xinc_ref(_python_py_exit_callback) rosetta.utility.py.PyExitCallback.set_PyExitCallBack(_python_py_exit_callback) #rosetta.utility.set_pyexit_callback() if set_logging_handler: logging_support.set_logging_handler() args = ['PyRosetta'] + options.split() + extra_options.split() # Attempt to resolve database location from environment if not present, else fallback # to rosetta's standard resolution if not "-database" in args: database = rosetta_database_from_env() if database is not None: args.extend(["-database", database]) _ROSETTA_DATABASE_PATH_ = database v = rosetta.utility.vector1_string() v.extend(args) logger.info(version()) if config['protocols']: rosetta.protocols.init.init(v) elif config['core']: import rosetta.core.init; rosetta.core.init.init(v) # MPI version of init function, use it instead of init(...) def mpi_init(*args, **kargs): from mpi4py import MPI comm = MPI.COMM_WORLD rank = comm.Get_rank() size = comm.Get_size() kargs['extra_options'] = kargs.get('extra_options', '') + ' -seed_offset %s' % (rank*10000) init(*args, **kargs) def MPIJobDistributor(njobs, fun): from mpi4py import MPI comm = MPI.COMM_WORLD rank = comm.Get_rank() size = comm.Get_size() myjobs = [] if rank == 0: jobs = range(njobs) jobs.extend( [None]*(size - njobs % size) ) n = len(jobs)/size for i in range(size): queue = [] # list of jobs for individual cpu for j in range(n): queue.append(jobs[j*size+i]) if( i == 0 ): myjobs = queue else: # now sending the queue to the process logger.info('Sending %s to node %s' % (queue, i) ) comm.send(queue, dest=i) else: # getting decoy lists myjobs = comm.recv(source=0) logger.info('Node %s, got queue:%s' % (rank, myjobs) ) for j in myjobs: if j is not None: fun(j) def version(): return "PyRosetta 2014 [Rosetta 2014 " + __version__ + \ "] retrieved from: %s" % rosetta.core.minirosetta_svn_url() + \ "\n(C) Copyright Rosetta Commons Member Institutions." + \ "\nCreated in JHU by Sergey Lyskov and PyRosetta Team.\n" ############################################################################### # Modifications to Rosetta. # Add iter property to Pose. def _Pose_residue_iterator(obj): def __pose_iter(): for i in range(obj.total_residue()): yield obj.residue(i + 1) return __pose_iter() if config['core']: Pose.__iter__ = _Pose_residue_iterator ''' # Add get() method to Pose (for compatibility with Rosetta Mover containers). def _get(self): """ Returns the Pose itself. The entire purpose of this method is so that custom Movers in PyRosetta do not crash when apply(pose) is called from within Mover containers (such as TrialMover, RepeatMover, etc.) When these C++ Movers call the apply() method of the custom PyRosetta Mover, they send a PoseAP, which Python can- not handle without converting to a raw pointer with get(). The addition of this get() method to Pose allows for one to always use get() in the apply() method of the custom Mover without concern for whether the apply() was called from within Python code or C++ code. """ return self ''' Pose.get = lambda x: x # Vector compatibility. def _extend_func(vec, othervec): for i in othervec: vec.append(i) def _add_extend(vectype): vectype.extend = _extend_func for k, v in rosetta.utility.__dict__.items(): if k.startswith("vector1_"): _add_extend(v) def new_vector1_init(self, arg1=None, arg2=False): self.__old_init() if hasattr(arg1, "__iter__"): self.extend(arg1) elif isinstance(arg1, type(1)): for i in xrange(arg1): self.append(arg2) def replace_init(cls, init): cls.__old_init = cls.__init__ cls.__init__ = init def Vector1(list_in): """Creates a Vector1 object, deducing type from the given list.""" if all([isinstance(x, bool) for x in list_in]): t = rosetta.utility.vector1_bool elif all([isinstance(x, int) for x in list_in]): t = rosetta.utility.vector1_int elif all([isinstance(x, float) or isinstance(x, int) for x in list_in]): t = rosetta.utility.vector1_double elif all([isinstance(x, str) for x in list_in]): t = rosetta.utility.vector1_string elif all([isinstance(x, rosetta.core.id.AtomID) for x in list_in]): t = rosetta.utility.vector1_AtomID else: raise Exception('Vector1: attemting to create vector of unknow type ' + 'or mixed type vector init_list = ' + str(list_in)) v = t() for i in list_in: v.append(i) return v def Set(list_in): """Creates a Vector1 object, deducing type from the given list.""" if all([isinstance(x, int) for x in list_in]): t = rosetta.utility.set_int elif all([isinstance(x, float) or isinstance(x, int) for x in list_in]): t = rosetta.utility.set_double elif all([isinstance(x, str) for x in list_in]): t = rosetta.utility.set_string else: raise Exception('Set: attemting to create vector of unknow type ' + 'or mixed type vector init_list = ' + str(list_in)) s = t() for i in list_in: s.add(i) return s # New methods. def generate_nonstandard_residue_set(params_list): """ Generates a ResidueTypeSet from a list of .params filenames. .params files must be generated beforehand. Typically, one would obtain a molfile (.mdl) generated from the xyz coordinates of a residue, small molecule, or ion. The script molfile_to_params.py can be used to convert to a Rosetta-readable .params file. It can be found in the /test/tools folder of your PyRosetta installation or downloaded from the Rosetta Commons. Example: params = ["penicillin.params", "amoxicillin.params"] type_set = generate_nonstandard_residue_set(params) pose = pose_from_pdb(type_set, "TEM-1_with_substrates.pdb") See also: ResidueTypeSet Vector1() pose_from_pdb() """ res_set = ChemicalManager.get_instance().nonconst_residue_type_set("fa_standard") # res_set.read_files(Vector1(params_list), # ChemicalManager.get_instance().atom_type_set("fa_standard"), # ChemicalManager.get_instance().element_set('default'), # ChemicalManager.get_instance().mm_atom_type_set("fa_standard"), # ChemicalManager.get_instance().orbital_type_set("fa_standard"),) res_set.read_files(Vector1(params_list)) return res_set def standard_task_factory(): tf = TaskFactory() tf.push_back(InitializeFromCommandline()) #tf.push_back(IncludeCurrent()) tf.push_back(NoRepackDisulfides()) return tf def standard_packer_task(pose): tf = standard_task_factory() task = tf.create_task_and_apply_taskoperations(pose) return task def add_extra_options(): rosetta.protocols.abinitio.AbrelaxApplication.register_options() rosetta.protocols.abinitio.IterativeAbrelax.register_options() rosetta.protocols.abinitio.register_options_broker() def pose_from_sequence(seq, res_type="fa_standard", auto_termini=True): """ Returns a pose generated from a single-letter sequence of amino acid residues in <seq> using the <res_type> ResidueType and creates N- and C- termini if <auto_termini> is set to True. Unlike make_pose_from_sequence(), this method generates a default PDBInfo and sets all torsion angles to 180 degrees. Example: pose = pose_from_sequence("THANKSEVAN") See also: Pose make_pose_from_sequence() pose_from_pdb() pose_from_rcsb() """ pose = Pose() make_pose_from_sequence(pose, seq, res_type, auto_termini) #print 'Setting phi, psi, omega...' for i in range(0, pose.total_residue()): pose.set_phi(i + 1, 180) pose.set_psi(i + 1, 180) pose.set_omega(i + 1, 180) #print 'Attaching PDBInfo...' # Empty PDBInfo (rosetta.core.pose.PDBInfo()) is not correct here; # we have to reserve space for atoms.... pose.pdb_info(rosetta.core.pose.PDBInfo(pose)) pose.pdb_info().name(seq[:8]) #print pose return pose # By Michael Pacella def etable_atom_pair_energies(atom1, atom2, sfxn): """ Usage: lj_atr, lj_rep, solv=etable_atom_pair_energies(atom1, atom2, sfxn) Description: given a pair of atoms and scorefunction, use the precomputed 'etable' to return LJ attractive, LJ repulsive, and LK solvation energies """ score_manager = rosetta.core.scoring.ScoringManager.get_instance() etable_ptr = score_manager.etable( sfxn.energy_method_options().etable_type() ) etable = etable_ptr.get() etable_energy = rosetta.core.scoring.etable.AnalyticEtableEnergy(etable, sfxn.energy_method_options()) # Construct AtomPairEnergy container to hold computed energies. ape = rosetta.core.scoring.etable.AtomPairEnergy() # Set all energies in the AtomPairEnergy to zero prior to calculation. ape.attractive, ape.bead_bead_interaction, ape.repulsive, ape.solvation = \ 0.0, 0.0, 0.0, 0.0 # Calculate the distance squared and set it in the AtomPairEnergy. ape.distance_squared = atom1.xyz().distance_squared(atom2.xyz()) # Evaluate energies from pre-calculated etable, using a weight of 1.0 # in order to match the raw energies from eval_ci_2b. etable_energy.atom_pair_energy(atom1, atom2, 1.0, ape) # Calculate atom-atom scores. lj_atr = ape.attractive lj_rep = ape.repulsive solv = ape.solvation return lj_atr, lj_rep, solv def output_scorefile(pose, pdb_name, current_name, scorefilepath, \ scorefxn, nstruct, native_pose=None, additional_decoy_info=None): """ Moved from PyJobDistributor (Jared Adolf-Bryfogle) Creates a scorefile if none exists, or appends the current one. Calculates and writes CA_rmsd if native pose is given, as well as any additional decoy info """ if not os.path.exists(scorefilepath): with open(scorefilepath, 'w') as f: f.write("pdb name: " + pdb_name + " nstruct: " + str(nstruct) + '\n') score = scorefxn(pose) # Calculates total score. score_line = pose.energies().total_energies().weighted_string_of(scorefxn.weights()) output_line = "filename: " + current_name + " total_score: " + str(round(score, 2)) # Calculates rmsd if native pose is defined. if native_pose: rmsd = CA_rmsd(native_pose, pose) output_line = output_line + " rmsd: " + str(round(rmsd, 2)) with open(scorefilepath, 'a') as f: if additional_decoy_info: f.write(output_line + ' ' + score_line + ' '+additional_decoy_info + '\n') else: f.write(output_line + ' ' + score_line + '\n') # New classes. class PyJobDistributor: def __init__(self, pdb_name, nstruct, scorefxn): self.pdb_name = pdb_name self.nstruct = nstruct self.current_num = 0 # Current decoy number self.current_name = " " # Current decoy name self.job_complete = False # Job status self.scorefxn = scorefxn # Used for final score calculation self.native_pose = None # Used for rmsd calculation self.additional_decoy_info = None # Used for any additional decoy # information you want stored self.start_decoy() # Initializes the job distributor def start_decoy(self): if self.job_complete: return i = 1 file_exists = True while (file_exists and i <= self.nstruct): current_name = self.pdb_name + "_" + str(i) + ".pdb" if not os.path.exists(current_name): current_name_temp = current_name + ".in_progress" if not os.path.exists(current_name_temp): file_exists = False # If such a file is not found, i is # the current decoy #. with open(current_name_temp, 'w') as f: f.write("This decoy is in progress.") self.current_name = current_name i += 1 self.current_num = i - 1 if file_exists: self.job_complete = True def output_decoy(self, pose): current_name_temp = self.current_name + ".in_progress" if not os.path.exists(current_name_temp): return dump_pdb(pose, self.current_name) # Outputs pdb file. os.remove(current_name_temp) score_tag = ".fasc" if not pose.is_fullatom(): score_tag = ".sc" scorefile = self.pdb_name + score_tag output_scorefile(pose, self.pdb_name, self.current_name, scorefile, self.scorefxn, \ self.nstruct, self.native_pose, self.additional_decoy_info) self.start_decoy() ############################################################################### # Decorator generation for custom PyRosetta energy methods. _mem_EnergyMethods_ = [] _mem_EnergyCreators_ = [] class CD: '''Class to represent named tuples.''' def __init__(self, **entries): self.__dict__.update(entries) def __repr__(self): r = '|' for i in dir(self): if not i.startswith('__'): r += '%s --> %s, ' % (i, getattr(self, i)) return r[:-2] + '|' if config['core']: _ScoreTypesRegistryByType_ = [ CD(base=rosetta.core.scoring.methods.ContextIndependentTwoBodyEnergy, first=rosetta.core.scoring.PyRosettaTwoBodyContextIndepenedentEnergy_first, last=rosetta.core.scoring.PyRosettaTwoBodyContextIndepenedentEnergy_last, methods={}), CD(base=rosetta.core.scoring.methods.ContextDependentTwoBodyEnergy, first=rosetta.core.scoring.PyRosettaTwoBodyContextDependentEnergy_first, last=rosetta.core.scoring.PyRosettaTwoBodyContextDependentEnergy_last, methods={}), CD(base=None, first=rosetta.core.scoring.PyRosettaEnergy_first, last=rosetta.core.scoring.PyRosettaEnergy_last, methods={}), ] ScoreTypesRegistry = {} def defineEnergyMethodCreator(class_, scoreType): class Abstract_EnergyMethodCreator( rosetta.core.scoring.methods.EnergyMethodCreator): def __init__(self): rosetta.core.scoring.methods.EnergyMethodCreator.__init__(self) def create_energy_method(self, energy_method_options): e = self.EnergyMethodClass() _mem_EnergyMethods_.append(e) return e def score_types_for_method(self): sts = rosetta.core.vector1_ScoreType() sts.append(self.scoreType) return sts class_name = class_.__name__ + '_Creator' new_class = type(class_name, (Abstract_EnergyMethodCreator,), {'EnergyMethodClass': class_, 'scoreType': rosetta.core.scoring.ScoreType(scoreType)}) #globals()[class_name ] = new_class return new_class class EnergyMethod: """ Decorator function for custom EnergyMethods in PyRosetta. """ def __init__(self, scoreName=None, scoreType=None, version=1): self.scoreName = scoreName self.scoreType = scoreType self.version = version def __call__(self, original_class): self.scoreName = self.scoreName or original_class.__name__ # Try to automatically determine first avaliable scoreType. if not self.scoreType: for s in _ScoreTypesRegistryByType_: if not s.base or issubclass(original_class, s.base): self.scoreType = max(s.methods.keys() or [s.first - 1]) + 1 if self.scoreType > s.last: err_msg = 'Cannot find free ScoreType to create %s! (looking in range [%s, %s])' % (self.scoreName, s.first, s.last) raise Exception(err_msg) s.methods[self.scoreType] = self.scoreName ScoreTypesRegistry[self.scoreType] = self.scoreName break def _clone(self): _mem_EnergyMethods_.append( self.__class__() ) return _mem_EnergyMethods_[-1] #return type(self)() def _f_version(self): return self.version def _indicate_required_context_graphs(self, v): pass creator = defineEnergyMethodCreator(original_class, self.scoreType) if 'clone' not in original_class.__dict__: original_class.clone = _clone if 'version' not in original_class.__dict__: original_class.version = _f_version if 'indicate_required_context_graphs' not in original_class.__dict__: original_class.indicate_required_context_graphs = _indicate_required_context_graphs original_class.creator = creator original_class.scoreType = rosetta.core.scoring.ScoreType(self.scoreType) _mem_EnergyCreators_.append( creator() ) rosetta.core.scoring.methods.PyEnergyMethodRegistrator(_mem_EnergyCreators_[-1]) return original_class
Module variables
var ScoreTypesRegistry
var X11_COLORS
var config
var config_file_name
var k
Functions
def MPIJobDistributor(
njobs, fun)
def MPIJobDistributor(njobs, fun): from mpi4py import MPI comm = MPI.COMM_WORLD rank = comm.Get_rank() size = comm.Get_size() myjobs = [] if rank == 0: jobs = range(njobs) jobs.extend( [None]*(size - njobs % size) ) n = len(jobs)/size for i in range(size): queue = [] # list of jobs for individual cpu for j in range(n): queue.append(jobs[j*size+i]) if( i == 0 ): myjobs = queue else: # now sending the queue to the process logger.info('Sending %s to node %s' % (queue, i) ) comm.send(queue, dest=i) else: # getting decoy lists myjobs = comm.recv(source=0) logger.info('Node %s, got queue:%s' % (rank, myjobs) ) for j in myjobs: if j is not None: fun(j)
def Set(
list_in)
Creates a Vector1 object, deducing type from the given list.
def Set(list_in): """Creates a Vector1 object, deducing type from the given list.""" if all([isinstance(x, int) for x in list_in]): t = rosetta.utility.set_int elif all([isinstance(x, float) or isinstance(x, int) for x in list_in]): t = rosetta.utility.set_double elif all([isinstance(x, str) for x in list_in]): t = rosetta.utility.set_string else: raise Exception('Set: attemting to create vector of unknow type ' + 'or mixed type vector init_list = ' + str(list_in)) s = t() for i in list_in: s.add(i) return s
def Vector1(
list_in)
Creates a Vector1 object, deducing type from the given list.
def Vector1(list_in): """Creates a Vector1 object, deducing type from the given list.""" if all([isinstance(x, bool) for x in list_in]): t = rosetta.utility.vector1_bool elif all([isinstance(x, int) for x in list_in]): t = rosetta.utility.vector1_int elif all([isinstance(x, float) or isinstance(x, int) for x in list_in]): t = rosetta.utility.vector1_double elif all([isinstance(x, str) for x in list_in]): t = rosetta.utility.vector1_string elif all([isinstance(x, rosetta.core.id.AtomID) for x in list_in]): t = rosetta.utility.vector1_AtomID else: raise Exception('Vector1: attemting to create vector of unknow type ' + 'or mixed type vector init_list = ' + str(list_in)) v = t() for i in list_in: v.append(i) return v
def add_extra_options(
)
def add_extra_options(): rosetta.protocols.abinitio.AbrelaxApplication.register_options() rosetta.protocols.abinitio.IterativeAbrelax.register_options() rosetta.protocols.abinitio.register_options_broker()
def defineEnergyMethodCreator(
class_, scoreType)
def defineEnergyMethodCreator(class_, scoreType): class Abstract_EnergyMethodCreator( rosetta.core.scoring.methods.EnergyMethodCreator): def __init__(self): rosetta.core.scoring.methods.EnergyMethodCreator.__init__(self) def create_energy_method(self, energy_method_options): e = self.EnergyMethodClass() _mem_EnergyMethods_.append(e) return e def score_types_for_method(self): sts = rosetta.core.vector1_ScoreType() sts.append(self.scoreType) return sts class_name = class_.__name__ + '_Creator' new_class = type(class_name, (Abstract_EnergyMethodCreator,), {'EnergyMethodClass': class_, 'scoreType': rosetta.core.scoring.ScoreType(scoreType)}) #globals()[class_name ] = new_class return new_class
def etable_atom_pair_energies(
atom1, atom2, sfxn)
Usage: lj_atr, lj_rep, solv=etable_atom_pair_energies(atom1, atom2, sfxn) Description: given a pair of atoms and scorefunction, use the precomputed 'etable' to return LJ attractive, LJ repulsive, and LK solvation energies
def etable_atom_pair_energies(atom1, atom2, sfxn): """ Usage: lj_atr, lj_rep, solv=etable_atom_pair_energies(atom1, atom2, sfxn) Description: given a pair of atoms and scorefunction, use the precomputed 'etable' to return LJ attractive, LJ repulsive, and LK solvation energies """ score_manager = rosetta.core.scoring.ScoringManager.get_instance() etable_ptr = score_manager.etable( sfxn.energy_method_options().etable_type() ) etable = etable_ptr.get() etable_energy = rosetta.core.scoring.etable.AnalyticEtableEnergy(etable, sfxn.energy_method_options()) # Construct AtomPairEnergy container to hold computed energies. ape = rosetta.core.scoring.etable.AtomPairEnergy() # Set all energies in the AtomPairEnergy to zero prior to calculation. ape.attractive, ape.bead_bead_interaction, ape.repulsive, ape.solvation = \ 0.0, 0.0, 0.0, 0.0 # Calculate the distance squared and set it in the AtomPairEnergy. ape.distance_squared = atom1.xyz().distance_squared(atom2.xyz()) # Evaluate energies from pre-calculated etable, using a weight of 1.0 # in order to match the raw energies from eval_ci_2b. etable_energy.atom_pair_energy(atom1, atom2, 1.0, ape) # Calculate atom-atom scores. lj_atr = ape.attractive lj_rep = ape.repulsive solv = ape.solvation return lj_atr, lj_rep, solv
def generate_nonstandard_residue_set(
params_list)
Generates a ResidueTypeSet from a list of .params filenames.
.params files must be generated beforehand. Typically, one would obtain a molfile (.mdl) generated from the xyz coordinates of a residue, small molecule, or ion. The script molfile_to_params.py can be used to convert to a Rosetta-readable .params file. It can be found in the /test/tools folder of your PyRosetta installation or downloaded from the Rosetta Commons.
Example: params = ["penicillin.params", "amoxicillin.params"] type_set = generate_nonstandard_residue_set(params) pose = pose_from_pdb(type_set, "TEM-1_with_substrates.pdb") See also: ResidueTypeSet Vector1() pose_from_pdb()
def generate_nonstandard_residue_set(params_list): """ Generates a ResidueTypeSet from a list of .params filenames. .params files must be generated beforehand. Typically, one would obtain a molfile (.mdl) generated from the xyz coordinates of a residue, small molecule, or ion. The script molfile_to_params.py can be used to convert to a Rosetta-readable .params file. It can be found in the /test/tools folder of your PyRosetta installation or downloaded from the Rosetta Commons. Example: params = ["penicillin.params", "amoxicillin.params"] type_set = generate_nonstandard_residue_set(params) pose = pose_from_pdb(type_set, "TEM-1_with_substrates.pdb") See also: ResidueTypeSet Vector1() pose_from_pdb() """ res_set = ChemicalManager.get_instance().nonconst_residue_type_set("fa_standard") # res_set.read_files(Vector1(params_list), # ChemicalManager.get_instance().atom_type_set("fa_standard"), # ChemicalManager.get_instance().element_set('default'), # ChemicalManager.get_instance().mm_atom_type_set("fa_standard"), # ChemicalManager.get_instance().orbital_type_set("fa_standard"),) res_set.read_files(Vector1(params_list)) return res_set
def get_rosetta_database_path(
)
def get_rosetta_database_path(): return _ROSETTA_DATABASE_PATH_
def init(
options='-ex1 -ex2aro', extra_options='', set_logging_handler=True)
def init(options='-ex1 -ex2aro', extra_options='', set_logging_handler=True): import rosetta """Initialize Rosetta. Includes core data and global options. options string with default Rosetta command-line options args. (default: '-ex1 -ex2aro') kargs - extra_options - Extra command line options to pass rosetta init. (default None) set_logging_handler - Route rosetta tracing through logging logger 'rosetta'. (default True) Examples: init() # uses default flags init(extra_options='-pH') # adds flags to supplement the default init('-pH -database /home/me/pyrosetta/rosetta_database') # overrides default flags - be sure to include the dB last """ if config['basic']: logging_support.initialize_logging() #global _python_py_exit_callback _python_py_exit_callback = PythonPyExitCallback() rosetta.utility.py_xinc_ref(_python_py_exit_callback) rosetta.utility.py.PyExitCallback.set_PyExitCallBack(_python_py_exit_callback) #rosetta.utility.set_pyexit_callback() if set_logging_handler: logging_support.set_logging_handler() args = ['PyRosetta'] + options.split() + extra_options.split() # Attempt to resolve database location from environment if not present, else fallback # to rosetta's standard resolution if not "-database" in args: database = rosetta_database_from_env() if database is not None: args.extend(["-database", database]) _ROSETTA_DATABASE_PATH_ = database v = rosetta.utility.vector1_string() v.extend(args) logger.info(version()) if config['protocols']: rosetta.protocols.init.init(v) elif config['core']: import rosetta.core.init; rosetta.core.init.init(v)
def mpi_init(
*args, **kargs)
def mpi_init(*args, **kargs): from mpi4py import MPI comm = MPI.COMM_WORLD rank = comm.Get_rank() size = comm.Get_size() kargs['extra_options'] = kargs.get('extra_options', '') + ' -seed_offset %s' % (rank*10000) init(*args, **kargs)
def new_vector1_init(
self, arg1=None, arg2=False)
def new_vector1_init(self, arg1=None, arg2=False): self.__old_init() if hasattr(arg1, "__iter__"): self.extend(arg1) elif isinstance(arg1, type(1)): for i in xrange(arg1): self.append(arg2)
def output_scorefile(
pose, pdb_name, current_name, scorefilepath, scorefxn, nstruct, native_pose=None, additional_decoy_info=None)
Moved from PyJobDistributor (Jared Adolf-Bryfogle) Creates a scorefile if none exists, or appends the current one. Calculates and writes CA_rmsd if native pose is given, as well as any additional decoy info
def output_scorefile(pose, pdb_name, current_name, scorefilepath, \ scorefxn, nstruct, native_pose=None, additional_decoy_info=None): """ Moved from PyJobDistributor (Jared Adolf-Bryfogle) Creates a scorefile if none exists, or appends the current one. Calculates and writes CA_rmsd if native pose is given, as well as any additional decoy info """ if not os.path.exists(scorefilepath): with open(scorefilepath, 'w') as f: f.write("pdb name: " + pdb_name + " nstruct: " + str(nstruct) + '\n') score = scorefxn(pose) # Calculates total score. score_line = pose.energies().total_energies().weighted_string_of(scorefxn.weights()) output_line = "filename: " + current_name + " total_score: " + str(round(score, 2)) # Calculates rmsd if native pose is defined. if native_pose: rmsd = CA_rmsd(native_pose, pose) output_line = output_line + " rmsd: " + str(round(rmsd, 2)) with open(scorefilepath, 'a') as f: if additional_decoy_info: f.write(output_line + ' ' + score_line + ' '+additional_decoy_info + '\n') else: f.write(output_line + ' ' + score_line + '\n')
def pose_from_sequence(
seq, res_type='fa_standard', auto_termini=True)
Returns a pose generated from a single-letter sequence of amino acid
residues in
Unlike make_pose_from_sequence(), this method generates a default PDBInfo and sets all torsion angles to 180 degrees.
Example: pose = pose_from_sequence("THANKSEVAN") See also: Pose make_pose_from_sequence() pose_from_pdb() pose_from_rcsb()
def pose_from_sequence(seq, res_type="fa_standard", auto_termini=True): """ Returns a pose generated from a single-letter sequence of amino acid residues in <seq> using the <res_type> ResidueType and creates N- and C- termini if <auto_termini> is set to True. Unlike make_pose_from_sequence(), this method generates a default PDBInfo and sets all torsion angles to 180 degrees. Example: pose = pose_from_sequence("THANKSEVAN") See also: Pose make_pose_from_sequence() pose_from_pdb() pose_from_rcsb() """ pose = Pose() make_pose_from_sequence(pose, seq, res_type, auto_termini) #print 'Setting phi, psi, omega...' for i in range(0, pose.total_residue()): pose.set_phi(i + 1, 180) pose.set_psi(i + 1, 180) pose.set_omega(i + 1, 180) #print 'Attaching PDBInfo...' # Empty PDBInfo (rosetta.core.pose.PDBInfo()) is not correct here; # we have to reserve space for atoms.... pose.pdb_info(rosetta.core.pose.PDBInfo(pose)) pose.pdb_info().name(seq[:8]) #print pose return pose
def replace_init(
cls, init)
def replace_init(cls, init): cls.__old_init = cls.__init__ cls.__init__ = init
def rosetta_database_from_env(
)
Read rosetta database directory from environment or standard install locations.
Returns database path if found, else None.
def rosetta_database_from_env(): """Read rosetta database directory from environment or standard install locations. Returns database path if found, else None.""" # Figure out database dir.... if 'PYROSETTA_DATABASE' in os.environ: database = os.path.abspath(os.environ['PYROSETTA_DATABASE']) if os.path.isdir(database): logger.info('PYROSETTA_DATABASE environment variable was set to: %s; using it....', database) return database else: logger.warning('Invalid PYROSETTA_DATABASE environment variable was specified: %s', database) database_names = ["rosetta_database", "database"] for database_name in database_names: candidate_paths = [] #Current directory database candidate_paths.append(database_name) #Package directory database if '__file__' in vars(): candidate_paths.append(os.path.join(os.path.dirname(__file__), "..", database_name)) #Home directory database if 'HOME' in os.environ: candidate_paths.append(os.path.join(os.environ['HOME'], database_name)) #Cygwin root install if sys.platform == "cygwin": candidate_paths.append(os.path.join('/', database_name)) # Mac /usr/lib database install candidate_paths.append(os.path.join('rosetta', database_name)) for candidate in candidate_paths: if os.path.isdir(candidate): database = os.path.abspath(candidate) logger.info('Found rosetta database at: %s; using it....', database) return database # No database found. return None
def standard_packer_task(
pose)
def standard_packer_task(pose): tf = standard_task_factory() task = tf.create_task_and_apply_taskoperations(pose) return task
def standard_task_factory(
)
def standard_task_factory(): tf = TaskFactory() tf.push_back(InitializeFromCommandline()) #tf.push_back(IncludeCurrent()) tf.push_back(NoRepackDisulfides()) return tf
def version(
)
def version(): return "PyRosetta 2014 [Rosetta 2014 " + __version__ + \ "] retrieved from: %s" % rosetta.core.minirosetta_svn_url() + \ "\n(C) Copyright Rosetta Commons Member Institutions." + \ "\nCreated in JHU by Sergey Lyskov and PyRosetta Team.\n"
Classes
class CD
Class to represent named tuples.
class CD: '''Class to represent named tuples.''' def __init__(self, **entries): self.__dict__.update(entries) def __repr__(self): r = '|' for i in dir(self): if not i.startswith('__'): r += '%s --> %s, ' % (i, getattr(self, i)) return r[:-2] + '|'
Ancestors (in MRO)
Methods
def __init__(
self, **entries)
def __init__(self, **entries): self.__dict__.update(entries)
class EnergyMethod
Decorator function for custom EnergyMethods in PyRosetta.
class EnergyMethod: """ Decorator function for custom EnergyMethods in PyRosetta. """ def __init__(self, scoreName=None, scoreType=None, version=1): self.scoreName = scoreName self.scoreType = scoreType self.version = version def __call__(self, original_class): self.scoreName = self.scoreName or original_class.__name__ # Try to automatically determine first avaliable scoreType. if not self.scoreType: for s in _ScoreTypesRegistryByType_: if not s.base or issubclass(original_class, s.base): self.scoreType = max(s.methods.keys() or [s.first - 1]) + 1 if self.scoreType > s.last: err_msg = 'Cannot find free ScoreType to create %s! (looking in range [%s, %s])' % (self.scoreName, s.first, s.last) raise Exception(err_msg) s.methods[self.scoreType] = self.scoreName ScoreTypesRegistry[self.scoreType] = self.scoreName break def _clone(self): _mem_EnergyMethods_.append( self.__class__() ) return _mem_EnergyMethods_[-1] #return type(self)() def _f_version(self): return self.version def _indicate_required_context_graphs(self, v): pass creator = defineEnergyMethodCreator(original_class, self.scoreType) if 'clone' not in original_class.__dict__: original_class.clone = _clone if 'version' not in original_class.__dict__: original_class.version = _f_version if 'indicate_required_context_graphs' not in original_class.__dict__: original_class.indicate_required_context_graphs = _indicate_required_context_graphs original_class.creator = creator original_class.scoreType = rosetta.core.scoring.ScoreType(self.scoreType) _mem_EnergyCreators_.append( creator() ) rosetta.core.scoring.methods.PyEnergyMethodRegistrator(_mem_EnergyCreators_[-1]) return original_class
Ancestors (in MRO)
Instance variables
var scoreName
var scoreType
var version
Methods
def __init__(
self, scoreName=None, scoreType=None, version=1)
def __init__(self, scoreName=None, scoreType=None, version=1): self.scoreName = scoreName self.scoreType = scoreType self.version = version
class PyJobDistributor
class PyJobDistributor: def __init__(self, pdb_name, nstruct, scorefxn): self.pdb_name = pdb_name self.nstruct = nstruct self.current_num = 0 # Current decoy number self.current_name = " " # Current decoy name self.job_complete = False # Job status self.scorefxn = scorefxn # Used for final score calculation self.native_pose = None # Used for rmsd calculation self.additional_decoy_info = None # Used for any additional decoy # information you want stored self.start_decoy() # Initializes the job distributor def start_decoy(self): if self.job_complete: return i = 1 file_exists = True while (file_exists and i <= self.nstruct): current_name = self.pdb_name + "_" + str(i) + ".pdb" if not os.path.exists(current_name): current_name_temp = current_name + ".in_progress" if not os.path.exists(current_name_temp): file_exists = False # If such a file is not found, i is # the current decoy #. with open(current_name_temp, 'w') as f: f.write("This decoy is in progress.") self.current_name = current_name i += 1 self.current_num = i - 1 if file_exists: self.job_complete = True def output_decoy(self, pose): current_name_temp = self.current_name + ".in_progress" if not os.path.exists(current_name_temp): return dump_pdb(pose, self.current_name) # Outputs pdb file. os.remove(current_name_temp) score_tag = ".fasc" if not pose.is_fullatom(): score_tag = ".sc" scorefile = self.pdb_name + score_tag output_scorefile(pose, self.pdb_name, self.current_name, scorefile, self.scorefxn, \ self.nstruct, self.native_pose, self.additional_decoy_info) self.start_decoy()
Ancestors (in MRO)
Instance variables
var additional_decoy_info
var current_name
var current_num
var job_complete
var native_pose
var nstruct
var pdb_name
var scorefxn
Methods
def __init__(
self, pdb_name, nstruct, scorefxn)
def __init__(self, pdb_name, nstruct, scorefxn): self.pdb_name = pdb_name self.nstruct = nstruct self.current_num = 0 # Current decoy number self.current_name = " " # Current decoy name self.job_complete = False # Job status self.scorefxn = scorefxn # Used for final score calculation self.native_pose = None # Used for rmsd calculation self.additional_decoy_info = None # Used for any additional decoy # information you want stored self.start_decoy() # Initializes the job distributor
def output_decoy(
self, pose)
def output_decoy(self, pose): current_name_temp = self.current_name + ".in_progress" if not os.path.exists(current_name_temp): return dump_pdb(pose, self.current_name) # Outputs pdb file. os.remove(current_name_temp) score_tag = ".fasc" if not pose.is_fullatom(): score_tag = ".sc" scorefile = self.pdb_name + score_tag output_scorefile(pose, self.pdb_name, self.current_name, scorefile, self.scorefxn, \ self.nstruct, self.native_pose, self.additional_decoy_info) self.start_decoy()
def start_decoy(
self)
def start_decoy(self): if self.job_complete: return i = 1 file_exists = True while (file_exists and i <= self.nstruct): current_name = self.pdb_name + "_" + str(i) + ".pdb" if not os.path.exists(current_name): current_name_temp = current_name + ".in_progress" if not os.path.exists(current_name_temp): file_exists = False # If such a file is not found, i is # the current decoy #. with open(current_name_temp, 'w') as f: f.write("This decoy is in progress.") self.current_name = current_name i += 1 self.current_num = i - 1 if file_exists: self.job_complete = True
class PyRosettaException
class PyRosettaException(Exception): #def __init__(self): pass def __str__(self): return 'PyRosettaException'
Ancestors (in MRO)
- PyRosettaException
- exceptions.Exception
- exceptions.BaseException
- __builtin__.object
Class variables
var args
var message
class PythonPyExitCallback
class PythonPyExitCallback(rosetta.utility.py.PyExitCallback): def __init__(self): rosetta.utility.py.PyExitCallback.__init__(self) def exit_callback(self): raise PyRosettaException()
Ancestors (in MRO)
- PythonPyExitCallback
- rosetta.utility.py._utility_py_.PyExitCallback
- Boost.Python.instance
- __builtin__.object
Methods
def __init__(
self)
Inheritance:
rosetta.utility.py._utility_py_.PyExitCallback
.rosetta.utility.py._utility_py_.PyExitCallback.__init__
init( (object)arg1) -> None :
C++ signature : void init(_object*)
def __init__(self): rosetta.utility.py.PyExitCallback.__init__(self)
def exit_callback(
self)
Inheritance:
rosetta.utility.py._utility_py_.PyExitCallback
.rosetta.utility.py._utility_py_.PyExitCallback.exit_callback
exit_callback( (PyExitCallback)arg1) -> None : utility/py/PyExitCallback.hh:36
C++ signature : void exit_callback(utility::py::PyExitCallback {lvalue})
exit_callback( (PyExitCallback)arg1) -> None :
C++ signature : void exit_callback(PyExitCallback_exposer_callback {lvalue})
def exit_callback(self): raise PyRosettaException()
Sub-modules
(c) Copyright Rosetta Commons Member Institutions. (c) This file is part of the Rosetta software suite and is made available (c) under license. (c) The Rosetta software is developed by the contributing members of the (c) Rosetta Commons. (c) For more information, see http://www.rosettacommons.org. (...