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