Beispiel #1
0
def find_spans_pdb(pdb: MyPDB) -> list:
    memb_vec = []
    for res in pdb.iter_all_res():
        memb_vec.append( res.memb_z is not None )

    spans = []
    chain, start, end, ori = pdb.get_res(1).chain, -1, -1, 'fwd'
    tm_open = False
    for i in range(len(memb_vec)):
        if pdb.get_res(i+1).chain != chain and tm_open:
            end = i
            ori = 'fwd' if pdb.get_res(start).memb_z < 0 and pdb.get_res(end) > 0 else 'rev'
            spans.append([start, end, ori])
            tm_open = False
        if memb_vec[i] and not tm_open:
            start = i + 1
            tm_open = True
        if not memb_vec[i] and tm_open:
            end = i-1
            ori = 'fwd' if pdb.get_res(start).memb_z < 0 and pdb.get_res(end) > 0 else 'rev'
            spans.append([start, end, ori])
            tm_open = False
        chain = pdb.get_res(i+1).chain
    if tm_open:
        spans.append([start, i+1, ori])
    return spans