コード例 #1
0
def main():
    args = parse_args()
    output_holo_file = os.path.join(args.holo_str[:-4]+"_renamed.pdb")

    holo = Structure.fromfile(args.holo_str)
    apo = Structure.fromfile(args.apo_str)
    apo = apo.extract('record', 'ATOM')
    output_holo = holo.extract("resi", 0, '==')
    for chain_h in np.unique(holo.chain):
        holo_copy = holo.copy()
        tmp_h = holo.extract("chain", chain_h, '==')
        tmp_h_atom = tmp_h.extract('record', 'ATOM')
        dist = None
        for chain_a in np.unique(apo.chain):
            tmp_a = apo.extract("chain", chain_a, '==')
            tot_dist = 0
            for coor in tmp_h_atom.coor:
                tot_dist += np.linalg.norm(tmp_a.coor - coor, axis=1)
                tmp_dist = np.median(tot_dist)
            if dist is None:
                dist = tmp_dist
                rename_chain = chain_a
            else:
                if dist > tmp_dist:
                    print('switching')
                    dist = tmp_dist
                    rename_chain = chain_a
        output = holo_copy.extract("chain", chain_h, '==')
        output.chain = rename_chain
        output_holo = output_holo.combine(output)
        del tmp_h
    output_holo.tofile(output_holo_file)
コード例 #2
0
ファイル: water_clash.py プロジェクト: ExcitedStates/qfit-3.0
def main():
    args = parse_args()

    options = Water_Options()
    options.apply_command_args(args)
    structure_pro = Structure.fromfile(args.no_water_structure).reorder()
    structure_pro = structure_pro.extract('e', 'H', '!=')
    structure_wa = Structure.fromfile(args.water_structure).reorder()

    sub_structure = Water_Overlap(structure_pro, structure_wa, args.map,
                                  options)
    sub_structure.run()
コード例 #3
0
ファイル: alpha_rmsd.py プロジェクト: ExcitedStates/qfit-3.0
def main():
    args = parse_args()
    holo_structure = Structure.fromfile(args.holo_structure)
    apo_structure = Structure.fromfile(args.apo_structure)

    holo_receptor = holo_structure.extract('record', 'ATOM')
    holo_receptor = holo_receptor.extract('e', 'H', '!=')

    apo_receptor = apo_structure.extract('record', 'ATOM')
    apo_receptor = apo_receptor.extract('e', 'H', '!=')

    rmsd_alpha_carbon(holo_receptor, apo_receptor, args.holo_pdb_name,
                      args.apo_pdb_name)
コード例 #4
0
ファイル: water_stats.py プロジェクト: ExcitedStates/qfit-3.0
def main():
    args = parse_args()
    # Load structure and prepare it
    structure = Structure.fromfile(
        args.structure).reorder()  #put H20 on the bottom
    if not args.pdb is None:
        pdb_name = args.pdb
    else:
        pdb_name = ''
    residue_closest(structure, args.dist, pdb_name)
コード例 #5
0
ファイル: compare_apo_holo.py プロジェクト: ss199514/qfit-3.0
def main():
    args = parse_args()
    try:
        os.makedirs(args.directory)
    except OSError:
        pass

    structure = Structure.fromfile(args.structure).reorder()
    structure2 = Structure.fromfile(args.structure2).reorder()
    with open(args.res_list) as f:
        for line in f.readlines():
            print(line)
            res,aa = line.strip().split()
            structure_resi = structure.extract(f'resi {res} and chain {args.chain}')
            structure_resi2 = structure2.extract(f'resi {res} and chain {args.chain}')

            altlocs = len(list(set(structure_resi.altloc)))
            altlocs2 = len(list(set(structure_resi2.altloc)))
            print(args.structure[-8:-4],args.structure2[-8:-4],altlocs,altlocs2,structure_resi.resn[0],structure_resi2.resn[0],structure_resi.chain[0],structure_resi.resi[0],structure_resi2.chain[0],structure_resi2.resi[0])
コード例 #6
0
ファイル: b_factor.py プロジェクト: ExcitedStates/qfit-3.0
def main():
    print(sys.path)
    p = build_argparser()
    args = p.parse_args()

    structure = Structure.fromfile(args.structure).reorder()
    print(structure)
    B_options = Bfactor_options()
    B_options.apply_command_args(args)

    b_factor = Bfactor(structure, B_options)
    b_factor.run()
