Exemple #1
0
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)