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 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('../')
#!/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]))