def main(): """Load the PDB file, make all Ala mutations and calculate dpKa for the target residues""" try: import sys pdbfile = sys.argv[1] target_residues = sys.argv[2] except: print print 'Usage: pKa_alascan.py <pdbfile> <target residues>' print 'Example: pKa_alascan.py 2lzt.pdb :0035:GLU,:0052:ASP' print 'This command will perform a full Alanine scan and report the effect of each mutation on the pKa values of Glu 35 and Asp 52' print 'If ALL is supplied instead of a list of target residues, then dpKas will be calculated for all residues' print raise Exception, 'Incorrect usage' # # Start the work # import Protool P = Protool.structureIO() P.readpdb(pdbfile) residues = P.residues.keys() residues.sort() # # All titgroups? # if target_residues == 'ALL': titgroups = P.get_titratable_groups() import string target_residues = string.join(titgroups, ',') # # Start looping # results = {} import pickle, os for residue in residues: # # Define result filename # resultfile = os.path.join(os.getcwd(), 'alascan_%s.result' % residue) if os.path.isfile(resultfile): fd = open(resultfile) results[residue] = pickle.load(fd) fd.close() else: if P.resname(residue) == 'ALA' or P.resname( residue) == 'GLY' or not P.isaa(residue): print 'Skipping', residue, P.resname(residue) continue print 'Calculating for residue', residue, P.resname(residue) recalc_intpka = 1 defaults = local_defaults(pdbfile, target_residues, recalc_intpka) # # Set the mutations # defaults['mutations'][0] = '%s:%s:%s' % (residue, P.resname(residue), 'ALA') import pKa.Design_pKa as Design_pKa # # Calculate the dpKas # solutions, pKd_dict = Design_pKa.run_opt(defaults) results[residue] = solutions.copy() # # Save this result # fd = open(resultfile, 'w') pickle.dump(results[residue], fd) fd.close() # # Save all # name = '%s.alascan.pickle' % pdbfile fd = open(name, 'w') import pickle pickle.dump(results, fd) fd.close()
def main(): """Load the PDB file, make all Ala mutations and calculate dpKa for the target residues""" try: import sys pdbfile=sys.argv[1] target_residues=sys.argv[2] except: print print 'Usage: pKa_alascan.py <pdbfile> <target residues>' print 'Example: pKa_alascan.py 2lzt.pdb :0035:GLU,:0052:ASP' print 'This command will perform a full Alanine scan and report the effect of each mutation on the pKa values of Glu 35 and Asp 52' print 'If ALL is supplied instead of a list of target residues, then dpKas will be calculated for all residues' print raise Exception,'Incorrect usage' # # Start the work # import Protool P=Protool.structureIO() P.readpdb(pdbfile) residues=P.residues.keys() residues.sort() # # All titgroups? # if target_residues=='ALL': titgroups=P.get_titratable_groups() import string target_residues=string.join(titgroups,',') # # Start looping # results={} import pickle, os for residue in residues: # # Define result filename # resultfile=os.path.join(os.getcwd(),'alascan_%s.result' %residue) if os.path.isfile(resultfile): fd=open(resultfile) results[residue]=pickle.load(fd) fd.close() else: if P.resname(residue)=='ALA' or P.resname(residue)=='GLY' or not P.isaa(residue): print 'Skipping',residue,P.resname(residue) continue print 'Calculating for residue',residue,P.resname(residue) recalc_intpka=1 defaults=local_defaults(pdbfile,target_residues,recalc_intpka) # # Set the mutations # defaults['mutations'][0]='%s:%s:%s' %(residue,P.resname(residue),'ALA') import pKa.Design_pKa as Design_pKa # # Calculate the dpKas # solutions,pKd_dict=Design_pKa.run_opt(defaults) results[residue]=solutions.copy() # # Save this result # fd=open(resultfile,'w') pickle.dump(results[residue],fd) fd.close() # # Save all # name='%s.alascan.pickle' %pdbfile fd=open(name,'w') import pickle pickle.dump(results,fd) fd.close()
def main(options,args): """Load the PDB file and the list of mutations""" import sys pdbfile=args[0] target_residues=options.target_groups # # Load the PDB file # import Protool P=Protool.structureIO() P.readpdb(pdbfile) residues=P.residues.keys() residues.sort() if not options.allmutations: # # Load the mutations # mutfile=args[1] fd=open(mutfile) mutlines=fd.readlines() fd.close() else: mutlines=[] aas=P.trueaminoacids.keys() aas.sort() count=1 for residue in residues: for aa in aas: if aa==P.resname(residue): continue mutlines.append('clone%d,%s:%s:%s' %(count,residue,P.resname(residue),aa)) count=count+1 print 'Created %d mutant proteins each containing 1 mutation' %len(mutlines) # # Make the resultdir # import os resultdir=os.path.join(os.getcwd(),'pKa_mutscan_results') if not os.path.isdir(resultdir): os.mkdir(resultdir) # # which target residues # if target_residues==[] or target_residues==['ALL']: target_residues=P.get_titratable_groups() import string target_residues=string.join(target_residues,',') results={} import pickle, os for mline in mutlines: import string if mline[0]=='#' or mline[:2]=='//': continue # line=string.strip(mline) sp_line=line.split(',') variant_name=sp_line[0] mutation=sp_line[1] print 'Variant: %s, mutations: %s' %(variant_name,mutation) if mutation.find('insert')!=-1: print 'Skipping insertions' continue # # Define result filename # resultfile=os.path.join(resultdir,'mutscan_%s.result' %variant_name) if os.path.isfile(resultfile): fd=open(resultfile) results[variant_name]=pickle.load(fd) fd.close() #print 'Already did',mutation else: recalc_intpka=1 defaults=local_defaults(pdbfile,target_residues,recalc_intpka) # # Set the mutations # import string defaults['mutations'][0]=string.strip(mutation) print 'Calculating for',mutation import pKa.Design_pKa as Design_pKa # # Set other parameters # defaults['ion'][0]=options.ion # # Calculate the dpKas # #try: solutions=Design_pKa.run_opt(defaults) #except Exception,inst: # if str(inst).find('Cannot model mutant')!=-1: # solutions='Cannot model mutant' # raise Exception('Cannot model mutant') # elif str(inst).find('We cannot model insertions')!=-1: # solutions='Skipping insertions' # else: # print inst # raise Exception(str(inst)) print print print 'Results are ',solutions results[variant_name]=solutions # # Save this result # print 'Saving',results[variant_name],'in',resultfile import os if len(os.path.split(resultfile)[1])>80: continue fd=open(resultfile,'w') pickle.dump(results[variant_name],fd) print '*********************' fd.close() # # Save all # name=os.path.join(os.getcwd(),'%s.mutscan.pickle' %pdbfile) fd=open(name,'w') import pickle pickle.dump(results,fd) fd.close()