def main(): parser = argparse.ArgumentParser() parser.add_argument('-mode', default='select_memb') parser.add_argument('-in_file', default=sys.argv[1]) parser.add_argument('-name', default=None) args = vars(parser.parse_args()) if args['mode'] == 'select_memb_old': # load pdb pdb = parse_PDB(args['in_file'], args['name']) res_in_memb = pymol_select_memb_old(pdb) print('select membrane_residues, resi %s' % '+'.join([str(a) for a in res_in_memb])) elif args['mode'] == 'print_num_memb_old': pdb = parse_PDB(args['in_file'], args['name']) res_in_memb = pymol_select_memb_old(pdb) print('num_in_memb %i' % len(res_in_memb)) elif args['mode'] == 'select_memb': pdb = parse_PDB(args['in_file'], args['name']) memb_ress = memb_residues(pdb) print('select membrane_residues, resi %s' % '+'.join([str(r.res_num) for r in memb_ress])) else: print('no mode selected')
def by_two_numbers(): from mpl_toolkits.mplot3d import axes3d from PDB_Bfactor_by_list import repalce_Bfactor from MyPDB import parse_PDB by_6A = parse_atom_count(work_path+'6A.lst') by_12A = parse_atom_count(work_path+'12A.lst') results = {} slope6, intercept6 = 0.05, 30 slope12, intercept12 = 0.05, 350 for k, v6 in by_6A.items(): results[k] = sigmoid(v6, slope6, intercept6) * sigmoid(by_12A[k], intercept12, intercept12) print(k, v6, by_12A[k], results[k]) pdb = parse_PDB('3o7q.pdb') repalce_Bfactor(pdb, results, {'pdb': '3o7q.pdb', 'list': '6x12sigs.lst'}) fig = plt.figure() ax = fig.add_subplot(111, projection='3d') x = np.arange(0, 400, 1) y = np.arange(0, 400, 1) X, Y = np.meshgrid(x, y) zs = np.array([sigmoid(x, slope=slope6, intercept=intercept6)* sigmoid(y, slope=slope12, intercept=intercept12) for x, y in zip(np.ravel(X), np.ravel(Y))]) Z = zs.reshape(X.shape) ax.plot_surface(X, Y, Z) ax.set_xlabel('6A') ax.set_ylabel('12A') ax.set_zlabel('energy') plt.show()
def Bfactor_by_list(args): pdb = parse_PDB(args['pdb']) resnum_occupancy_dict = parse_Bfactor_list(args['list']) file_name = args['pdb'].split('.pdb')[0] + '_' + args['list'].split( '.')[0] + '.pdb' repalce_Bfactor(pdb, resnum_occupancy_dict, args, new_name=file_name)
def main(): pdb = parse_PDB(sys.argv[1]) for name, xyz in zip(['B', 'C', 'X'], [XYZ(7.5, 0, 0), XYZ(0, 7.5, 0), XYZ(7.5, 7.5, 7.5)]): new_chain = copy.deepcopy(pdb.chains['A']) new_chain.change_chain_name(name) new_chain.translate_xyz(xyz) pdb.add_chain(new_chain) pdb.renumber() write_PDB('test.pdb', pdb)
def main(): pdb_file = sys.argv[1] pdb = parse_PDB(pdb_file) energy_table = parse_energy_table(pdb_file) polyval = MakeHydrophobicityGrade() for res in pdb.iter_all_res(): cnt_6 = pdb.count_atoms_near_res(res, 6) cnt_12 = pdb.count_atoms_near_res(res, 12) print(res, burial_sigmoid(cnt_6, cnt_12))
def Bfactor_by_z(args): pdb = parse_PDB(args['pdb']) z_Bfactor_dict = {} for rsd in pdb.iter_all_res(): if -15 <= rsd['CA'].xyz.z <= 15: z_Bfactor_dict[rsd.res_num] = 50 else: z_Bfactor_dict[rsd.res_num] = 0 new_file = args['pdb'].split('.pdb')[0] + '_z.pdb' repalce_Bfactor(pdb, z_Bfactor_dict, args, new_file)
def setup_db(args): rost_db = parse_rost_db() failed = [] logger = Logger('./db_setup.log') for k, v in rost_db.items(): # if k != 'q9u6b8': continue logger.create_header('working on %s' % k) logger.log('seq: %s' % v['seq']) logger.log('pdb: %s' % v['pdb']) logger.log('chain: %s' % v['chain']) logger.log('ts: %s' % v['ts']) os.mkdir(k) os.chdir(k) # get pdb and extract chain download_pdb({'name': v['pdb'], 'path': './'}) empty_pdb = MyPDB(name=v['pdb']) pdb = parse_PDB('pdb%s.ent' % v['pdb']) chain = pdb.chains[v['chain']] empty_pdb.add_chain(chain) write_PDB('%s_%s.pdb' % (k, v['chain']), empty_pdb) pdb_seq = extract_seq(empty_pdb) rdb_seq = AASeq(v['seq']) score, start, end = pdb_seq[v['chain']].align(rdb_seq) logger.log('pdb seq: %s' % pdb_seq[v['chain']].aligned) logger.log('rst seq: %s' % rdb_seq.aligned) # get spans and print xml spans = find_topo(v['ts']) new_spans = [] for sp in spans: start = pdb_seq[v['chain']].aligned_position_at_non_aligned( sp[0]) + 1 end = pdb_seq[v['chain']].aligned_position_at_non_aligned( sp[1]) + 1 logger.log('span %i->%i %s moving to %i->%i' % (sp[0], sp[1], sp[2], start, end)) new_spans.append([start, end, sp[2]]) create_AddMembrane_xml(new_spans, '%s_AddMembrane.xml' % v['pdb']) # create flags file with open('embed.flags', 'w+') as fout: fout.write( '-parser:protocol /home/labs/fleishman/jonathaw/elazaridis/protocols/embed_in_membrane.xml\n' ) fout.write('-s %s\n' % '%s_%s.pdb' % (k, v['chain'])) fout.write('-parser:script_vars add_memb_xml=%s\n' % '%s_AddMembrane.xml' % v['pdb']) fout.write('-overwrite\n') fout.write('-score::elec_memb_sig_die\n') fout.write('-corrections::beta_nov15\n') fout.write('-score::memb_fa_sol\n') os.chdir('../')
def main(): pdb = parse_PDB(sys.argv[1]) for name, xyz in zip( ['B', 'C', 'X'], [XYZ(7.5, 0, 0), XYZ(0, 7.5, 0), XYZ(7.5, 7.5, 7.5)]): new_chain = copy.deepcopy(pdb.chains['A']) new_chain.change_chain_name(name) new_chain.translate_xyz(xyz) pdb.add_chain(new_chain) pdb.renumber() write_PDB('test.pdb', pdb)
def setup_db(args): rost_db = parse_rost_db() failed = [] logger = Logger('./db_setup.log') for k, v in rost_db.items(): # if k != 'q9u6b8': continue logger.create_header('working on %s' % k) logger.log('seq: %s' % v['seq']) logger.log('pdb: %s' % v['pdb']) logger.log('chain: %s' % v['chain']) logger.log('ts: %s' % v['ts']) os.mkdir(k) os.chdir(k) # get pdb and extract chain download_pdb({'name': v['pdb'], 'path': './'}) empty_pdb = MyPDB(name=v['pdb']) pdb = parse_PDB('pdb%s.ent' % v['pdb']) chain = pdb.chains[v['chain']] empty_pdb.add_chain(chain) write_PDB('%s_%s.pdb' % (k, v['chain']), empty_pdb) pdb_seq = extract_seq(empty_pdb) rdb_seq = AASeq(v['seq']) score, start, end = pdb_seq[v['chain']].align(rdb_seq) logger.log('pdb seq: %s' % pdb_seq[v['chain']].aligned) logger.log('rst seq: %s' % rdb_seq.aligned) # get spans and print xml spans = find_topo(v['ts']) new_spans = [] for sp in spans: start = pdb_seq[v['chain']].aligned_position_at_non_aligned(sp[0]) + 1 end = pdb_seq[v['chain']].aligned_position_at_non_aligned(sp[1]) + 1 logger.log('span %i->%i %s moving to %i->%i' %(sp[0], sp[1], sp[2], start, end)) new_spans.append([start, end, sp[2]]) create_AddMembrane_xml(new_spans, '%s_AddMembrane.xml' % v['pdb']) # create flags file with open('embed.flags', 'w+') as fout: fout.write('-parser:protocol /home/labs/fleishman/jonathaw/elazaridis/protocols/embed_in_membrane.xml\n') fout.write('-s %s\n' % '%s_%s.pdb' % (k, v['chain'])) fout.write('-parser:script_vars add_memb_xml=%s\n' % '%s_AddMembrane.xml' % v['pdb']) fout.write('-overwrite\n') fout.write('-score::elec_memb_sig_die\n') fout.write('-corrections::beta_nov15\n') fout.write('-score::memb_fa_sol\n') os.chdir('../')
def main(): global rosetta_splines rosetta_splines = calc_rosetta_splines() arg1 = sys.argv[1] if '.pdb' not in arg1: seq = arg1 ori = sys.argv[2] dg = calc_seq_dg(seq, ori, rosetta_splines) print('%s %s %.2f' % (seq, ori, dg)) else: pdb = parse_PDB(arg1) spans = find_spans_pdb(pdb) for span in spans: dg = calc_span_dg(pdb, span[0], span[1], rosetta_splines) print('span %i->%i ∆G=%.2f' % (span[0], span[1], dg))
def main(): import matplotlib.pyplot as plt import mpl_toolkits.mplot3d as m3d parser = argparse.ArgumentParser() parser.add_argument('-pdb') parser.add_argument('-s1', type=int) parser.add_argument('-e1', type=int) parser.add_argument('-s2', type=int) parser.add_argument('-e2', type=int) args = vars(parser.parse_args()) pdb = parse_PDB(args['pdb']) l1, data1 = find_helix_vector(pdb, args['s1'], args['e1']) l2, data2 = find_helix_vector(pdb, args['s2'], args['e2']) p1, p2 = find_points_of_closest_distance(l1, l2) cross_angle = calc_dihedral(l1[0], p1, p2, l2[0]) dist = np.linalg.norm(p1-p2) print('cross angle', cross_angle) print('dist', dist)
def test_input(args): if args['seq'] is None: pdb = parse_PDB(args['native_pdb']) seq_dict = pdb.get_seq() args['seq'] = seq_dict[args['chain']] if args['topo_string'] is None: args['topo_string'] = 'H' * len(args['seq']) args['logger'].log('NO TOPO-STRING GIVEN, using helix only, creating file') with open('%s.ts' % args['name'], 'w+') as fout: fout.write('>%s\n' % args['name']) fout.write('%s' % args['topo_string']) args['logger'].log('NO SEQ GIVEN, using %s, %i AAs' % (args['seq'], len(args['seq']))) ok = len(args['seq']) == len(args['topo_string']) if args['mode'] == 'fnd': args['xml'] = fnd_protocol elif args['mode'] == 'design': args['xml'] = design_protocol else: sys.exit('mode was neither design nor fnd...') if not ok: sys.exit('sequence and topo string not same length')
def by_two_numbers(): from mpl_toolkits.mplot3d import axes3d from PDB_Bfactor_by_list import repalce_Bfactor from MyPDB import parse_PDB by_6A = parse_atom_count(work_path + '6A.lst') by_12A = parse_atom_count(work_path + '12A.lst') results = {} slope6, intercept6 = 0.05, 30 slope12, intercept12 = 0.05, 350 for k, v6 in by_6A.items(): results[k] = sigmoid(v6, slope6, intercept6) * sigmoid( by_12A[k], intercept12, intercept12) print(k, v6, by_12A[k], results[k]) pdb = parse_PDB('3o7q.pdb') repalce_Bfactor(pdb, results, {'pdb': '3o7q.pdb', 'list': '6x12sigs.lst'}) fig = plt.figure() ax = fig.add_subplot(111, projection='3d') x = np.arange(0, 400, 1) y = np.arange(0, 400, 1) X, Y = np.meshgrid(x, y) zs = np.array([ sigmoid(x, slope=slope6, intercept=intercept6) * sigmoid(y, slope=slope12, intercept=intercept12) for x, y in zip(np.ravel(X), np.ravel(Y)) ]) Z = zs.reshape(X.shape) ax.plot_surface(X, Y, Z) ax.set_xlabel('6A') ax.set_ylabel('12A') ax.set_zlabel('energy') plt.show()
#!/usr/bin/env python3.5 from MyPDB import parse_PDB, extract_seq import sys in_1 = sys.argv[1] in_2 = sys.argv[2] pdb_1 = parse_PDB(in_1, in_1.split('.')[0]) pdb_2 = parse_PDB(in_2, in_2.split('.')[0]) seqs_1 = extract_seq(pdb_1) seqs_2 = extract_seq(pdb_2) assert seqs_1.keys() == seqs_2.keys(), 'PDBs have different chain names' seq_1, seq_2 = '', '' for chain_name in sorted(seqs_1.keys()): seq_1 += seqs_1[chain_name].get_seq seq_2 += seqs_2[chain_name].get_seq assert len(seq_1) == len(seq_2), 'sequences not the same length' diffs = [] for i in range(len(seq_1)): if seq_1[i] != seq_2[i]: print('%s%i%s' % (seq_1[i], i+1, seq_2[i])) diffs.append(i+1) print('found %i changes, over %i chains' % (len(diffs), len(seqs_1.keys()))) print('select diffs, resi %s' % '+'.join([str(a) for a in diffs]))
#!/usr/bin/env python3.5 from MyPDB import parse_PDB, extract_seq import sys in_1 = sys.argv[1] in_2 = sys.argv[2] pdb_1 = parse_PDB(in_1, in_1.split('.')[0]) pdb_2 = parse_PDB(in_2, in_2.split('.')[0]) seqs_1 = extract_seq(pdb_1) seqs_2 = extract_seq(pdb_2) assert seqs_1.keys() == seqs_2.keys(), 'PDBs have different chain names' seq_1, seq_2 = '', '' for chain_name in sorted(seqs_1.keys()): seq_1 += seqs_1[chain_name].get_seq seq_2 += seqs_2[chain_name].get_seq assert len(seq_1) == len(seq_2), 'sequences not the same length' diffs = [] for i in range(len(seq_1)): if seq_1[i] != seq_2[i]: print('%s%i%s' % (seq_1[i], i + 1, seq_2[i])) diffs.append(i + 1) print('found %i changes, over %i chains' % (len(diffs), len(seqs_1.keys()))) print('select diffs, resi %s' % '+'.join([str(a) for a in diffs]))
#!/usr/bin/env python3.5 from MyPDB import parse_PDB from sys import argv name = argv[1] pdb = parse_PDB(file_in=name, name=name) seq = pdb.seqs if len(argv) > 2: chains = argv[2:] for c in chains: print('>%s.%s' % (name, c)) print(seq[c].get_seq) else: for c in sorted(seq.keys()): if 'non_res' not in c: print('>%s.%s' % (name, c)) print(seq[c].get_seq)