Exemplo n.º 1
0
def calc_span_dg(pdb: MyPDB, start: int, end: int, rosetta_splines: dict) -> float:
    """
    calculate a span's dG from structure
    """
    dg = 0.0
    for i in range(start, end+1):
        dg += interpolate.splev( pdb.get_res(i).memb_z, rosetta_splines[ pdb.get_res(i).res_type ], der=0 )
    return dg
Exemplo n.º 2
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
Exemplo n.º 3
0
def find_helix_vector(pdb: MyPDB, start: int, end: int):
    xs, ys, zs = [], [], []
    for i in range(start, end+1):
       res_i = pdb.get_res(i)
       for bb_atom in res_i.iter_bb():
           xs.append(bb_atom.xyz.x)
           ys.append(bb_atom.xyz.y)
           zs.append(bb_atom.xyz.z)
    xs_ = np.array(xs)
    ys_ = np.array(ys)
    zs_ = np.array(zs)

    dist = np.sqrt((xs[-1]-xs[0])**2 + (ys[-1]-ys[0])**2 + (zs[-1]-zs[0])**2  )

    data = np.concatenate((xs_[:, np.newaxis], ys_[:, np.newaxis], zs_[:, np.newaxis]), axis=1)
    datamean = data.mean(axis=0)
    uu, dd, vv = np.linalg.svd(data - datamean)
    linepts = vv[0] * np.mgrid[-dist/2:dist/2:2j][:, np.newaxis]
    linepts += datamean
    return linepts, data
Exemplo n.º 4
0
def find_helix_vector(pdb: MyPDB, start: int, end: int):
    xs, ys, zs = [], [], []
    for i in range(start, end + 1):
        res_i = pdb.get_res(i)
        for bb_atom in res_i.iter_bb():
            xs.append(bb_atom.xyz.x)
            ys.append(bb_atom.xyz.y)
            zs.append(bb_atom.xyz.z)
    xs_ = np.array(xs)
    ys_ = np.array(ys)
    zs_ = np.array(zs)

    dist = np.sqrt((xs[-1] - xs[0])**2 + (ys[-1] - ys[0])**2 +
                   (zs[-1] - zs[0])**2)

    data = np.concatenate(
        (xs_[:, np.newaxis], ys_[:, np.newaxis], zs_[:, np.newaxis]), axis=1)
    datamean = data.mean(axis=0)
    uu, dd, vv = np.linalg.svd(data - datamean)
    linepts = vv[0] * np.mgrid[-dist / 2:dist / 2:2j][:, np.newaxis]
    linepts += datamean
    return linepts, data