def resultat_prot( des, seq, nom_fichier, numero_fichier ): # Permet d'obtenir les tableaux de resultats et les graphiques correspondants de l'analyse de la sequence proteique. (Fonctionnement tres similaire a "resultat_ADN") """Pour fonctionner ce module fait appel a cinq autres modules qui doivent se trouver dans le meme repertoire courant que lui : recuperation_sequence_fasta, lire_fasta, analyse_ADN, analyse_proteine, et creation_seq_aleatoires. Cette procedure permet d'effectuer une etude de sequence proteique. Cette etude consiste en un calcul du nombre d'acide amines hydrophobe presents, du nombre d'acide amines charges presents, et de la charge net de la sequence entriere, et en un calcul de l'hydrophobicite moyenne dans chaque fenetre glissante de neuf acides amines. La procedure cree un a deux fichiers de sortie : un fichier tabule (pouvant etre ouvert avec un editeur de texte ou un tableur comme Excel) et une image des graphiques qu'elle engendre sous certaines conditions. Elle prend en arguments une description et la sequence correspondante au minimum. En troisieme argument elle prend la composition de la sequence (compo=) sous forme de dictionnaire, par defaut cette composition est calculee dans la procedure. De meme en quatrieme argument elle prend la liste des caracteres composants la sequence (keys=) (chacun ecrit entre guillemets), par defaut cette liste est calculee par la procedure.""" sortie = open(nom_fichier + "(%i).txt" % numero_fichier, 'a') compo = ap.composition(seq) keys = [] for key in compo.keys(): keys.append(key) nb_aa_hydrophobe, aa_charges, charge = ap.nb_residus_hydrophobes_et_residus_charges_et_chage_net( seq, compo) # Recuperation les resultats de l'etude de la sequence entiere. num_fenetre = [] sortie.write( "\taa hydrophobes\taa charges (%)\tcharge net" ) # Redaction du tableau de resultat de l'etude sur la sequence entiere (sur cette ligne et les 5 suivantes). resultats = "\nsequence entiere\t" + str( nb_aa_hydrophobe) + "\t%.3f" % aa_charges + "\t%.3f" % charge for ele in keys: sortie.write("\t%s" % ele) resultats += "\t" + str(compo[str(ele)]) resultats = resultats.replace(".", ",") sortie.write(resultats) if len( seq ) >= 9: # Dans ce "if" recuperation et traitement des resultats par fenetre glissante de 9 acide amines. hydrophobicite = ap.hydrophobicite_moyenne(seq, 9) sortie.write("\n \n \nFenetres\thydrophobicite moyenne\n") for i, ele in enumerate(hydrophobicite): num_fenetre.append(i + 1) resultatsfenetres = str(i + 1) + "\t%.3f" % hydrophobicite[i] + "\n" resultatsfenetres = resultatsfenetres.replace( ".", "," ) # On remplace les points par des virgules pour que les valeurs soient reconnus comme des nombres par Excel sortie.write(resultatsfenetres) error = "" type_error = 0 else: error = "---------------\nAttention : Execution incomplete du programme.\n\nSeule l'analyse sur la sequence entiere a pu etre effectuee.\nLes analyses par fenetre requierent une sequence de longueur minimum 9 acides amines.\n---------------\n" type_error = 500 sortie.close() fichier = "ok :)" return (fichier, error, type_error)
def resultat_prot( des, seq, compo, keys, con, plot_dispo=-1 ): # Permet d'obtenir les tableaux de resultats et les graphiques correspondants de l'annalyse de la sequence proteique. (Fonctionnement tres similaire a "resultat_ADN") "Pour fonctionner ce module fait appel a cinq autres modules qui doivent se trouver dans le meme repertoire courant que lui : recuperation_sequence_fasta, lire_fasta, analyse_ADN, analyse_proteine, et creation_seq_aleatoires. Cette procedure permet d'effectuer une etude de sequence proteique. Cette etude consiste en un calcul du nombre d'acide amines hydrophobe presents, du nombre d'acide amines charges presents, et de la charge net de la sequence entriere, et en un calcul de l'hydrophobicite moyenne dans chaque fenetre glissante de neuf acides amines. La procedure cree un a deux fichiers de sortie : un fichier tabule (pouvant etre ouvert avec un editeur de texte ou un tableur comme Excel) et une image des graphiques qu'elle engendre sous certaines conditions. Elle prend en arguments une description et la sequence correspondante au minimum. En troisieme argument elle prend la composition de la sequence (compo=) sous forme de dictionnaire, par defaut cette composition est calculee dans la procedure. De meme en quatrieme argument elle prend la liste des caracteres composants la sequence (keys=) (chacun ecrit entre guillemets), par defaut cette liste est calculee par la procedure. En dernier argument elle prend le boleen plot_dispo qui par defaut vaut True si le poste de tavail dispose de l'installation du module 'matplotlib' et False sinon, si l'utilisateur choisit d'entree plot_dispo=True en argument il doit lui meme s'assurere de cette installation au prealable, si au contraire il rentre plot_dispo=False, les graphiques ne seront pas generes." if compo == -1: # Dans quel cas ??? compo = ap.composition(seq) print('COMPO', compo) if keys == -1: keys = [] for key in compo.keys(): keys.append(key) # if plot_dispo==-1: # plot_dispo=plt_dispo nom = "Analyse_seq_prot%s\n" % (des) #------Envoie du nom fichier au client-------# nom = nom.encode() con.sendall(nom) rep = con.recv(255).decode() print("rep : %s" % rep) #---------------------------------------------# nb_aa_hydrophobe, aa_charges, charge = ap.nb_residus_hydrophobes_et_residus_charges_et_chage_net( seq, compo) # Recuperation les resultats de l'etude de la sequence entiere. num_fenetre = [] fichier = "\taa hydrophobes\taa charges (%)\tcharge net" # Redaction du tableau de resultat de l'etude sur la sequence entiere (sur cette ligne et les 5 suivantes). resultats = "\n sequence entiere\t" + str( nb_aa_hydrophobe) + "\t%.3f" % aa_charges + "\t" + str(charge) for ele in keys: fichier += "\t%s" % ele resultats += "\t" + str(compo[str(ele)]) resultats = resultats.replace(".", ",") fichier += resultats if len( seq ) >= 9: # Dans ce "if" recuperation et traitement des resultats par fenetre glissante de 9 acide amines. hydrophobicite = ap.hydrophobicite_moyenne(seq, con, 9) fichier += "\n \n \nFenetres\thydrophobicite moyenne\n" for i, ele in enumerate(hydrophobicite): num_fenetre.append(i + 1) resultatsfenetres = str(i + 1) + "\t%.3f" % hydrophobicite[i] + "\n" resultatsfenetres = resultatsfenetres.replace( ".", "," ) # On remplace les points par des virgules pour que les valeurs soient reconnus comme des nombres par Excel fichier += resultatsfenetres #-------Envoie du fichier au client-----------# print("Envoi du fichier : type %s" % type(fichier)) fichier = fichier.encode() print("taille du buffer : %s" % str(len(fichier))) taille = str(len(fichier)) con.sendall(taille.encode()) rep = con.recv(255).decode() print("rep=%s" % rep) if rep == "OK": con.sendall(fichier) #---------------------------------------------# # if plot_dispo: # Seulement si le module matplotlib est installe sur le poste de traville utilise. # plt.subplot(212) # plt.title("Hydrophobicite moyennes de chaque fenetre glissante de 9 acides amines de la sequence") # plt.grid() # plt.axhline(0, linestyle=':', color='k') # plt.plot(num_fenetre,hydrophobicite) # plt.xlabel("Numero des fenetres glissantes") # plt.ylabel("hydrophobicite (Echelle de Fauchere et Peliska)") # if max(hydrophobicite)>0: # plt.annotate("",xy=(0.5,0), xycoords='data',xytext=(0.5,max(hydrophobicite)), textcoords='data',arrowprops=dict(arrowstyle="<->",connectionstyle="arc3",color='r'), ) # plt.text(-max(num_fenetre)/50,max(hydrophobicite)-0.2, "Partie hydrophobe", fontsize=8,color='r',rotation=85) # if min(hydrophobicite)<0: # plt.annotate("",xy=(0.5,0), xycoords='data',xytext=(0.5,min(hydrophobicite)), textcoords='data',arrowprops=dict(arrowstyle="<->",connectionstyle="arc3",color='b'), ) # plt.text(-max(num_fenetre)/50,0, "Partie hydrophile", fontsize=8,color='b',rotation=85) # fichier_existe=True # Variable permettant de verifier que le fichier qu'on va creer n'en ecrase pas un preexistant. # numero_fichier=0 # while fichier_existe: # Tant que le fichier "nom_fichier.png" existe le nom change. # try: # sortie=open(nom_fichier+"(%i).png" % numero_fichier,'r') # Test si le fichier "nom.py" existe. # except FileNotFoundError: # fichier_existe=False # else: # sortie.close() # numero_fichier+=1 # nom_fichier=nom_fichier.replace("(%i)" % (numero_fichier-1),"(%i)" % numero_fichier) # Si le fichier "nom_fichier.png" existe on change de nom pour ne pas l'ecraser. # plt.savefig(nom_fichier+"(%i).png" % numero_fichier,format='png') # plt.show() else: con.sendall( "---------------\nAttention : Execution incomplete du programme.\n\nSeule l'analyse sur la sequence entiere a pu etre effectuee.\nLes annalyses par fenetre requierent une sequence de longueur minimum 9 acides amines.\n---------------\n" .encode()) con.recv(255).decode() #-------Envoie du fichier au client-----------# fichier = fichier.encode() taille = str(len(fichier)) con.sendall(taille.encode()) rep = con.recv(255).decode() if rep == "OK": con.sendall(fichier)
def resultat_prot( des, seq, compo, keys, con ): # Permet d'obtenir les tableaux de resultats et les graphiques correspondants de l'analyse de la sequence proteique. (Fonctionnement tres similaire a "resultat_ADN") """Pour fonctionner ce module fait appel a cinq autres modules qui doivent se trouver dans le meme repertoire courant que lui : recuperation_sequence_fasta, lire_fasta, analyse_ADN, analyse_proteine, et creation_seq_aleatoires. Cette procedure permet d'effectuer une etude de sequence proteique. Cette etude consiste en un calcul du nombre d'acide amines hydrophobe presents, du nombre d'acide amines charges presents, et de la charge net de la sequence entriere, et en un calcul de l'hydrophobicite moyenne dans chaque fenetre glissante de neuf acides amines. La procedure cree un a deux fichiers de sortie : un fichier tabule (pouvant etre ouvert avec un editeur de texte ou un tableur comme Excel) et une image des graphiques qu'elle engendre sous certaines conditions. Elle prend en arguments une description et la sequence correspondante au minimum. En troisieme argument elle prend la composition de la sequence (compo=) sous forme de dictionnaire, par defaut cette composition est calculee dans la procedure. De meme en quatrieme argument elle prend la liste des caracteres composants la sequence (keys=) (chacun ecrit entre guillemets), par defaut cette liste est calculee par la procedure.""" if compo == -1: compo = ap.composition(seq) if keys == -1: keys = [] for key in compo.keys(): keys.append(key) nom = "Analyse_seq_prot_%s\n" % (des) #------Envoie du nom fichier au client-------# nom = nom.encode() con.sendall(nom) rep = con.recv(255).decode() #---------------------------------------------# nb_aa_hydrophobe, aa_charges, charge = ap.nb_residus_hydrophobes_et_residus_charges_et_chage_net( seq, compo) # Recuperation les resultats de l'etude de la sequence entiere. num_fenetre = [] fichier = "\taa hydrophobes\taa charges (%)\tcharge net" # Redaction du tableau de resultat de l'etude sur la sequence entiere (sur cette ligne et les 5 suivantes). resultats = "\n sequence entiere\t" + str( nb_aa_hydrophobe) + "\t%.3f" % aa_charges + "\t" + str(charge) for ele in keys: fichier += "\t%s" % ele resultats += "\t" + str(compo[str(ele)]) resultats = resultats.replace(".", ",") fichier += resultats if len( seq ) >= 9: # Dans ce "if" recuperation et traitement des resultats par fenetre glissante de 9 acide amines. hydrophobicite = ap.hydrophobicite_moyenne(seq, con, 9) fichier += "\n \n \nFenetres\thydrophobicite moyenne\n" for i, ele in enumerate(hydrophobicite): num_fenetre.append(i + 1) resultatsfenetres = str(i + 1) + "\t%.3f" % hydrophobicite[i] + "\n" resultatsfenetres = resultatsfenetres.replace( ".", "," ) # On remplace les points par des virgules pour que les valeurs soient reconnus comme des nombres par Excel fichier += resultatsfenetres #-------Envoie du fichier au client-----------# fichier = fichier.encode() taille = str(len(fichier)) con.sendall(taille.encode()) rep = con.recv(255).decode() if rep == "OK": if int( taille ) > 30000: # Si la taille du fichier à envoyer est supérieur à 30kb if int(taille) % 30000 != 0: nb_file = (int(taille) // 30000) + 1 # Nombre de fichiers à envoyer con.sendall( str(nb_file).encode()) # Envoie du nombre de fichiers rep = con.recv(255).decode() # Confirmation de la réception for i in range(0, nb_file - 1): # Envoi par paquet de 30kb fichier_c = fichier[i * 30000:(i + 1) * 30000] con.sendall(fichier_c) rep = con.recv( 255).decode() # Confirmation de la réception last_file_size = int(taille) - ( (int(taille) // 30000) * 30000) # Taille du dernier block last_file_size = str(last_file_size) con.sendall(last_file_size.encode()) # Envoi de la taille rep = con.recv(255).decode() # Confirmation de la réception last_file = fichier[( (int(taille) // 30000) * 30000):int(taille)] # Envoi du dernier block con.sendall(last_file) rep = con.recv(255).decode() else: # La taille des résultats est un multiple de 30000 nb_file = (int(taille) // 30000 ) # Nombre de fichiers à envoyer con.sendall( str(nb_file).encode()) # Envoie du nombre de fichiers rep = con.recv(255).decode() # Confirmation de la réception for i in range(0, nb_file): # Envoi par paquet de 30kb fichier_c = fichier[i * 30000:(i + 1) * 30000] con.sendall(fichier_c) rep = con.recv( 255).decode() # Confirmation de la réception else: con.sendall(fichier) rep = con.recv(255).decode() #---------------------------------------------# else: #--------------Mise en reseau-----------------# con.sendall( "---------------\nAttention : Execution incomplete du programme.\n\nSeule l'analyse sur la sequence entiere a pu etre effectuee.\nLes analyses par fenetre requierent une sequence de longueur minimum 9 acides amines.\n---------------\n" .encode()) con.recv(255).decode() #---------------------------------------------# #-------Envoie du fichier au client-----------# fichier = fichier.encode() taille = str(len(fichier)) con.sendall(taille.encode()) rep = con.recv(255).decode() if rep == "OK": con.sendall(fichier)