From 3e653f2d0fcb5669c4f8fd9afc0767769c6a13ef Mon Sep 17 00:00:00 2001 From: Fabien Mareuil <fmareuil@pasteur.fr> Date: Thu, 12 Apr 2018 17:01:14 +0200 Subject: [PATCH] bug fix: interface residues Former-commit-id: 55c5ce841a8458bf63227d647eb309626cd2a4c0 --- ...nterface_residues_ppc_dimer_IN_PROGRESS.py | 318 ----------------- pyScripts/get_pdb_structure.py | 80 ----- pyScripts/get_ppc_V2.py | 171 --------- pyScripts/get_ppc_id_from_pdbe.py | 121 ------- pyScripts/get_ppc_ligand_V2.py | 268 -------------- .../get_ppc_ligand_compound_from_pdbe.py | 131 ------- .../get_ppc_protcomp-ion_ppc_from_pdbe.py | 321 ----------------- pyScripts/iPPI-DB_descriptors_V2.py | 320 ----------------- pyScripts/ion.pdf | Bin 121203 -> 0 bytes pyScripts/ion.txt | 63 ---- pyScripts/ppiinterface_dist.py | 335 ------------------ 11 files changed, 2128 deletions(-) delete mode 100644 pyScripts/get_interface_residues_ppc_dimer_IN_PROGRESS.py delete mode 100644 pyScripts/get_pdb_structure.py delete mode 100644 pyScripts/get_ppc_V2.py delete mode 100644 pyScripts/get_ppc_id_from_pdbe.py delete mode 100644 pyScripts/get_ppc_ligand_V2.py delete mode 100644 pyScripts/get_ppc_ligand_compound_from_pdbe.py delete mode 100644 pyScripts/get_ppc_protcomp-ion_ppc_from_pdbe.py delete mode 100644 pyScripts/iPPI-DB_descriptors_V2.py delete mode 100644 pyScripts/ion.pdf delete mode 100644 pyScripts/ion.txt delete mode 100644 pyScripts/ppiinterface_dist.py diff --git a/pyScripts/get_interface_residues_ppc_dimer_IN_PROGRESS.py b/pyScripts/get_interface_residues_ppc_dimer_IN_PROGRESS.py deleted file mode 100644 index 1f5e103b..00000000 --- a/pyScripts/get_interface_residues_ppc_dimer_IN_PROGRESS.py +++ /dev/null @@ -1,318 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -Author: Alexandra Moine-Franel -Date: April 2018 -Version: 2 - - - -1) IDENTIFY PROTEIN/PROTEIN INTERFACE RESIDUES - -2) SAVE EACH PROTEIN FIRST CHAIN IN SEPARATE FILE (after cleaning) - - Number of models - - Alternative atomic locations - - Heteroatoms - - - - -Usage: [Script.py] [PROTEIN/PROTEIN COMPLEX] -d (DISTANCE) -------------------------------------------------------------------------------- - -Arguments: ------------- -[PROTEIN/PROTEIN COMPLEX]: - Input (.pdb format) - Protein/protein complex - -(DISTANCE)- optionnal - Input (float or integer) - Distance threshold between the target and the partner - (6 angstroms - by defaut) - - -Return: ------------- -[PROTEIN/PROTEIN INTERFACE RESIDUES]: - Output (.txt format) "PDB_Chain1-Chain2_distance.txt" - (chain ID, residue name and residue ID included) - -[PROTEIN CHAIN]: - Output (.pdb format) "PDB_Chain1.pdb" - (heteroatom not included) -""" - -# ============================================================================= - -import os -import sys -import argparse -import logging -import time - -from Bio.PDB import Select, PDBIO -from Bio.PDB.PDBParser import PDBParser -from argparse import RawTextHelpFormatter -import itertools - -# ============================================================================= - -LOG = logging.getLogger("IDENTIFY PROTEIN/PROTEIN INTERFACE RESIDUES") - -MODEL_FILENAME = 'pdb_multiple_models' -ALTLOC_FILENAME = 'pdb_altloc' -NODIMER_FILENAME = 'pdb_not_dimer' - -# ============================================================================= - -def main(pdb, distance): - start = time.time() - - pdb_code = pdb.strip().split('.pdb')[:-1] - structure = PDBParser().get_structure(pdb_code, pdb) - model = structure[0] - - # Check if multiple models available - if len(list(structure.get_models())) != 0: - try: - if not os.path.exists('{}.txt'.format(MODEL_FILENAME)): - with open('{}.txt'.format(MODEL_FILENAME), 'w') as outfile: - outfile.write(pdb_code) - else: - with open('{}.txt'.format(MODEL_FILENAME), 'a') as outfile: - outfile.write(str(pdb_code) + '\n') - except IOError as e: - LOG.error('{}'.format(e)) - sys.exit(1) - - # Check if 3D structure contains alternative atomic locations - if get_altloc(model) != 0: - try: - if not os.path.exists('{}.txt'.format(ALTLOC_FILENAME)): - with open('{}.txt'.format(ALTLOC_FILENAME), 'w') as outfile: - outfile.write(str(pdb_code) + '\n') - else: - with open('{}.txt'.format(ALTLOC_FILENAME), 'a') as outfile: - outfile.write(str(pdb_code) + '\n') - except IOError as e: - LOG.error('{}'.format(e)) - sys.exit(1) - else: - - # Get the first copy of each chain - target_partner_chain = select_first_chain(get_protein_assembly(structure)) - print(target_partner_chain) - - # Check if 3D structure contains more than two molecule IDs - if len(target_partner_chain) > 2: - try: - if not os.path.exists('{}.txt'.format(NODIMER_FILENAME)): - with open('{}.txt'.format(NODIMER_FILENAME), 'w') as outfile: - outfile.write(pdb_code) - else: - with open('{}.txt'.format(NODIMER_FILENAME), 'a') as outfile: - outfile.write(str(pdb_code) + '\n') - except IOError as e: - LOG.error('{}'.format(e)) - sys.exit(1) - - - # Remove heteroatom (protein/protein complex, no ligand) - for chain in target_partner_chain: - residue_to_remove = remove_hetatm(model, chain) - for residue in residue_to_remove: - model[chain].detach_child(residue[1]) - - - # Get all chain-chain combinations - subset = permutation(target_partner_chain) - - - # Calculate chain-chain distance (interaction patch) - for chain_pair in subset: - target = chain_pair[0] - partner = chain_pair[1] - - if len(model[target].get_list()) > 3 and len(model[partner].get_list()) > 3: - - get_interface_residues(target, partner, model, distance) - - - # Save each chain in different file - #for chain in target_partner_chain: - io = PDBIO() - io.set_structure(model) - io.save('{}_{}.pdb'.format(pdb_code, chain), select = ChainSelection(target_partner_chain), - preserve_atom_numbering = True) - - - - end = time.time() - print('TIME: {}'.format(end - start)) - - -class ChainSelection(Select): - def __init__(self, chains): - self.chains = chains - - def accept_chain(self, chain): - if chain.get_id() in self.chains: - return 1 - else: - return 0 - - -def get_altloc(model): - altloc = 0 - for chain in model.child_list: - for residue in chain.get_list(): - if residue.is_disordered(): - altloc = altloc + 1 - break - return altloc - - -def get_protein_assembly(structure): - assembly = {} - for molecule in structure.header['compound'].keys(): - assembly[molecule] = [] - for chain in structure.header['compound'][molecule]['chain'].split(','): - assembly[molecule].append(chain.strip().upper()) - return assembly - # {'1': ['A', 'C', 'E'], '2': ['B', 'D']} - - -def select_first_chain(assembly): - chain_id = [] - for molecule in assembly.keys(): - chain_id.append(assembly[molecule][0]) - return chain_id - # ['A', 'B'] - - -def permutation(list_id): - subset = [] - for permutation in itertools.permutations(list_id, 2): - subset.append(permutation) - print(subset) - return subset - # [(['A'], ['B']), (['B'], ['A'])] - - -def remove_hetatm(model, chain): - residue_to_remove = [] - for residue in model[chain].get_residues(): - if residue.id[0] != ' ': - residue_to_remove.append((model[chain].id, residue.id)) - return residue_to_remove - - - -def get_interface_residues(target, partner, model, distance): - ires = [] - with open('{}_{}{}_{}.txt'.format(model.parent.id, target, partner, distance), 'wb') as outfile: - - for rest in model[target].get_residues(): - if ''.join(map(str,(rest.get_parent().get_id(), '.', - rest.get_resname(), rest.get_id()[1]))): - for atomt in rest.get_atoms(): - - for atomp in model[partner].get_atoms(): - xt = atomt.get_coord()[0] - xp = atomp.get_coord()[0] - dist_x = calculate_euclidist_x(xt, xp) - - if dist_x < float(distance): - yt = atomt.get_coord()[1] - yp = atomp.get_coord()[1] - dist_xy = calculate_euclidist_xy(xt, yt, xp, yp) - - if dist_xy < float(distance): - zt = atomt.get_coord()[2] - zp = atomp.get_coord()[2] - dist_xyz = calculate_euclidist_xyz(xt, yt, zt, xp, yp, zp) - - if dist_xyz < float(distance): - ires.append(''.join(map(str, - (rest.get_parent().get_id(), '.', - rest.get_resname(), rest.get_id()[1])))) - - for element in ires: - outfile.write(element + '\n') - - - -def calculate_euclidist_x(x1, x2): - """ - Calculate the distance x between two 1D points - ---------------------------------------------------------------------- - Arguments: - [float]: coordinate x of target atom - coordinate x of partnet atom - Return: - [float]: distance - """ - dist = ((x1-x2)**2) ** 0.5 - return dist - - -def calculate_euclidist_xy(x1, y1, x2, y2): - """ - Calculate the distance xy between two 2D points - ---------------------------------------------------------------------- - Arguments: - [float]: coordinates xy of target atom - coordinates xy of partnet atom - Return: - [float]: distance - """ - dist = ((x1-x2)**2 + (y1-y2)**2) ** 0.5 - return dist - - -def calculate_euclidist_xyz(x1, y1, z1, x2, y2, z2): - """ - Calculate the euclidian distance xyz between two 3D points - ---------------------------------------------------------------------- - Arguments: - [float]: coordinates xyz of target atom - coordinates xyz of partnet atom - Return: - [float]: distance - """ - dist = ((x1-x2)**2 + (y1-y2)**2 + (z1-z2)**2) ** 0.5 - return dist - - - -def setlogger(): - LOG.setLevel(logging.INFO) - ch = logging.StreamHandler() - ch.setLevel(logging.INFO) - formatter = logging.Formatter('%(asctime)s - %(name)s - %(funcName)s - %(levelname)s - %(message)s') - ch.setFormatter(formatter) - LOG.addHandler(ch) - -# ============================================================================= - -if __name__ == '__main__': - parser = argparse.ArgumentParser(description = ''' - 1) Format protein/protein complex PDB structure (no ligand) - 1.a) Number of models - 1.b) Alternative atomic locations - 1.c) Heteroatoms - 2) Identify protein/protein interface residues - (for combinations of first chain of each protein) - 3) Save each chain in separate files''', formatter_class=RawTextHelpFormatter) - parser.add_argument('pdb', help = '''Input [.pdb file]: PBD 3D structure - (with HEADER included)''') - parser.add_argument('-d', dest = 'distance', help = '''Input [float or integer]: distance threshold - {by default, 6 Angstroms}''') - options = parser.parse_args() - - if options.distance is None: - options.distance = 6.0 - - setlogger() - main(options.file, options.distance) diff --git a/pyScripts/get_pdb_structure.py b/pyScripts/get_pdb_structure.py deleted file mode 100644 index d5dd2783..00000000 --- a/pyScripts/get_pdb_structure.py +++ /dev/null @@ -1,80 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -Author: Alexandra Moine-Franel -Date: March 2018 -Version: 1 - - -DOWNLOAD PDB 3D STRUCTURE FILES FROM PDB - - -Usage: [Script.py] [pdb_id] ------------------------------------------------------------------- -Argument: - [file]: list of PDB IDs (txt format) - -Return: - [file]: PDB files, stored in 'PDB' folder -""" - -# ============================================================================= - -import os -import argparse -import logging -import csv -import Bio -from Bio.PDB import PDBList - -# ============================================================================= - -LOG = logging.getLogger("DOWNLOAD PDB 3D STRUCTURE FILES") - -FOLDER = 'PDB' - -# ============================================================================= - -def main(pdb_id): - get_pdb_file(get_pdbID(pdb_id)) - rename_pdb_file() - - -def get_pdbID(txtfile): - pdb_id = [] - with open(txtfile, 'rb') as pdb_txtfile: - for line in csv.reader(pdb_txtfile): - pdb_id.append(line[0].upper()) - return pdb_id - - -def get_pdb_file(pdbID): - for i in pdbID: - PDBList().retrieve_pdb_file(i, pdir = FOLDER, file_format = 'pdb') - - -def rename_pdb_file(): - working_dir = os.path.dirname(__file__) - pdb_dir = os.path.abspath(os.path.join(working_dir, FOLDER)) - os.chdir(pdb_dir) - for filename in os.listdir(pdb_dir): - os.rename(filename, filename.replace('pdb', '').replace('ent', 'pdb')) - - -def setlogger(): - LOG.setLevel(logging.INFO) - ch = logging.StreamHandler() - ch.setLevel(logging.INFO) - formatter = logging.Formatter('%(asctime)s - %(name)s - %(funcName)s - %(levelname)s - %(message)s') - ch.setFormatter(formatter) - LOG.addHandler(ch) - -# ============================================================================= - -if __name__ == "__main__": - parser = argparse.ArgumentParser(description = - 'DOWNLOAD PDB 3D STRUCTURE FILES FROM PDB') - parser.add_argument('pdb_id', help = 'Input [.txt file]: PDB IDs') - options = parser.parse_args() - setlogger() - main(options.pdb_id) diff --git a/pyScripts/get_ppc_V2.py b/pyScripts/get_ppc_V2.py deleted file mode 100644 index 6d801b9c..00000000 --- a/pyScripts/get_ppc_V2.py +++ /dev/null @@ -1,171 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -Author: Alexandra Moine-Franel -Date: March 2018 -Version: 2 - - - -IDENTIFY PROTEIN-PROTEIN COMPLEXES FROM PDBe - - -Usage: [Script.py] [PDBe] ------------------------------------------------------------------- -Argument: - [PDBe]: - Input (json format) - PDBe (with [assembly_composition] and [assembly_type] information included) - -Return: - [list(PPC)]: - Output (txt format) - Protein/protein complex PDB IDs - - [json(PPC)]: - Output (json format) - Protein/protein complex information - - -Warning: -------- -PDBs with unique and repeated assembly composition annotation are both included! -[unique annotation: 'protein/protein complex'] -[repeated annotation: 'protein/protein complex, protein/protein complex'] -""" - -# ============================================================================= - -import os -import sys -import argparse -import logging -import json - -# ============================================================================= - -LOG = logging.getLogger('Get PPC PDB IDs from PDBe') -FILENAME = 'PPC-DIMER_3-26-18PDBe' - -XRAY = ['X-ray diffraction', 'X-ray powder diffraction'] - -RESOLUTION = 3.5 -DIFFR = 0.05 - -# ============================================================================= - -def main(pdbe): - with open(pdbe) as infile: - structure = json.load(infile) - dimer = get_dimer(get_ppc(structure)) - dimer_filt = filter_rfactor(filter_resolution(filter_annotation(dimer))) - to_json(dimer_filt, FILENAME) - to_txt(get_id(dimer_filt), FILENAME) - - if os.path.exists('{}.txt'.format(FILENAME)): - LOG.info('Finished!') - else: - LOG.error('Warning! [Output] Not found!') - sys.exit(1) - - - -def get_ppc(pdbe): - ppc_unique = [] - ppc_repeated = [] - for i in xrange(len(pdbe)): - if 'assembly_composition' in pdbe[i].keys(): - assembly_composition = pdbe[i]['assembly_composition'] - if len(assembly_composition) == 1 and \ - assembly_composition == ['protein/protein complex']: - ppc_unique.append(pdbe[i]) - elif len(assembly_composition) > 1: - if assembly_composition.count('protein/protein complex') >= 1 and \ - assembly_composition.count( - assembly_composition[0]) == len(assembly_composition): - ppc_repeated.append(pdbe[i]) - ppc_all = ppc_unique + ppc_repeated - return ppc_all - - -def get_dimer(pdbe): - dimer_unique = [] - dimer_repeated = [] - for i in xrange(len(pdbe)): - if 'assembly_type' in pdbe[i].keys(): - assembly_type = pdbe[i]['assembly_type'] - if len(assembly_type) == 1 and \ - assembly_type == ['dimer']: - dimer_unique.append(pdbe[i]) - elif len(assembly_type) > 1: - if assembly_type.count('dimer') >= 1 and \ - assembly_type.count(assembly_type[0]) == len(assembly_type): - dimer_repeated.append(pdbe[i]) - dimer_all = dimer_unique + dimer_repeated - return dimer_all - - -def filter_annotation(pdbe): - annotation = [] - for i in xrange(len(pdbe)): - if len(pdbe[i]['experimental_method']) == 1: - annotation.append(pdbe[i]) - return annotation - -def filter_resolution(pdbe): - quality = [] - for i in xrange(len(pdbe)): - if len([e for e in pdbe[i]['experimental_method'] if e in XRAY]) == 1: - if 'resolution' in pdbe[i].keys() and \ - float(pdbe[i]['resolution']) <= RESOLUTION: - quality.append(pdbe[i]) - return quality - -def filter_rfactor(pdbe): - quality = [] - for i in xrange(len(pdbe)): - if len([e for e in pdbe[i]['experimental_method'] if e in XRAY]) == 1: - if 'r_free' in pdbe[i].keys() and 'r_factor' in pdbe[i].keys(): - if float(pdbe[i]['r_free'] - pdbe[i]['r_factor']) <= abs(DIFFR): - quality.append(pdbe[i]) - return quality - - -def get_id(pdbe): - pdb_id = [] - for i in xrange(len(pdbe)): - pdb_id.append(pdbe[i]['pdb_id']) - return pdb_id - - -def to_json(data, outfile): - with open('{}.json'.format(outfile), 'wb') as jsonfile: - json.dump(data, jsonfile) - - -def to_txt(data, outfile): - with open('{}.txt'.format(outfile), 'wb') as txtfile: - for pdb_id in data: - txtfile.write(pdb_id + '\n') - - - -def setlogger(): - LOG.setLevel(logging.INFO) - ch = logging.StreamHandler() - ch.setLevel(logging.INFO) - formatter = logging.Formatter('%(asctime)s - %(name)s - %(funcName)s - \ - %(levelname)s - %(message)s') - ch.setFormatter(formatter) - LOG.addHandler(ch) - -# ============================================================================= - -if __name__ == "__main__": - parser = argparse.ArgumentParser(description = 'Get protein/protein \ - complex PDB IDs from PDBe') - parser.add_argument('pdbe', help = 'Input [.json file]: \ - PBDe (with assembly and structure quality information included') - options = parser.parse_args() - setlogger() - main(options.pdbe) diff --git a/pyScripts/get_ppc_id_from_pdbe.py b/pyScripts/get_ppc_id_from_pdbe.py deleted file mode 100644 index e41157a8..00000000 --- a/pyScripts/get_ppc_id_from_pdbe.py +++ /dev/null @@ -1,121 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -Author: Alexandra Moine-Franel -Date: February 2018 -Version: 1 - - - -IDENTIFY PROTEIN-PROTEIN COMPLEXES FROM PDBe - - -Usage: [Script.py] [PDBe] ------------------------------------------------------------------- -Argument: - [PDBe]: - Input (json format) - PDBe (with assembly information included) - -Return: - [list(PPC)]: - Output (txt format) - Protein/protein complex PDB IDs - - [json(PPC)]: - Output (json format) - Protein/protein complex information - - -Warning: -------- -PDBs with unique and repeated assembly composition annotation are both included! -[unique annotation: 'protein/protein complex'] -[repeated annotation: 'protein/protein complex, protein/protein complex'] -""" - -# ============================================================================= - -import argparse -import logging -import json -import pandas as pd - -# ============================================================================= - -LOG = logging.getLogger('Get protein/protein complex PDB IDs from PDBe') - -# ============================================================================= - -def setlogger(): - LOG.setLevel(logging.INFO) - ch = logging.StreamHandler() - ch.setLevel(logging.INFO) - formatter = logging.Formatter('%(asctime)s - %(name)s - %(funcName)s - %(levelname)s - %(message)s') - ch.setFormatter(formatter) - LOG.addHandler(ch) - - - -def main(pdbe): - structure = pd.read_json(pdbe, orient = 'columns') - ppc_to_txt(get_ppc_id(structure)) - ppc_to_json(get_ppc_data(structure)) - - - -def get_ppc_id(pdbe): - ppc_unique = [] - ppc_repeated = [] - for i in xrange(len(pdbe['grouped']['pdb_id']['groups'])): - assembly_composition = pdbe['grouped']['pdb_id']['groups'][i]['doclist']['docs'][0]['assembly_composition'] - if len(assembly_composition) == 1 and assembly_composition == ['protein/protein complex']: - ppc_unique.append(pdbe['grouped']['pdb_id']['groups'][i]['doclist']['docs'][0]['pdb_id']) - elif len(assembly_composition) > 1: - if assembly_composition.count('protein/protein complex') >= 1 and \ - assembly_composition.count(assembly_composition[0]) == len(assembly_composition): - ppc_repeated.append(pdbe['grouped']['pdb_id']['groups'][i]['doclist']['docs'][0]['pdb_id']) - ppc_all = ppc_unique + ppc_repeated - return ppc_all - - - -def get_ppc_data(pdbe): - ppc_unique_data = [] - ppc_repeated_data = [] - for i in xrange(len(pdbe['grouped']['pdb_id']['groups'])): - assembly_composition = pdbe['grouped']['pdb_id']['groups'][i]['doclist']['docs'][0]['assembly_composition'] - if len(assembly_composition) == 1 and assembly_composition == ['protein/protein complex']: - ppc_unique_data.append(pdbe['grouped']['pdb_id']['groups'][i]['doclist']['docs'][0]) - elif len(assembly_composition) > 1: - if assembly_composition.count('protein/protein complex') >= 1 and \ - assembly_composition.count(assembly_composition[0]) == len(assembly_composition): - ppc_repeated_data.append(pdbe['grouped']['pdb_id']['groups'][i]['doclist']['docs'][0]) - ppc_all_data = ppc_unique_data + ppc_repeated_data - return ppc_all_data - - - -def ppc_to_txt(ppc): - with open('PPC_2-20-18PDBe.txt', 'wb') as txtfile: - for pdb_id in ppc: - txtfile.write(pdb_id + '\n') - - - -def ppc_to_json(ppc): - with open('PPC_2-20-18PDBe.json', 'wb') as jsonfile: - json.dump(ppc, jsonfile) - - - -# ============================================================================== - -if __name__ == "__main__": - parser = argparse.ArgumentParser(description = - 'Get protein/protein complex PDB IDs from PDBe') - parser.add_argument('pdbe', help = 'Input [.json file]: \ - PBDe (with assembly information included') - options = parser.parse_args() - setlogger() - main(options.pdbe) diff --git a/pyScripts/get_ppc_ligand_V2.py b/pyScripts/get_ppc_ligand_V2.py deleted file mode 100644 index ed1f1576..00000000 --- a/pyScripts/get_ppc_ligand_V2.py +++ /dev/null @@ -1,268 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -Author: Alexandra Moine-Franel -Date: March 2018 -Version: 3 - - - -IDENTIFY PROTEIN STRUCTURE WITH COMPOUNDS (with or without including ions) -INVOLVED IN PROTEIN-PROTEIN INTERACTION FROM PDBe - - -Usage: [Script.py] [PDBe] [IONS] ------------------------------------------------------------------- -Arguments: - [PDBe]: - Input (json format) - PDBe (with [assembly_composition], [compound_id] and [uniprot_id] included) - - [IONS]: - Input (txt format) - Compounds considered as ions - -Return: - [list(protein)]: - Output (txt format) - Proteins with compounds associated with a protein/protein complex PDB IDs - - [json(protein)]: - Output (json format) - Proteins with compounds associated with a protein/protein complex dataset - - Compounds: - --------- - ** EXAMPLE: [u'FHB : 3-FLUORO-4-HYDROXYBENZOIC ACID'] - or [u'FHB : 3-FLUORO-4-HYDROXYBENZOIC ACID', u'FE : FE (III) ION'] - - - [list(protein)]: - Output (txt format) - Proteins with compounds associated with a protein/protein complex PDB IDs - IONS ONLY EXCLUDED - - [json(protein)]: - Output (json format) - Proteins with compounds associated with a protein/protein complex dataset - IONS ONLY EXCLUDED - - Compounds: - --------- - ** EXAMPLE: [u'FE : FE (III) ION'] - - - -!Warning!: -------- -PDBs with unique and repeated assembly composition annotation are both included! -[unique annotation: 'protein/protein complex'] -[repeated annotation: 'protein/protein complex, protein/protein complex'] -""" - -# ============================================================================= - -import os -import sys -import argparse -import logging -import json - -# ============================================================================= - -LOG = logging.getLogger('Get PPC PDB IDs with ligand') -FILENAME_with_ions = 'PPC-PROT-COMPOUNDS_3-26-18PDBe' -FILENAME_without_ions = 'PPC-PROT-COMPOUNDS_noIONS_3-26-18PDBe' - -XRAY = ['X-ray diffraction', 'X-ray powder diffraction'] - -RESOLUTION = 3.5 -DIFFR = 0.05 - -# ============================================================================= - -def main(pdbe, ion): - with open(pdbe) as infile: - structure = json.load(infile) - - # Get protein/protein complex (PPC) - ppc = filter_rfactor(filter_resolution(filter_annotation( - get_ppc(structure)))) - to_txt(get_id(ppc), 'PPC_3-26-18PDBe') - - # Get protein structure with [compounds] - prot_compound = filter_rfactor(filter_resolution(filter_annotation( - get_with_compound(get_prot(structure))))) - - # Collect PPC UniProt - ppc_uniprot = get_uniprot(ppc) - - # Get PPC-associated proteins with compounds - ppc_ligand = get_prot_compound_ppc(prot_compound, ppc_uniprot) - to_json(ppc_ligand, FILENAME_with_ions) - to_txt(get_id(ppc_ligand), FILENAME_with_ions) - - # Get PPC-associated proteins with compounds (ions only not included) - ions = [] - with open(ion, 'r') as ion_file: - for i in ion_file: - ions.append(i.strip().upper()) - - prot_compound_without_ions = get_without_ions(prot_compound, ions) - ppc_ligand_without_ions = get_prot_compound_ppc(prot_compound_without_ions, ppc_uniprot) - to_json(ppc_ligand_without_ions, FILENAME_without_ions) - to_txt(get_id(ppc_ligand_without_ions), FILENAME_without_ions) - - - if os.path.exists('{}.txt'.format(FILENAME_with_ions)) and \ - os.path.exists('{}.txt'.format(FILENAME_without_ions)): - LOG.info('Finished!') - else: - LOG.error('Warning! [Outputs] Not found!') - sys.exit(1) - - - -def get_ppc(pdbe): - ppc_unique = [] - ppc_repeated = [] - for i in xrange(len(pdbe)): - if 'assembly_composition' in pdbe[i].keys(): - assembly_composition = pdbe[i]['assembly_composition'] - if len(assembly_composition) == 1 and \ - assembly_composition == ['protein/protein complex']: - ppc_unique.append(pdbe[i]) - elif len(assembly_composition) > 1: - if assembly_composition.count('protein/protein complex') >= 1 and \ - assembly_composition.count( - assembly_composition[0]) == len(assembly_composition): - ppc_repeated.append(pdbe[i]) - ppc_all = ppc_unique + ppc_repeated - return ppc_all - - -def get_prot(pdbe): - prot_unique = [] - prot_repeated = [] - for i in xrange(len(pdbe)): - if 'assembly_composition' in pdbe[i].keys(): - assembly_composition = pdbe[i]['assembly_composition'] - if len(assembly_composition) == 1 and \ - assembly_composition == ['protein structure']: - prot_unique.append(pdbe[i]) - elif len(assembly_composition) > 1: - if assembly_composition.count('protein structure') >= 1 and \ - assembly_composition.count( - assembly_composition[0]) == len(assembly_composition): - prot_repeated.append(pdbe[i]) - prot_all = prot_unique + prot_repeated - return prot_all - - -def filter_annotation(pdbe): - annotation = [] - for i in xrange(len(pdbe)): - if len(pdbe[i]['experimental_method']) == 1: - annotation.append(pdbe[i]) - return annotation - -def filter_resolution(pdbe): - quality = [] - for i in xrange(len(pdbe)): - if len([e for e in pdbe[i]['experimental_method'] if e in XRAY]) == 1: - if 'resolution' in pdbe[i].keys() and \ - float(pdbe[i]['resolution']) <= RESOLUTION: - quality.append(pdbe[i]) - return quality - -def filter_rfactor(pdbe): - quality = [] - for i in xrange(len(pdbe)): - if len([e for e in pdbe[i]['experimental_method'] if e in XRAY]) == 1: - if 'r_free' in pdbe[i].keys() and 'r_factor' in pdbe[i].keys(): - if float(pdbe[i]['r_free'] - pdbe[i]['r_factor']) <= abs(DIFFR): - quality.append(pdbe[i]) - return quality - - -def get_with_compound(pdbe): - compound = [] - for i in xrange(len(pdbe)): - if 'compound_id' in pdbe[i].keys(): - compound.append(pdbe[i]) - return compound - - -def get_uniprot(pdbe): - uniprot = [] - for i in xrange(len(pdbe)): - if 'uniprot_id' in pdbe[i].keys(): - uniprot.extend(pdbe[i]['uniprot_id']) - return uniprot - - -def get_prot_compound_ppc(protein, uniprot): - prot_compound_ppc = [] - for i in xrange(len(protein)): - if 'uniprot_id' in protein[i].keys(): - if len([e for e in protein[i]['uniprot_id'] if e in uniprot]) >= 1: - prot_compound_ppc.append(protein[i]) - return prot_compound_ppc - - -def get_without_ions(protein, ions): - without_ions = [] - with_ions_not_only = [] - for i in xrange(len(protein)): - if 'compound_id' in protein[i].keys(): - if len([e for e in protein[i]['compound_id'] if e in ions]) == 0: - without_ions.append(protein[i]) - elif len([e for e in protein[i]['compound_id'] if e in ions]) >= 1: - if len([e for e in protein[i]['compound_id'] if e in ions]) \ - != len(protein[i]['compound_id']): - with_ions_not_only.append(protein[i]) - print len(without_ions), len(with_ions_not_only) - compound_ions = without_ions + with_ions_not_only - return compound_ions - - -def get_id(pdbe): - pdb_id = [] - for i in xrange(len(pdbe)): - pdb_id.append(pdbe[i]['pdb_id']) - return pdb_id - - -def to_json(data, outfile): - with open('{}.json'.format(outfile), 'wb') as jsonfile: - json.dump(data, jsonfile) - - -def to_txt(data, outfile): - with open('{}.txt'.format(outfile), 'wb') as txtfile: - for pdb_id in data: - txtfile.write(pdb_id + '\n') - - - -def setlogger(): - LOG.setLevel(logging.INFO) - ch = logging.StreamHandler() - ch.setLevel(logging.INFO) - formatter = logging.Formatter('%(asctime)s - %(name)s - %(funcName)s - \ - %(levelname)s - %(message)s') - ch.setFormatter(formatter) - LOG.addHandler(ch) - -# ============================================================================= - -if __name__ == "__main__": - parser = argparse.ArgumentParser(description = 'Get protein/protein \ - complex PDB IDs from PDBe') - parser.add_argument('pdbe', help = 'Input [.json file]: \ - PBDe (with assembly and structure quality information included') - parser.add_argument('ion', help = 'Input [.txt file]: Compounds considered \ - as ions') - options = parser.parse_args() - setlogger() - main(options.pdbe, options.ion) diff --git a/pyScripts/get_ppc_ligand_compound_from_pdbe.py b/pyScripts/get_ppc_ligand_compound_from_pdbe.py deleted file mode 100644 index a91caa2d..00000000 --- a/pyScripts/get_ppc_ligand_compound_from_pdbe.py +++ /dev/null @@ -1,131 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -Author: Alexandra Moine-Franel -Date: February 2018 -Version: 2 - - - -IDENTIFY INTERACTING LIGANDS AND COMPOUNDS OF PROTEIN-PROTEIN COMPLEXES FROM PDBe - - -Usage: [Script.py] [PDBe] ------------------------------------------------------------------- -Argument: - [PDBe]: - Input (json format) - PDBe (with assembly information included) - -Return: - [list(ligands)]: - Output (txt format) - Interacting ligands of protein/protein complexes - - [list(compounds)]: - Output (txt format) - Compounds of protein/protein complexes - - -Warning: -------- -PDBs with unique and repeated assembly composition annotation are both included! -[unique annotation: 'protein/protein complex'] -[repeated annotation: 'protein/protein complex, protein/protein complex'] -""" - -# ============================================================================= - -import argparse -import logging -import json -import pandas as pd - -# ============================================================================= - -LOG = logging.getLogger('Get ligands and compounds of protein/protein complexes from PDBe') - -# ============================================================================= - -def setlogger(): - LOG.setLevel(logging.INFO) - ch = logging.StreamHandler() - ch.setLevel(logging.INFO) - formatter = logging.Formatter('%(asctime)s - %(name)s - %(funcName)s - %(levelname)s - %(message)s') - ch.setFormatter(formatter) - LOG.addHandler(ch) - - - -def main(pdbe): - structure = pd.read_json(pdbe, orient = 'columns') - ligand_to_txt(get_ligand(get_ppc_data(structure))) - compound_to_txt(get_compound(get_ppc_data(structure))) - -def get_ppc_data(pdbe): - ppc_unique_data = [] - ppc_repeated_data = [] - for i in xrange(len(pdbe['grouped']['pdb_id']['groups'])): - assembly_composition = pdbe['grouped']['pdb_id']['groups'][i]['doclist']['docs'][0]['assembly_composition'] - if len(assembly_composition) == 1 and assembly_composition == ['protein/protein complex']: - ppc_unique_data.append(pdbe['grouped']['pdb_id']['groups'][i]['doclist']['docs'][0]) - elif len(assembly_composition) > 1: - if assembly_composition.count('protein/protein complex') >= 1 and \ - assembly_composition.count(assembly_composition[0]) == len(assembly_composition): - ppc_repeated_data.append(pdbe['grouped']['pdb_id']['groups'][i]['doclist']['docs'][0]) - ppc_all_data = ppc_unique_data + ppc_repeated_data - return ppc_all_data - - - -def get_ligand(ppc): - ppc_ligand = [] - unique_ligand = [] - for i in xrange(len(ppc)): - if 'interacting_ligands' in ppc[i].keys(): - ppc_ligand.append(ppc[i]['interacting_ligands'][0].split(' :')[0]) - - for j in ppc_ligand: - if j not in unique_ligand: - unique_ligand.append(j) - - #print len(unique_ligand) - return unique_ligand - - - -def get_compound(ppc): - ppc_compound = [] - unique_compound = [] - for i in xrange(len(ppc)): - if 'compound_id' in ppc[i].keys(): - ppc_compound.extend(ppc[i]['compound_id']) - - for j in ppc_compound: - if j not in unique_compound: - unique_compound.append(j) - - #print len(unique_compound) - return unique_compound - - -def ligand_to_txt(ligand): - with open('PPC_LIGANDS_2-20-18PDBe.txt', 'wb') as txtfile: - for lig in ligand: - txtfile.write(lig + '\n') - -def compound_to_txt(compound): - with open('PPC_COMPOUNDS_2-20-18PDBe.txt', 'wb') as txtfile: - for c in compound: - txtfile.write(c + '\n') - -# ============================================================================== - -if __name__ == "__main__": - parser = argparse.ArgumentParser(description = - 'Get ligands and compounds of protein/protein complexes from PDBe') - parser.add_argument('pdbe', help = 'Input [.json file]: \ - PBDe (with interacting ligand and compound information included') - options = parser.parse_args() - setlogger() - main(options.pdbe) diff --git a/pyScripts/get_ppc_protcomp-ion_ppc_from_pdbe.py b/pyScripts/get_ppc_protcomp-ion_ppc_from_pdbe.py deleted file mode 100644 index 59a2c0ac..00000000 --- a/pyScripts/get_ppc_protcomp-ion_ppc_from_pdbe.py +++ /dev/null @@ -1,321 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -Author: Alexandra Moine-Franel -Date: February 2018 -Version: 2 - - - -IDENTIFY PROTEIN STRUCTURE WITH COMPOUNDS (with or without including ions) -INVOLVED IN PROTEIN-PROTEIN INTERACTION FROM PDBe - - -Usage: [Script.py] [PDBe] ------------------------------------------------------------------- -Argument: - [PDBe]: - Input (json format) - PDBe (with [assembly_composition], [compound_id] and [uniprot_id] included) - -Return: - [list(protein)]: - Output (txt format) - Proteins with compounds associated with a protein/protein complex PDB IDs - - [json(protein)]: - Output (json format) - Proteins with compounds associated with a protein/protein complex dataset - - Compounds: - --------- - ** EXAMPLE: [u'FHB : 3-FLUORO-4-HYDROXYBENZOIC ACID'] - or [u'FHB : 3-FLUORO-4-HYDROXYBENZOIC ACID', u'FE : FE (III) ION'] - - - - [list(protein)]: - Output (txt format) - Proteins with compounds associated with a protein/protein complex PDB IDs - IONS ONLY EXCLUDED - - [json(protein)]: - Output (json format) - Proteins with compounds associated with a protein/protein complex dataset - IONS ONLY EXCLUDED - - Compounds: - --------- - ** EXAMPLE: [u'FE : FE (III) ION'] - - - -!Warning!: -------- -PDBs with unique and repeated assembly composition annotation are both included! -[unique annotation: 'protein/protein complex'] -[repeated annotation: 'protein/protein complex, protein/protein complex'] -""" - -# ============================================================================= - -import argparse -import logging -import json -import pandas as pd - -# ============================================================================= - -LOG = logging.getLogger('Proteins associated with a PPC - Compounds') - -# ============================================================================= - -def setlogger(): - LOG.setLevel(logging.INFO) - ch = logging.StreamHandler() - ch.setLevel(logging.INFO) - formatter = logging.Formatter('%(asctime)s - %(name)s - %(funcName)s - %(levelname)s - %(message)s') - ch.setFormatter(formatter) - LOG.addHandler(ch) - - -def main(pdbe): - structure = pd.read_json(pdbe, orient = 'columns') - - # Get protein/protein complex [assembly_composition] - ppc = get_ppc_data(structure) - - # Get protein structure [assembly_composition] with 'compounds' - prot_compound = get_compound_id(get_prot_data(structure)) - - # Collect PPC UniProt - ppc_uniprot = get_uniprot(ppc) - - # Identify protein structure with compounds associated to PPC - to_txt(get_id_prot_compound_ppc(prot_compound, ppc_uniprot)) - to_json(get_data_prot_compound_ppc(prot_compound, ppc_uniprot)) - - - # Get protein structure [assembly_composition] with compounds (ions only not included) - ion = get_ion(get_compound_name(prot_compound)) - prot_compound_without_ions = get_compound_without_ion(prot_compound, ion) - to_txt_ion(get_id_prot_compound_ppc(prot_compound_without_ions, ppc_uniprot)) - to_json_ion(get_data_prot_compound_ppc(prot_compound_without_ions, ppc_uniprot)) - - - - -def get_ppc_data(pdbe): - ppc_unique_data = [] - ppc_repeated_data = [] - for i in xrange(len(pdbe['grouped']['pdb_id']['groups'])): - assembly_composition = pdbe['grouped']['pdb_id']['groups'][i]['doclist']['docs'][0]['assembly_composition'] - if len(assembly_composition) == 1 and assembly_composition == ['protein/protein complex']: - ppc_unique_data.append(pdbe['grouped']['pdb_id']['groups'][i]['doclist']['docs'][0]) - elif len(assembly_composition) > 1: - if assembly_composition.count('protein/protein complex') >= 1 and \ - assembly_composition.count(assembly_composition[0]) == len(assembly_composition): - ppc_repeated_data.append(pdbe['grouped']['pdb_id']['groups'][i]['doclist']['docs'][0]) - ppc_all_data = ppc_unique_data + ppc_repeated_data - return ppc_all_data - - - -def get_prot_data(pdbe): - prot_unique_data = [] - prot_repeated_data = [] - for i in xrange(len(pdbe['grouped']['pdb_id']['groups'])): - assembly_composition = pdbe['grouped']['pdb_id']['groups'][i]['doclist']['docs'][0]['assembly_composition'] - if len(assembly_composition) == 1 and assembly_composition == ['protein structure']: - prot_unique_data.append(pdbe['grouped']['pdb_id']['groups'][i]['doclist']['docs'][0]) - elif len(assembly_composition) > 1: - if assembly_composition.count('protein structure') >= 1 and \ - assembly_composition.count(assembly_composition[0]) == len(assembly_composition): - prot_repeated_data.append(pdbe['grouped']['pdb_id']['groups'][i]['doclist']['docs'][0]) - prot_all_data = prot_unique_data + prot_repeated_data - return prot_all_data - - - -def get_compound_id(data): - ''' - Get 3D structure with compound [compound_id] - -------------------------------------------------- - Argument: - [json]: protein structures (dataset) - - Return: - [json]: protein structures with compounds (dataset) - ''' - compound = [] - for i in xrange(len(data)): - if 'compound_id' in data[i].keys(): - compound.append(data[i]) - return compound - - - -def get_uniprot(data): - ''' - Get UniProt - ------------------------------------------------- - Argument: - [json]: protein/protein complexes (dataset) - - Return: - [list]: protein/protein complexes Uniprot IDs - ''' - uniprot = [] - for i in xrange(len(data)): - if 'uniprot_id' in data[i].keys(): - uniprot.extend(data[i]['uniprot_id']) - return uniprot - - -def get_id_prot_compound_ppc(data, uniprot): - ''' - Get PDB IDs only of protein structure with compounds associated with a protein/protein complex - ----------------------------------------------------------------------------------------------- - Arguments: - [json]: protein structures with compounds (dataset) - [list]: protein/protein complex uniprot id - - Return: - [list]: protein structure with compounds associated with a protein/protein complex PDB IDs - ''' - prot_compound_pcc = [] - for i in xrange(len(data)): - if 'uniprot_id' in data[i].keys(): - if len([e for e in data[i]['uniprot_id'] if e in uniprot]) >= 1: - prot_compound_pcc.append(data[i]['pdb_id']) - return prot_compound_pcc - - - -def get_data_prot_compound_ppc(data, uniprot): - ''' - Get data only of protein structure with compounds associated with a protein/protein complex - ----------------------------------------------------------------------------------------------- - Arguments: - [json]: protein structures with compounds (dataset) - [list]: protein/protein complex uniprot id - - Return: - [json]: protein structure with compounds associated with a protein/protein complex (dataset) - ''' - prot_compound_pcc_data = [] - for i in xrange(len(data)): - if 'uniprot_id' in data[i].keys(): - if len([e for e in data[i]['uniprot_id'] if e in uniprot]) >= 1: - prot_compound_pcc_data.append(data[i]) - return prot_compound_pcc_data - - - - -def get_compound_name(data): - ''' - Get protein compound names - -------------------------------------------------- - Argument: - [json]: protein structures with compounds (dataset) - - Return: - [list]: compound names - ** EXAMPLE: [u'FHB : 3-FLUORO-4-HYDROXYBENZOIC ACID', u'FE : FE (III) ION'] - ''' - compound = [] - for i in xrange(len(data)): - if 'compound_name' in data[i].keys(): - compound.extend(data[i]['compound_name']) - return compound - - - -def get_ion(compound_name): - ''' - Get protein ions - -------------------------------------------------- - Argument: - [list]: compound names - ** EXAMPLE: [u'FHB : 3-FLUORO-4-HYDROXYBENZOIC ACID', u'FE : FE (III) ION'] - - Return: - [list]: ions - ** EXAMPLE: ['FE'] - ''' - ion = [] - ion_unique = [] - for i in xrange(len(compound_name)): - if 'ION' in compound_name[i].split(' :')[1].split(' '): - ion.append(compound_name[i].split(' :')[0]) - for j in ion: - if j not in ion_unique: - ion_unique.append(j) - print ion_unique - return ion_unique - - - -def get_compound_without_ion(data, ions): - ''' - Get 3D structure with compound [compound_id], ion excluded - ---------------------------------------------------------- - Arguments: - [json]: protein structures (dataset) - [list]: ions - - Return: - [json]: protein structures with compounds != ions (dataset) - - !Warning! - --------- - Protein structures either with only compounds, or compounds and ions are included - ** EXAMPLE: [u'FHB : 3-FLUORO-4-HYDROXYBENZOIC ACID'] - or [u'FHB : 3-FLUORO-4-HYDROXYBENZOIC ACID', u'FE : FE (III) ION'] - - Only protein structures with only ions are excluded - ** EXAMPLE: [u'FE : FE (III) ION'] - ''' - compound_without_ion = [] - compound_with_ion = [] - for i in xrange(len(data)): - if 'compound_id' in data[i].keys(): - if len([e for e in data[i]['compound_id'] if e in ions]) == 0: - compound_without_ion.append(data[i]) - elif len([e for e in data[i]['compound_id'] if e in ions]) >= 1: - if len([e for e in data[i]['compound_id'] if e in ions]) != len(data[i]['compound_id']): - compound_with_ion.append(data[i]) - compound_ion = compound_without_ion + compound_with_ion - return compound_ion - - - -def to_txt(index): - with open('PROT-COMPOUNDS_PPC_2-20-18PDBe.txt', 'wb') as txtfile: - for i in index: - txtfile.write(i + '\n') - -def to_json(index): - with open('PROT-COMPOUNDS_PPC_2-20-18PDBe.json', 'wb') as jsonfile: - json.dump(index, jsonfile) - -def to_txt_ion(index): - with open('PROT-COMPOUNDS-noIONS_PPC_2-20-18PDBe.txt', 'wb') as txtfile: - for i in index: - txtfile.write(i + '\n') - -def to_json_ion(index): - with open('PROT-COMPOUNDS-noIONS_PPC_2-20-18PDBe.json', 'wb') as jsonfile: - json.dump(index, jsonfile) - -# ============================================================================== - -if __name__ == "__main__": - parser = argparse.ArgumentParser(description = - 'IDENTIFY PROTEIN STRUCTURE WITH COMPOUNDS INVOLVED IN PROTEIN-PROTEIN INTERACTION FROM PDBe') - parser.add_argument('pdbe', help = 'Input [.json file]: \ - PBDe (with [assembly_composition], [compound_id] and [uniprot_id] included)') - options = parser.parse_args() - setlogger() - main(options.pdbe) diff --git a/pyScripts/iPPI-DB_descriptors_V2.py b/pyScripts/iPPI-DB_descriptors_V2.py deleted file mode 100644 index ef516ce6..00000000 --- a/pyScripts/iPPI-DB_descriptors_V2.py +++ /dev/null @@ -1,320 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -Author: Alexandra Moine-Franel -Date: January 2018 -Version: 2 - - - -CALCULATE 2D/3D POCKET DESCRIPTORS FROM VOLSITE - - -Usage: [Script.py] [PDB_descriptor.txt] [PDB_2D-3Ddescriptors.csv] ------------------------------------------------------------------- - -[PDB_descriptor.txt]: - Input (txt format) - Pocket descriptors calculated by VolSite - -[PDB_2D-3Ddescriptors.csv]: - Output (csv format) - Pocket descriptors including: - * 89 descriptors from VolSite - * 10 descriptors using a linear combination of VolSite descriptors - (Kuenemann, 2016 Scientific Reports) - * 10 geometric descriptors from RDKit toolkit - (http://www.rdkit.org/docs/Overview.html, version 2017.09.1) -""" - -# ============================================================================= - -import os -import sys -import argparse -import logging -import csv -import pandas as pd -from rdkit import Chem -from rdkit.Chem import Descriptors3D - -# ============================================================================= - -LOG = logging.getLogger("CALCULATE 2D/3D POCKET DESCRIPTORS FROM VOLSITE") - - -VOLSITE_HEADER = [ - 'Volume', 'CZ', 'CA', 'O', 'OD1', 'OG', 'N', 'NZ', 'DU', - 'CZ40', 'CZ40-50', 'CZ50-60', 'CZ60-70', 'CZ70-80', 'CZ80-90', 'CZ90-100', 'CZ100-110', 'CZ110-120', 'CZ120', - 'CA40', 'CA40-50', 'CA50-60', 'CA60-70', 'CA70-80', 'CA80-90', 'CA90-100', 'CA100-110', 'CA110-120', 'CA120', - 'O40', 'O40-50', 'O50-60', 'O60-70', 'O70-80', 'O80-90', 'O90-100', 'O100-110', 'O110-120', 'O120', - 'OD140', 'OD140-50', 'OD150-60', 'OD160-70', 'OD170-80', 'OD180-90', 'OD190-100', 'OD1100-110', 'OD1110-120', - 'OD1120', - 'OG40', 'OG40-50', 'OG50-60', 'OG60-70', 'OG70-80', 'OG80-90', 'OG90-100', 'OG100-110', 'OG110-120', 'OG120', - 'N40', 'N40-50', 'N50-60', 'N60-70', 'N70-80', 'N80-90', 'N90-100', 'N100-110', 'N110-120', 'N120', - 'NZ40', 'NZ40-50', 'NZ50-60', 'NZ60-70', 'NZ70-80', 'NZ80-90', 'NZ90-100', 'NZ100-110', 'NZ110-120', 'NZ120', - 'DU40', 'DU40-50', 'DU50-60', 'DU60-70', 'DU70-80', 'DU80-90', 'DU90-100', 'DU100-110', 'DU110-120', 'DU120', - 'POCKET' -] - -DESC_COMBINATION = { - 'T40': ['CZ40', 'CA40', 'O40', 'OD140', 'OG40', 'N40', 'NZ40', 'DU40'], - 'T40-50': ['CZ40-50', 'CA40-50', 'O40-50', 'OD140-50', 'OG40-50', 'N40-50', 'NZ40-50', 'DU40-50'], - 'T50-60': ['CZ50-60', 'CA50-60', 'O50-60', 'OD150-60', 'OG50-60', 'N50-60', 'NZ50-60', 'DU50-60'], - 'T60-70': ['CZ60-70', 'CA60-70', 'O60-70', 'OD160-70', 'OG60-70', 'N60-70', 'NZ60-70', 'DU60-70'], - 'T70-80': ['CZ70-80', 'CA70-80', 'O70-80', 'OD170-80', 'OG70-80', 'N70-80', 'NZ70-80', 'DU70-80'], - 'T80-90': ['CZ80-90', 'CA80-90', 'O80-90', 'OD180-90', 'OG80-90', 'N80-90', 'NZ80-90', 'DU80-90'], - 'T90-100': ['CZ90-100', 'CA90-100', 'O90-100', 'OD190-100', 'OG90-100', 'N90-100', 'NZ90-100', 'DU90-100'], - 'T100-110': ['CZ100-110', 'CA100-110', 'O100-110', 'OD1100-110', 'OG100-110', 'N100-110', 'NZ100-110', 'DU100-110'], - 'T110-120': ['CZ110-120', 'CA110-120', 'O110-120', 'OD1110-120', 'OG110-120', 'N110-120', 'NZ110-120', 'DU110-120'], -} - -DESC_GEOM = [ - 'PMI1', 'PMI2', 'PMI3', 'NPR1', 'NPR2', 'Rgyr', - 'Asphericity', 'SpherocityIndex', 'Eccentricity', 'InertialShapeFactor' -] - -# ============================================================================= - -def setlogger(): - LOG.setLevel(logging.INFO) - ch = logging.StreamHandler() - ch.setLevel(logging.INFO) - formatter = logging.Formatter('%(asctime)s - %(name)s - %(funcName)s - \ - %(levelname)s - %(message)s') - ch.setFormatter(formatter) - LOG.addHandler(ch) - - -def main(volsitedescriptor, pocketdescriptor): - volsite_csv = descriptor_volsite(volsitedescriptor) - combination_csv = descriptor_combination(volsite_csv) - volsite_combination_csv = "{}volsite+combinaison.csv".format( - volsite_csv.rsplit("volsite.csv")[0]) - merge_csv(volsite_csv, combination_csv, volsite_combination_csv) - geometric_csv = descriptor_geometric(volsitedescriptor) - merge_csv(volsite_combination_csv, geometric_csv, pocketdescriptor) - - if os.path.exists(pocketdescriptor): - os.remove(volsite_csv) - os.remove(combination_csv) - os.remove(volsite_combination_csv) - os.remove(geometric_csv) - LOG.info('Finished!') - else: - LOG.error('Error: 2D/3D Pocket Descriptor file not found') - sys.exit(1) - - -def descriptor_volsite(txtfile): - """ - Convert VolSite output file from txt format to csv format - (descriptor headers added) - --------------------------------------------------------- - Argument: - [file]: VolSite descriptors (txt format) - - Return: - [file]: VolSite descriptors (csv format) - with descriptor headers - """ - try: - with open(txtfile, 'rb') as infile: - volsite_csv = "{}_volsite.csv".format(os.path.splitext(txtfile)[0]) - with open(volsite_csv, 'wb') as outfile: - in_text = csv.reader(infile, delimiter=' ') - out_csv = csv.writer(outfile) - out_csv.writerow(VOLSITE_HEADER) - for line in in_text: - out_csv.writerow(line) - except IOError, e: - LOG.error('{}'.format(e)) - sys.exit(1) - return volsite_csv - - -def descriptor_combination(volsite_descriptor_csv): - """ - Calculate and write linear combinations of VolSite descriptors to csv file - (Kuenemann, 2016 Scientific Reports) - --------------------------------------------------------------------------- - Argument: - [file]: VolSite descriptors (csv format) - - Return: - [file]: linear combinations of VolSite descriptors (csv format) - """ - with open(volsite_descriptor_csv, 'rb') as infile: - volsite = csv.reader(infile, delimiter = ',') - descriptors = volsite.next() - - # Create a dictionnary - # key(descriptor): values(list of all pocket values) - data = {} - # Count the number of pockets - numbpocket = 0 - for header in descriptors: - data[header] = [] - for pocket in volsite: - numbpocket += + 1 - for header, value in zip(descriptors, pocket): - data[header].append(value) - combination_csv = "{}combination.csv".format( - volsite_descriptor_csv.rsplit("volsite.csv")[0]) - with open(combination_csv, 'wb') as outfile: - combivolsite = csv.writer(outfile, delimiter = ',', - lineterminator = '\n') - # Descriptor headers and values have to be in variables - # to write them in a new file column by column (sep = comma) - descname = [] - cdata = [] - for dch in DESC_COMBINATION.keys(): - # dch = descriptor combination header (column) - bsum = [] - for p in range(numbpocket): - # p = pocket (row) - buriedness_values = [] - for colname in DESC_COMBINATION[dch]: - # Get buriedness value by descriptors - buriedness_values.append(float(data[colname][p])) - # Get sum of buriedness value by descriptor combinations - bsum.append(sum(buriedness_values)) - descname.append(dch) - cdata.append(bsum) - combivolsite.writerow(descname) - datatransposed = zip(*cdata) - for row in datatransposed: - combivolsite.writerow(row) - return combination_csv - - -def descriptor_geometric(txtfile): - """ - Write geometric descriptor from the negative image of binding pockets - detected by VolSite to csv file - --------------------------------------------------------------------------- - Argument: - [file]: VolSite descriptors (txt format) - - Return: - [file]: shape descriptors (csv format) - """ - with open(txtfile, 'rb') as infile: - pocketvolsite = csv.reader(infile, delimiter = ',') - # Get the number of pockets - numbpocket = 0 - for pocket in pocketvolsite: - numbpocket += + 1 - geometric_csv = "{}geometric.csv".format(os.path.splitext(txtfile)[0]) - with open(geometric_csv, 'wb') as outfile: - shape = csv.writer(outfile, delimiter = ',', lineterminator = '\n') - shape.writerow(DESC_GEOM) - # Calculate geometric descriptors pocket by pockets - for cavity in range(1, numbpocket + 1): - pocket_mol2 = "{}_CAVITY_N{}_ALL.mol2".format( - geometric_csv.rsplit("_")[0], cavity) - replace_mol2atom(pocket_mol2) - shape.writerow(calculate_shape_descriptor( - "temp_{}_CAVITY_N{}_ALL.mol2".format( - geometric_csv.rsplit("_")[0], cavity))) - os.remove("temp_{}_CAVITY_N{}_ALL.mol2".format( - geometric_csv.rsplit("_")[0], cavity)) - return geometric_csv - - -def replace_mol2atom(cavity): - """ - Replace the atom name assigned by VolSite to the probes by 'C' (carbone) - - Warning 1 - Fixing the RDKit error: 'atom' with a degree > 1 - - Warning 2 - RDKit needs the output file [PDB_CAVITY_Nx_ALL_temp.mol2] - NOT the link - ------------------------------------------------------------------ - Argument: - [file]: negative image of a binding pocket (mol2 format) - - Return: - [file]: negative image of a binding pocket with carbone as atom name - (mol2 format, temporary file used as input by RDKit) - """ - header = True - parsing = False - with open(cavity, 'rb') as infile: - with open("temp_{}.mol2".format(cavity.rsplit('.')[0]), 'wb') as tempf: - for line in infile: - if line.startswith('@<TRIPOS>ATOM'): - tempf.write(line)# + '\n') - header = False - parsing = True - continue - elif line.startswith('@<TRIPOS>BOND'): - parsing = False - - if header: - tempf.write(line) - if parsing: - tempf.write(line.replace(line.split()[5], 'C')) - #return tempf - - -def calculate_shape_descriptor(cavity): - """ - Calculate geometric descriptors with RDKit - ------------------------------------------ - Geometric descriptor details: - http://www.rdkit.org/Python_Docs/rdkit.Chem.Descriptors3D-module.html - - Argument: - [file]: negative image of a binding pocket (mol2 format) - - Return: - [list]: geometric descriptors - """ - mol2file = Chem.MolFromMol2File(cavity, sanitize = False, removeHs = False) - geom_val = [] - geom_val.append(Descriptors3D.PMI1(mol2file)) - geom_val.append(Descriptors3D.PMI2(mol2file)) - geom_val.append(Descriptors3D.PMI3(mol2file)) - geom_val.append(Descriptors3D.NPR1(mol2file)) - geom_val.append(Descriptors3D.NPR2(mol2file)) - geom_val.append(Descriptors3D.RadiusOfGyration(mol2file)) - geom_val.append(Descriptors3D.Asphericity(mol2file)) - geom_val.append(Descriptors3D.SpherocityIndex(mol2file)) - geom_val.append(Descriptors3D.Eccentricity(mol2file)) - geom_val.append(Descriptors3D.InertialShapeFactor(mol2file)) - return geom_val - - -def merge_csv(csv_infile1, csv_infile2, csv_outfile): - """ - Concatenate two csv files - ------------------------- - Arguments: - [file]: input (csv format) - [file]: input (csv format) - [file]: output filename (csv format) - """ - csv1 = pd.read_csv(csv_infile1) - csv2 = pd.read_csv(csv_infile2) - csv3 = pd.concat([csv1, csv2], axis = 1) - return csv3.to_csv(csv_outfile, sep = ',', index = False) - -# ============================================================================== - -if __name__ == "__main__": - parser = argparse.ArgumentParser(description = - 'Calculate 2D/3D Pocket Descriptors from VolSite') - parser.add_argument('volsitedescriptor', help = 'Input [.txt file]: \ - Pocket descriptors calculated by VolSite') - parser.add_argument('pocketdescriptor', help = 'Output [.csv filename]: \ - Pocket descriptors including \ - 89 descriptors from VolSite, \ - 10 descriptors using a combination of VolSite descriptors \ - and 10 geometric descriptors') - - options = parser.parse_args() - setlogger() - main(options.volsitedescriptor, options.pocketdescriptor) diff --git a/pyScripts/ion.pdf b/pyScripts/ion.pdf deleted file mode 100644 index 46ecfa3582acda4ea7252068a70a9f9a1259d6f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 121203 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%0A$h+i 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�jz5AvQ4jncthRF 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 LgIy{4tKa_xA&}`H diff --git a/pyScripts/ion.txt b/pyScripts/ion.txt deleted file mode 100644 index c2ec6798..00000000 --- a/pyScripts/ion.txt +++ /dev/null @@ -1,63 +0,0 @@ - -3NI -4MO -4PU -4TI -6MO -AG -AL -AU -AU3 -AUC -BA -BR -BS3 -CA -CD -CE -CF -CL -CO -CR -CS -CU -CU1 -ER3 -EU -EU3 -F -FE -FE2 -GA -HG -IOD -IR -IR3 -K -LA -LI -LU -MG -MN -MN3 -MOO -NA -NI -PD -PR -PT -PT4 -RB -RU -SB -SE4 -SM -SR -TB -TH -THE -TL -W -ZN -ZR - diff --git a/pyScripts/ppiinterface_dist.py b/pyScripts/ppiinterface_dist.py deleted file mode 100644 index e79e69ac..00000000 --- a/pyScripts/ppiinterface_dist.py +++ /dev/null @@ -1,335 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -Author: Alexandra Moine-Franel -Date: February 2018 -Version: 4 - - -IDENTIFY PROTEIN INTERFACE / POCKET RESIDUES - -Determine protein residues at a specific distance either from protein partner, -ligand (small molecule) or negative image of the pocket generated by VolSite. - - - -Usage: [Script.py] [TARGET] [PARTNER] -d (DISTANCE) -------------------------------------------------------------------------------- -[TARGET]: - Input (.mol2 or .pdb format) - Protein CHAIN - -[PARTNER]: - Input (.mol2 or .pdb format) - Negative image of the pocket generated by VolSite (.mol2 format) - OR Ligand (.pdb format) - OR Protein (.pdb format) - -(DISTANCE)- optionnal - Input (float or integer) - Distance threshold between the target and the partner - * Distance target-protein/ligand = 5 angstroms - by defaut - * Distance target-cavity = 3.5 angstroms - by default - ------------------- - -[POCKET_RESIDUES]: - Output (.txt format) - 'PDB-targetchain-partnerchain_distance.txt' (target-protein/ligand) - OR 'PDB-targetchain-CAVITY_Nx_ALL_distance.txt' (target-cavity) -""" - -# ============================================================================= - -import csv -import os -import sys -import argparse -import logging -#import time -from biopandas.mol2 import PandasMol2 -from biopandas.pdb import PandasPdb - -# ============================================================================= - -LOG = logging.getLogger("IDENTIFY PROTEIN INTERFACE / POCKET RESIDUES") - -# ============================================================================= - -def main(target, partner, distance): - #start = time.time() - if target and partner: - if os.path.splitext(target)[-1] == '.mol2' and \ - os.path.splitext(partner)[-1] == '.mol2': - mol2target = parse_mol2(target) - mol2partner = parse_mol2(partner) - mol2_respocket(mol2target, mol2partner, distance) - if os.path.exists('{}-{}_{}.txt'.format( \ - mol2target.code, mol2partner.code.rsplit('.mol2')[0], \ - distance)): - LOG.info('Finished!') - #end = time.time() - #print(end - start) - else: - LOG.error('Warning! [Output] Not found!') - sys.exit(1) - elif os.path.splitext(target)[-1] == '.pdb' and \ - os.path.splitext(partner)[-1] == '.pdb': - pdbtarget = parse_pdb(target) - pdbpartner = parse_pdb(partner) - if pdbpartner.df['ATOM'].empty == True: - pdb_resinterfacePL(pdbtarget, pdbpartner, distance) - if os.path.exists('{}-{}-{}_{}.txt'.format(pdbtarget.code, \ - pdbtarget.df['ATOM']['chain_id'][0], pdbpartner.df['HETATM']['residue_name'][0], \ - distance)): - LOG.info('Finished!') - #end = time.time() - #print(end - start) - else: - LOG.error('Warning! [Output] Not found!') - sys.exit(1) - else: - pdb_resinterfacePP(pdbtarget, pdbpartner, distance) - if os.path.exists('{}-{}-{}_{}.txt'.format(pdbtarget.code, \ - pdbtarget.df['ATOM']['chain_id'][0], pdbpartner.df['ATOM']['chain_id'][0], \ - distance)): - LOG.info('Finished!') - #end = time.time() - #print(end - start) - else: - LOG.error('Warning! [Output] Not found!') - sys.exit(1) - else: - LOG.error('Error! [TARGET] or [PARTNER] file not in .mol2 or .pdb format') - sys.exit(1) - elif target and not partner: - parser.error('Error: [PARTNER: protein, ligand or cavity] is required') - - - - -def parse_mol2(mol2file): - """ - Parse .mol2 file - --------------------------------------------------------------------------- - Argument: [file]: .mol2 format - Return: [dataframe] - """ - try: - pmol = PandasMol2().read_mol2(mol2file) - except(IOError), e: - LOG.error('{}'.format(e)) - sys.exit(1) - else: - return pmol - - -def parse_pdb(pdbfile): - """ - Parse .pdb file - --------------------------------------------------------------------------- - Argument: [file]: .pdb format - Return: [dataframe] - """ - try: - ppdb = PandasPdb().read_pdb(pdbfile) - except(IOError), e: - LOG.error('{}'.format(e)) - sys.exit(1) - else: - return ppdb - - -def mol2_respocket(mol2target, mol2partner, distance): - """ - Identify protein target residues at a specified distance from its partner - (i.e. the cavity negative image generated by VolSite). - --------------------------------------------------------------------------- - Arguments: - [file]: protein target (.mol2 format) - [file]: negative image of the binding pocket (.mol2 format) - [float]: distance threshold (by default, 3.5 angstroms) - Return: - [file]: pocket residues (.txt format) - """ - ppires = [] - with open('{}-{}_{}.txt'.format(mol2target.code, \ - mol2partner.code.rsplit('.mol2')[0], \ - distance), 'wb') as outfile: - for probe in xrange(len(mol2partner.df.atom_id)): - for atom in xrange(len(mol2target.df.atom_id)): - if mol2target.df.subst_name[atom] not in ppires: - xp = mol2target.df['x'][atom] - xc = mol2partner.df['x'][probe] - distX = x_dist(xp, xc) - if distX < float(distance): - yp = mol2target.df['y'][atom] - yc = mol2partner.df['y'][probe] - distXY = xy_dist(xp, yp, xc, yc) - if distXY < float(distance): - zp = mol2target.df['z'][atom] - zc = mol2partner.df['z'][probe] - distXYZ = euclidian_dist(xp, yp, zp, xc, yc, zc) - if distXYZ < float(distance): - ppires.append(mol2target.df.subst_name[atom]) - for resp in ppires: - outfile.write(resp + '\n') - - -def pdb_resinterfacePP(pdbtarget, pdbpartner, distance): - """ - Identify protein target residues at a specified distance from its partner - (i.e. protein) - --------------------------------------------------------------------------- - Arguments: - [file]: protein target (.pdb format) - [file]: protein partner (.pdb format) - [float]: distance threshold (by default, 5 angstroms) - Return: - [file]: interface residues (.txt format) - """ - ppires = [] - with open('{}-{}-{}_{}.txt'.format(pdbtarget.code, \ - pdbtarget.df['ATOM']['chain_id'][0], pdbpartner.df['ATOM']['chain_id'][0], \ - distance), 'wb') as outfile: - for atomt in xrange(len(pdbpartner.df['ATOM']['atom_number'])): - for atomp in xrange(len(pdbtarget.df['ATOM']['atom_number'])): - if ''.join(map(str, (pdbtarget.df['ATOM']['residue_name'][atomp], \ - pdbtarget.df['ATOM']['residue_number'][atomp]))) not in ppires: - xp = pdbtarget.df['ATOM']['x_coord'][atomp] - xc = pdbpartner.df['ATOM']['x_coord'][atomt] - distX = x_dist(xp, xc) - if distX < float(distance): - yp = pdbtarget.df['ATOM']['y_coord'][atomp] - yc = pdbpartner.df['ATOM']['y_coord'][atomt] - distXY = xy_dist(xp, yp, xc, yc) - if distXY < float(distance): - zp = pdbtarget.df['ATOM']['z_coord'][atomp] - zc = pdbpartner.df['ATOM']['z_coord'][atomt] - distXYZ = euclidian_dist(xp, yp, zp, xc, yc, zc) - if distXYZ < float(distance): - ppires.append(''.join(map(str, \ - (pdbtarget.df['ATOM']['residue_name'][atomp], \ - pdbtarget.df['ATOM']['residue_number'][atomp])))) - for resp in ppires: - outfile.write(resp + '\n') - - -def pdb_resinterfacePL(pdbtarget, pdbpartner, distance): - """ - Identify protein target residues at a specified distance from its partner - (i.e. ligand) - --------------------------------------------------------------------------- - Arguments: - [file]: protein target (.pdb format) - [file]: ligand (.pdb format) - [float]: distance threshold (by default, 5 angstroms) - Return: - [file]: pocket residues (.txt format) - """ - ppires = [] - with open('{}-{}-{}_{}.txt'.format(pdbtarget.code, \ - pdbtarget.df['ATOM']['chain_id'][0], pdbpartner.df['HETATM']['residue_name'][0], \ - distance), 'wb') as outfile: - for atomt in xrange(len(pdbpartner.df['HETATM']['atom_number'])): - for atomp in xrange(len(pdbtarget.df['ATOM']['atom_number'])): - if ''.join(map(str, (pdbtarget.df['ATOM']['residue_name'][atomp], \ - pdbtarget.df['ATOM']['residue_number'][atomp]))) not in ppires: - xp = pdbtarget.df['ATOM']['x_coord'][atomp] - xc = pdbpartner.df['HETATM']['x_coord'][atomt] - distX = x_dist(xp, xc) - if distX < float(distance): - yp = pdbtarget.df['ATOM']['y_coord'][atomp] - yc = pdbpartner.df['HETATM']['y_coord'][atomt] - - distXY = xy_dist(xp, yp, xc, yc) - if distXY < float(distance): - zp = pdbtarget.df['ATOM']['z_coord'][atomp] - zc = pdbpartner.df['HETATM']['z_coord'][atomt] - distXYZ = euclidian_dist(xp, yp, zp, xc, yc, zc) - if distXYZ < float(distance): - ppires.append(''.join(map(str, \ - (pdbtarget.df['ATOM']['residue_name'][atomp], \ - pdbtarget.df['ATOM']['residue_number'][atomp])))) - for resp in ppires: - outfile.write(resp + '\n') - - -def x_dist(x1, x2): - """ - Calculate the distance x between two 1D points - ---------------------------------------------------------------------- - Arguments: - [float]: coordinate x of target atom - coordinate x of partnet atom - Return: - [float]: distance - """ - dist = ((x1-x2)**2) ** 0.5 - return dist - - -def xy_dist(x1, y1, x2, y2): - """ - Calculate the distance xy between two 2D points - ---------------------------------------------------------------------- - Arguments: - [float]: coordinates xy of target atom - coordinates xy of partnet atom - Return: - [float]: distance - """ - dist = ((x1-x2)**2 + (y1-y2)**2) ** 0.5 - return dist - - -def euclidian_dist(x1, y1, z1, x2, y2, z2): - """ - Calculate the euclidian distance xyz between two 3D points - ---------------------------------------------------------------------- - Arguments: - [float]: coordinates xyz of target atom - coordinates xyz of partnet atom - Return: - [float]: distance - """ - dist = ((x1-x2)**2 + (y1-y2)**2 + (z1-z2)**2) ** 0.5 - return dist - - - -def setlogger(): - LOG.setLevel(logging.INFO) - ch = logging.StreamHandler() - ch.setLevel(logging.INFO) - formatter = logging.Formatter('%(asctime)s - %(name)s - %(funcName)s - \ - %(levelname)s - %(message)s') - ch.setFormatter(formatter) - LOG.addHandler(ch) - - -def default_distance(options): - if os.path.splitext(options.partner)[-1] == '.mol2': - options.distance = 3.5 - elif os.path.splitext(options.partner)[-1] == '.pdb': - options.distance = 5.0 - return options.distance - -# ============================================================================== - -if __name__ == "__main__": - parser = argparse.ArgumentParser(description = 'Identify interface/pocket residues') - parser.add_argument('target', \ - help = 'Input [.mol2 or .pdb file]: protein target') - parser.add_argument('partner', \ - help = 'Input [.pdb file]: protein partner or ligand; OR [.mol2 file]: cavity') - parser.add_argument('-d', dest = 'distance', type = float, \ - help = 'Input [float or integer]: distance threshold \ - {by default, target-protein/ligand = 5A; target-cavity = 3.5A}') - options = parser.parse_args() - - if options.distance is None: - default_distance(options) - - setlogger() - main(options.target, options.partner, options.distance) -- GitLab