Dear users, I am trying to do a parallel job for protein loop refinement by MODELLER9.17. I prepared the scripts as follows and provided all the input files in my working directory and I am running MODELLER through python2.7 (by typing: "python ModellerModelling.py" ). Although I encounter no error through the modeling process, but I doubt if I am doing a parallel job since when I check my workstation CPU usage, only one CPU is engaged (the usage percent does not exceed 100%). Could you please help me know what am I missing? Best regards,Sajjad
ModellerModeling.py: # --- UCSF Chimera Copyright --- # Copyright (c) 2000 Regents of the University of California. # All rights reserved. This software provided pursuant to a # license agreement containing restrictions on its disclosure, # duplication and use. This notice must be embedded in or # attached to all copies, including partial copies, of the # software or any revisions or derivations thereof. # --- UCSF Chimera Copyright ---
# This script is generated by the Modeller Dialog in Chimera, # incorporating the settings from the user interface. User can revise # this script and submit the modified one into the Advanced Option panel.
# Import the Modeller module from modeller import * from modeller.automodel import * from modeller.parallel import * from mymodel import MyModel log.minimal()
a.use_parallel_job(j) # Use the job for model building # Use 16 CPUs in a parallel job on this machine j = job() j.append(local_slave()) j.append(local_slave()) j.append(local_slave()) j.append(local_slave()) j.append(local_slave()) j.append(local_slave()) j.append(local_slave()) j.append(local_slave()) j.append(local_slave()) j.append(local_slave()) j.append(local_slave()) j.append(local_slave()) j.append(local_slave()) j.append(local_slave()) j.append(local_slave()) j.append(local_slave())
results = j.run_all_tasks()
print("Got model resolution: " + str(results))
mymodel.py:
from modeller import * from modeller.automodel import *
# ---------------------- namelist.dat -------------------------------- # A "namelist.dat" file contains the file names, which was output from # the Modeller dialog in Chimera based on user's selection. # The first line it the name of the target sequence, the remaining # lines are name of the template structures namelist = open( 'namelist.dat', 'r' ).read().split('\n') tarSeq = namelist[0] template = tuple( [ x.strip() for x in namelist[1:] if x != '' ] ) # ---------------------- namelist.dat --------------------------------
# This instructs Modeller to display all log output. log.verbose()
# create a new Modeller environment env = environ()
# Directory of atom/PDB/structure files. It is a relative path, inside # a temp folder generated by Chimera. User can modify it and add their # absolute path containing the structure files. env.io.atom_files_directory = ['.', './template_struc']
# Read in HETATM records from template PDBs env.io.hetatm = True
# Read in water molecules from template PDBs env.io.water = True
# create a subclass of automodel or loopmodel, MyModel. # user can further modify the MyModel class, to override certain routine. class MyModel(loopmodel): def select_loop_atoms(self): from modeller import selection return selection( self.residue_range('256', '309')) def select_atoms(self): from modeller import selection return selection( self.residue_range('256', '309'))
def customised_function(self): pass #code overrides the special_restraints method
#def special_restraints(self, aln):
#code overrides the special_patches method. # e.g. to include the addtional disulfides. #def special_patches(self, aln):
a = MyModel(env, sequence = tarSeq, # alignment file with template codes and target sequence alnfile = 'alignment.ali', # name of initial PDB template knowns = template[0])
# one fixed model to base loops on a.starting_model = 1 a.ending_model = 1
# 1 loop models loopRefinement = True a.loop.starting_model = 1 a.loop.ending_model = 1000 a.loop.assess_methods=(assess.DOPE, assess.GA341, assess.normalized_dope)
# Assesses the quality of models using # the DOPE (Discrete Optimized Protein Energy) method (Shen & Sali 2006) # and the GA341 method (Melo et al 2002, John & Sali 2003) a.assess_methods = (assess.GA341, assess.normalized_dope)
# ------------------------- build all models --------------------------
a.make()
# ---------- Accesing output data after modeling is complete ----------
# Get a list of all successfully built models from a.outputs if loopRefinement: ok_models = filter(lambda x: x['failure'] is None, a.loop.outputs) else: ok_models = filter(lambda x: x['failure'] is None, a.outputs)
# Rank the models by index number #key = 'num' #ok_models.sort(lambda a,b: cmp(a[key], b[key])) def numSort(a, b, key="num"): return cmp(a[key], b[key]) ok_models.sort(numSort)
# Output the list of ok_models to file ok_models.dat fMoutput = open('ok_models.dat', 'w') fMoutput.write('File name of aligned model\t GA341\t zDOPE \n')
for m in ok_models: results = '%s\t' % m['name'] results += '%.5f\t' % m['GA341 score'][0] results += '%.5f\n' % m['Normalized DOPE score'] fMoutput.write( results )
fMoutput.close()