コード例 #7
0
    def average_coor_heavy_atom(self):
        structure = Structure.fromfile(self.structure)
        select = structure.extract('record', 'ATOM', '==')

        rmsf_data = []

        for chain in np.unique(select.chain):
            select2 = select.extract('chain', chain, '==')
            residues = set(list(select2.resi))
            residue_ids = []
            for i in residues:
                tmp_i = str(i)
                if ':' in tmp_i:
                    resi = int(tmp_i.split(':')[1][1:])
                else:
                    resi = tmp_i
                residue_ids.append(resi)

            for resid in residue_ids:
                res_tmp = select2.extract('resi', int(resid),
                                          '==')  # this separates each residue
                resn_name = (np.unique(res_tmp.resi)[0],
                             np.unique(res_tmp.resn)[0],
                             np.unique(res_tmp.chain)[0])
                if len(np.unique(res_tmp.altloc)) > 1:
                    RMSF_list = []
                    num_alt = len(np.unique(res_tmp.altloc))
                    #iterating over each atom and getting center for each atom

                    for atom in np.unique(res_tmp.name):
                        RMSF_atom_list = []
                        tmp_atom = res_tmp.extract('name', atom, '==')
                        atom_center = tmp_atom.coor.mean(axis=0)

                        for i in np.unique(tmp_atom.altloc):
                            atom_alt = tmp_atom.extract('altloc', i, '==')
                            RMSF_atom = np.linalg.norm(atom_alt.coor -
                                                       atom_center,
                                                       axis=1)
                            RMSF_atom_list.append(RMSF_atom)
                        RMSF_list.append(
                            (sum(RMSF_atom_list) / len(RMSF_atom_list))[0])
                        rmsf_data.append(
                            tuple((resn_name[0], resn_name[1], resn_name[2],
                                   (sum(RMSF_list) / len(RMSF_list)))))
                else:
                    rmsf_data.append(
                        tuple((resn_name[0], resn_name[1], resn_name[2], 0)))

        rmsf = pd.DataFrame(rmsf_data,
                            columns=['resseq', 'AA', 'Chain', 'RMSF'])
        rmsf['PDB_name'] = self.options.pdb
        rmsf.to_csv(self.pdb + 'qfit_RMSF.csv')
コード例 #8
0
def main():
    args = parse_args()
    output_file = os.path.join(args.stru[:-4] + "_chain_renamed.pdb")

    stru = Structure.fromfile(args.stru).reorder()
    output = stru.extract("resi", 0, '==')  #to populate
    stru_atom = stru.extract('record', 'ATOM')
    stru_hetatm = stru.extract('record', 'HETATM')
    for chain in np.unique(stru_atom.chain):
        tmp = stru_atom.extract("chain", chain, '==')
        tmp_het = stru_hetatm.extract("chain", chain, '==')
        output = output.combine(tmp)
        output = output.combine(tmp_het)
    output.tofile(output_file)
コード例 #9
0
ファイル: lig_occ.py プロジェクト: ExcitedStates/qfit-3.0
def main():
    args = parse_args()
    # Load structure and prepare it
    structure = Structure.fromfile(args.structure).reorder()
    structure = structure.extract('e', 'H', '!=')
    get_occ(structure, args.ligand, args.pdb)
コード例 #10
0
def main():
    args = parse_args()

    if not args.pdb_name == None:
        pdb_name = args.pdb_name
    else:
        pdb_name = ''
    try:
        structure = Structure.fromfile(args.structure)
    except:
        return

    ligands = structure.extract('record', 'HETATM')
    receptor = structure.extract('record', 'ATOM')
    receptor = receptor.extract('resn', 'HOH', '!=')
    h**o = hetero = 0
    close_res = pd.DataFrame()
    alt_loc = pd.DataFrame()
    for chain in receptor:
        for residue in chain:
            if residue.resn[0] not in ROTAMERS:
                continue
            altlocs = list(set(residue.altloc))
            if (len(altlocs) > 2) or (len(altlocs) == 2 and '' not in altlocs):
                hetero += 1
            else:
                h**o += 1
    total = h**o + hetero
    for ligand_name in list(set(ligands.resn)):
        near_homo = near_hetero = 0
        if ligand_name not in Dict:
            ligand = structure.extract('resn', ligand_name)
            mask = ligand.e != 'H'
            if len(ligand.name[mask]) < 10:
                continue
            neighbors = {}
            for coor in ligand.coor:
                dist = np.linalg.norm(receptor.coor - coor, axis=1)
                for near_residue, near_chain in zip(
                        receptor.resi[dist < 5.0], receptor.chain[dist < 5.0]):
                    key = str(near_residue) + " " + near_chain
                    if key not in neighbors:
                        neighbors[key] = 0
            n = 1
            for key in neighbors.keys():
                residue_id, chain = key.split()
                close_res.loc[n, 'res_id'] = residue_id
                close_res.loc[n, 'chain'] = chain
                n += 1
            close_res.to_csv(dir + pdb_name + '_' + ligand_name +
                             '_closeres.csv',
                             index=False)

            for key in neighbors.keys():
                residue_id, chain = key.split()
                residue = structure.extract(
                    f"chain {chain} and resi {residue_id}")
                if residue.resn[0] not in ROTAMERS:
                    continue
                altlocs = list(set(residue.altloc))
                if (len(altlocs) > 2) or (len(altlocs) == 2
                                          and '' not in altlocs):
                    near_hetero += 1
                else:
                    near_homo += 1
            near_total = near_homo + near_hetero

            near_total = near_homo + near_hetero
            alt_loc.loc[m, 'PDB'] = pdb_name
            alt_loc.loc[m, 'ligand'] = ligand_name
            alt_loc.loc[m, 'Num_Single_Conf'] = h**o
            alt_loc.loc[m, 'Num_Multi_Conf'] = hetero
            alt_loc.loc[m, 'Total_Residues'] = total
            alt_loc.loc[m, 'Num_Single_Conf_Near_Ligand'] = near_homo
            alt_loc.loc[m, 'Num_Multi_Conf_Near_Ligand'] = near_hetero
            alt_loc.loc[m, 'Total_Residues_Near_Ligand'] = near_total
            m += 1

    alt_loc.to_csv(dir + pdb_name + '_Alt_Loc.csv', index=False)
    print(pdb_name, ligand_name, h**o, hetero, total, near_homo, near_hetero,
          near_total)