IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bioinformatique Perl Discussion :

problème d'un mélange de séquences


Sujet :

Bioinformatique Perl

  1. #1
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut problème d'un mélange de séquences
    Bonjour,


    J'ai plusieurs séquences du même gène mais dont certaines sont dans le sens 5'->3' et d'autres dans le sens 3'->5'. Il faudrait un algorithme qui me permette de classer ces séquences en 2 groupes pour ensuite pouvoir effectuer la fonction revcom sur l'un d'eux. Quelle approche pourrais-je utiliser? A l'oeil, on voit clairement qu'il y a un mélange de 2 types de séquences mais existe-t'il un module capable de distinguer ces 2 groupes?

    Une approche naive, serait de prendre la première séquence et de calculer le pourcentage d'identité qu'elle possède avec toutes les autres séquences. Au deçà d'un certain seuil, la séquence analysée serait considérée comme prise dans le mauvais sens et retournée.

    Voyez-vous plus intelligent comme approche?


    Merci,
    -- Jasmine --

  2. #2
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Que pensez-vous de ce programme ... je sais qu'il reste des choses à améliorer mais il fonctionne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    #!/usr/local/bin/perl
     
     
    use strict;
    use warnings;
    use Bio::SeqIO;
     
    my $in  = Bio::SeqIO->new(-file => "carB.txt", '-format' => 'Fasta');
     
    # séquences qui serviront de référence aux deux groupes
    my $ref_seq1;
    my $ref_seq2;
     
     
    # liste des séquences du groupe1, du groupe2 et celles sans groupe
    my (@group1, @group2, @undef);
     
    # on récupère la première séquence qui servira de référence au groupe 1
    while ( my $seq = $in->next_seq()){
     
    	push (@group1, $seq->primary_id );
    	$ref_seq1 = $seq->seq;
    	last;
     
    }
     
    # clé : id    val : sequence
    my %sequences_tab;
     
    # décanucléotide contenu dans les séquences du groupe 1
    my ($ref1_polynuc) = $ref_seq1 =~ m/\w{10}(\w{10})/;
     
    # décanucléotide contenu dans les séquences du groupe 2
    my $ref2_polynuc;
     
     
     
     
    while ( my $seq = $in->next_seq()){
     
    	$sequences_tab{$seq->primary_id} = $seq->seq;
    	print "=> ".$seq->primary_id."\n";
    	# la séuqnece contient le polynucléotide de référénce du groupe 1
    	# mise dans le groupe 1
    	if ($seq->seq =~ m/$ref1_polynuc/){
    		push (@group1, $seq->primary_id );
    	}
    	# sinon est mise dans le groupe undef
    	else{
    		push (@undef, $seq->primary_id );
    		# le polynuc de référence du second groupe sera contenu dans
    		# la dernière séquence passant par ce else
    		($ref2_polynuc) = $seq->seq =~ /\w{10}(\w{10})/; 
    	}
    }
     
    # on vérifie que $ref2_polynuc n'appartient pas au groupe 1
    if($ref_seq1 =~ /$ref2_polynuc/){
    	# on doit changer de polynucléotide de référence du groupe 2
    	die "erreur du polynuc de référence du groupe 2";
     
    }
     
    for  my $i (0..$#undef){
     
    	if ($sequences_tab{$undef[$i]} =~ m/$ref2_polynuc/){
    		push (@group2, $undef[$i]);
    		delete $undef[$i];
    	}
    }
     
    # si il reste des séquences non classées, on recommence avec un autre polynucléotide de référence
    if (@undef > 0){
    	my ($ref1_polynuc) = $ref_seq1 =~ m/\w{30}(\w{10})/;
    	my ($ref2_polynuc) = $ref_seq2 =~ m/\w{30}(\w{10})/;
     
    	for  my $i (0..$#undef){
     
    		if ($sequences_tab{$undef[$i]} =~ m/$ref1_polynuc/){
    			push (@group1, $undef[$i]);
    			delete $undef[$i];
    		}
    		elsif ($sequences_tab{$undef[$i]} =~ m/$ref2_polynuc/){
    			push (@group2, $undef[$i]);
    			delete $undef[$i];
    		}
    	}
    }
     
    # si après 2 vérifications, toutes les séquences ne sont pas classées
    # on arrête le programme
    if (@undef){
    	die "toutes les séquences n'ont pas été classées";
    }
     
    print "groupe 1 :\n";
    map{print "\t$_\n";} @group1;
     
     
    print "groupe 2 :\n";
    map{print "\t$_\n";} @group2;

    Merci beaucoup pour vos conseils,
    -- Jasmine --

  3. #3
    Membre éclairé
    Profil pro
    Assistant recherche bioinformatique
    Inscrit en
    Novembre 2007
    Messages
    877
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Assistant recherche bioinformatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 877
    Points : 835
    Points
    835
    Par défaut
    Salut Jasmine80,
    L'alignement que tu proposais dans ton 1er message n'etait pas une bonne idée ?
    Est ce que tes séquences sont chevauchantes ?
    est-ce plutot comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ----    ---------     --------  ------
      ---------  ------------   --------  -------
    --------  ------  ---------  -------
    ou bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
              -----------------
      -----------------
        ----------------------------------
    Quelles sont leur tailles ?

    Pourquoi ne pas constituer un grand fichier fasta contenant les séquences ET leur reverse.
    Je suis sur qu'il existe des softs/scripts pour rassembler les contigs issus de séquencages.

    Z.

  4. #4
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Le problème est que j'ai 163 séquences du même gène, d'un peu plus de 3000 nucléotides et séparées par espèces dans plusieurs fichiers. Je dois dire que les séquences sont très belles et ont toutes le même ordre de taille, il n'y a donc pas de problème de chevauchement.

    Un autre problème est que quand j'ai mes 2 groupes, comment savoir lequel est du 5'->3' et lequel est du 3'->5'. Je vais considérer que le groupe majoritaire est le sens 5'->3' que je conserve. En cas d'égalité, ça sera au petit bonheur la chance.

    Le but est de créer un consensus par espèce pour ensuite en faire un alignement.

    Merci pour ton aide,
    -- Jasmine --

  5. #5
    Membre éclairé
    Profil pro
    Assistant recherche bioinformatique
    Inscrit en
    Novembre 2007
    Messages
    877
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Assistant recherche bioinformatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 877
    Points : 835
    Points
    835
    Par défaut
    Le sens global est facile a trouver car tu peux reperer le sens de la traduction : Il suffit de compter le nombre de codons stop dans chaque brins, pour les 3 cadres de lectures, ou les 6 en considerant le reverse.

    SI tout va bien, tu trouveras le 'bon sens', ou plutot le bon brin, et en plus, tu pourras separer tes 2 groupes.
    Z.

  6. #6
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    C'est encore plus simple que je ne pensais, toutes mes séquences possèdent le codon start ... je n'ai pas encore vérifié pour toutes mais si c'est le cas, je me suis vraiment cassée la tête inutilement .
    -- Jasmine --

  7. #7
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Voila comment je vais faire
    1) je recherche un codon start et stop si possible afin de remettre dans le sens 5'->3'
    2) pour les séquences sans start et stop, je vais me baser sur la recherche de motifs provenant des séquences du point 1.

    ^^ et si besoin est, je penserai à ton conseil de compter les codons stop. Un collègue m'a également parlé de softwares faisant des contig capables de remettre des séquences dans le même ordre.


    Merci pour tes conseils
    -- Jasmine --

  8. #8
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Le sens global est facile a trouver car tu peux reperer le sens de la traduction : Il suffit de compter le nombre de codons stop dans chaque brins, pour les 3 cadres de lectures, ou les 6 en considerant le reverse.
    Aurais-tu un module à me conseiller afin d'analyser mes 6 cadres de lecture?
    Je n'en ai pas besoin dans ce cas-ci mais ça me sera certainement utile tôt ou tard. A moins d'utiliser un module qui traduit mon ADN des 6 façons possibles afin de déterminer la bonne.

    Merci beaucoup,
    -- Jasmine --

  9. #9
    Membre éclairé
    Profil pro
    Assistant recherche bioinformatique
    Inscrit en
    Novembre 2007
    Messages
    877
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Assistant recherche bioinformatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 877
    Points : 835
    Points
    835
    Par défaut
    J'avais fait un outil en php pour faire ca, il y a longtemps. Par contre, je connais pas de module en Perl.
    Mais etant donné qu'il suffit de compter les codons stop, et d'en déduire que le cadre de lecture est celui qui en contient le moins (comment faire la protéine autrement !), l'affaire est encore plus simple en Perl. La différence doit être significative.
    Par contre, je ne me suis jamais penché sur les introns/exons. Tu bosses sur quoi ?
    Z.

  10. #10
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Je travaille sur énormément de choses en même temps, fungi, virus, bactéries ... j'aide les différentes équipes du labo au niveau bioinformatique. Je récupère et formate des séquence, je crée des base de données, j'effectue des alignements, des arbres, je recherche des motifs conservés ou au contraire qui ne le sont pas, je fais un peu de biostat ...
    Intron/exon ne nous intéresse pas, nous faisons essentiellement des PCR. Ce que je recherche, c'est une façon simple quand j'ai récupéré mes centaines de séquences de Genbank de les remettre dans le sens 5'->3'. A l'avenir, mes programme récupérerons directement cette information de GenBank, je pense que cela est possible et que ça serait le plus facile. En attendant, je regarde ce qui existe comme module.


    Merci,
    -- Jasmine --

  11. #11
    Membre confirmé
    Avatar de MaliciaR
    Inscrit en
    Juillet 2008
    Messages
    513
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juillet 2008
    Messages : 513
    Points : 600
    Points
    600
    Par défaut
    Salut,

    Citation Envoyé par Jasmine80 Voir le message
    Je n'en ai pas besoin dans ce cas-ci mais ça me sera certainement utile tôt ou tard. A moins d'utiliser un module qui traduit mon ADN des 6 façons possibles afin de déterminer la bonne.
    Ce que tu peux faire, c'est lancer un logiciel de prédiction de gènes dessus (genre, GeneMark ou Glimmer que je préfère moins car moins intuitif). Je crois qu'utiliser un tel soft est mieux plutôt que compter des codons STOP car dans les bactos tu as pas mal qui ont des %GC élevés (genre, M. tuberculosis et M.leprea, où il y a pas mal de pseudogénisation et faut des actions chez UPSA pour finir l'annotation) et chez qui tu rencontreras donc peu de STOP (eux, riches en AT). Inversement, si tu as des organismes à bas %GC, tu auras des STOP un peu partout...
    Pour la traduction dans les 6 cadres (pas dur), tu as les modules CodonTable.pm pour ne pas te taper les hash
    C'est en tout cas la façon dont j'avais procédé pour annoter plein de contigs et des reads métagénomiques. De même, j'utilise des profiles précis issus de la PFAM (des profiles HMM, encore) ou que je crée toute seule. Ca fonctionne bien, même si parfois fastidieux

    Hope that helps
    Le tact dans l'audace c'est de savoir jusqu'où on peut aller trop loin. Cocteau
    L'abjection la plus totale, ce n'est pas de trahir, c'est de ne jamais donner un commencement de réalité à ses rêves les plus fous. M. Moreau


    Les indispensables : Les règles, , FAQ et tutos avant de poster, et !
    Traduction de Linux Device Drivers 3 : venez participer
    membre de l'April - Promouvoir et défendre les logiciels libres

  12. #12
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Merci pour tes conseils Malicia.

    Citation Envoyé par MaliciaR Voir le message
    Ce que tu peux faire, c'est lancer un logiciel de prédiction de gènes dessus (genre, GeneMark ou Glimmer que je préfère moins car moins intuitif). Je crois qu'utiliser un tel soft est mieux plutôt que compter des codons STOP...
    Est-il possible d'utiliser un programme perl permettant d'automatiser cette tâche? Car je travaille généralement sur plusieurs centaines de séquences.

    Citation Envoyé par MaliciaR Voir le message
    Pour la traduction dans les 6 cadres (pas dur), tu as les modules CodonTable.pm pour ne pas te taper les hash
    Je vais y regarder.


    Merci,
    -- Jasmine --

  13. #13
    Membre éclairé
    Profil pro
    Assistant recherche bioinformatique
    Inscrit en
    Novembre 2007
    Messages
    877
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Assistant recherche bioinformatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 877
    Points : 835
    Points
    835
    Par défaut
    Donc tu ne travailles plus sur un meme gène entier ?

  14. #14
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Citation Envoyé par Zwiter Voir le message
    Donc tu ne travailles plus sur un meme gène entier ?
    J'ai plusieurs DB contenant des séquences de gènes complets et d'autres de séquences partielles, ça serait bien de tout remettre dans le sens 5'->3'.
    -- Jasmine --

  15. #15
    Membre confirmé
    Avatar de MaliciaR
    Inscrit en
    Juillet 2008
    Messages
    513
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juillet 2008
    Messages : 513
    Points : 600
    Points
    600
    Par défaut
    Citation Envoyé par Jasmine80 Voir le message
    Merci pour tes conseils Malicia.
    Avec plaisir


    Citation Envoyé par Jasmine80 Voir le message
    Est-il possible d'utiliser un programme perl permettant d'automatiser cette tâche? Car je travaille généralement sur plusieurs centaines de séquences.
    Je ne vois pas pourquoi pas. Je suis sous Linux, donc je le lance autrement... Mais tu peux toujours l'avoir en local et lancer un script dessus plutôt que de passer par un protocole http.
    Sinon, au pire, tu peux passer via le site de Pasteur (bioweb2.pasteur.fr) où ça ira plutôt vite.


    Citation Envoyé par Jasmine80 Voir le message
    Je vais y regarder.
    C'est celui-ci. Tu as tous les codes génétiques (utile, très utile quand on travaille avec pas mal d'organismes différents phylogénétiquement ).

    Si tu veux, je peux te filer mon script perl pour la traduction, ça t'évitera de perdre du temps pour le faire.
    Le tact dans l'audace c'est de savoir jusqu'où on peut aller trop loin. Cocteau
    L'abjection la plus totale, ce n'est pas de trahir, c'est de ne jamais donner un commencement de réalité à ses rêves les plus fous. M. Moreau


    Les indispensables : Les règles, , FAQ et tutos avant de poster, et !
    Traduction de Linux Device Drivers 3 : venez participer
    membre de l'April - Promouvoir et défendre les logiciels libres

  16. #16
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Citation Envoyé par MaliciaR Voir le message
    Si tu veux, je peux te filer mon script perl pour la traduction, ça t'évitera de perdre du temps pour le faire.
    Merci, c'est super sympa de ta part, je veux bien.

    Sinon, j'avais trouvé le script Free Perl Scripts for Bioinformatics ... mais ça serait mieux d'utiliser codonTable.pm et de travailler sur les 6 cadres de lecture.

    Si tu manipules beaucoup de séquences nucléiques ou protéiques et que tu ne connais pas le programme BioEdit, je te le recommande vivement, je m'en sers tout les jours, il permet de faire énormément de choses (dont la traduction) et il est gratuit.
    -- Jasmine --

  17. #17
    Membre confirmé
    Avatar de MaliciaR
    Inscrit en
    Juillet 2008
    Messages
    513
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juillet 2008
    Messages : 513
    Points : 600
    Points
    600
    Par défaut
    Citation Envoyé par Jasmine80 Voir le message
    Merci, c'est super sympa de ta part, je veux bien.
    L'entraide, toussa
    C'est le tout premier script que j'ai fait en Perl et je n'ai jamais eu la patience de m'occuper à l'écrire de façon plus succinte, donc on ne se moque pas

    Code Perl : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    #!/usr/bin/perl
     
    #nom du programme : traduction.pl
     
    #but : lire la séquence nucléique, l'organiser en une seule chaîne de caractères, faire la réverse complémentaire et traduction des deux dans les 3 cadres de lectures respectifs.
     
    use strict;
    use warnings;
    use myCodonTable;
     
     
     
    # print "Entrer le nom du fichier à ouvrir : ";
    # $fich_seq = <STDIN>;
    my $fich_seq = "/home/seq.fan";
     
    chomp $fich_seq;
     
     
    unless (open (FICH_SEQ, $fich_seq)) {
    	print "Error 0 : L'ouverture du fichier $fich_seq a échoué.\n";
    	exit;
    }
     
    my @seq;
    my $index = -1;
    while ( my $ligne = <FICH_SEQ> ) {
    	$ligne =~ s/\s//g;
    	if ($ligne =~ />.*/) {
    		$index++;
    		$seq[$index] = "$ligne";
    		$index++;
    	} else {
    		$seq[$index] .= $ligne;
    	}
    }
     
    close FICH_SEQ;
     
     
    my $prot = Bio::Tools::CodonTable->new(); #création d'un objet vide qui contiendra les séquences protéiques à la fin
    my $titreSeq = '';
     
     
    open(FICHIER, ">>/home/seq.prot") or die ("Error1: $!"); #ouverture du fichier où seront stockées les séquences protéiques
     
    foreach my $ligneSequence (@seq) {
    	if ($ligneSequence =~ />.*/) {
        # récupération du titre de la séquence à traiter
        $titreSeq = $ligneSequence;
    	} 
    	else {
    	my $aa = ''; #je déclare la variable scalaire vide qui contiendra le résultat de la traduction cadre 1
    		for (my $position = 0; $position < length $ligneSequence; $position += 3) 
    		#je lis par triplets à partir de la 1re base
               {
               $aa .= $prot -> translate (substr ( $ligneSequence, $position, 3)); #je traduis et stocke dans la protéine
               }
            print FICHIER $titreSeq."_1\n"; #j'écris le titre de chaque séquence en indiquant le cadre  
    		print FICHIER $aa."\n"; #j'écris la séquence elle-même
     
    	my $aa1 = '';
    		for (my $position = 1; $position < length $ligneSequence; $position += 3) 
    		#je lis par triplets à partir de la 2nde base
    		   {
               $aa1 .= $prot -> translate (substr ( $ligneSequence, $position, 3)); #je traduis et stocke dans la protéine
               }
    		print FICHIER $titreSeq."_2\n";
    		print FICHIER $aa1."\n";
     
    	my $aa2 = '';
    		for (my $position = 2; $position < length $ligneSequence; $position += 3) 
    		#je lis par triplets à partir de la 3e base
    		   {
               $aa2 .= $prot -> translate (substr ( $ligneSequence, $position, 3)); #je traduis et stocke dans la protéine
               }
    		print FICHIER $titreSeq."_3\n";
    		print FICHIER $aa2."\n";
             }
    }
     
    close FICHIER;
    #Le fichier ainsi créé contient les séquences protéiques issues de la traduction du brin "sens".
     
     
     
    ###
    # my aaR = nom générique pour les séquences protéiques issues de la traduction du brin inverse complémentaire
    #Traitement de la séquence révcomplémentaire :
     
    my $protR = Bio::Tools::CodonTable->new(); #création d'un objet vide qui contiendra les séquences protéiques à la fin
     
    my $titreSeqR = ''; #variable scalaire vide devant contenir le nom de chaque séquence
     
    #ouverture du fichier où seront stockées les séquences protéiques résultants de la traduction de la revcomplémentaire :
    open(FICHIER, ">>/home/seqR.prot"); 
     
    foreach my $ligneSequence (@seq) {
    	if ($ligneSequence =~ />.*/) {
        # récupération du titre de la séquence à traiter
        $titreSeqR = $ligneSequence;
    	} 
    	else {
    	my $aaR = '';
    	my $invseq = reverse $ligneSequence;
        $invseq =~ tr/acgtACGT/tgcaTGCA/;
        # traitement sur $invseq : lecture par triplets :
    		for (my $positionR = 0; $positionR < length $invseq; $positionR += 3) #je lis par triplets
               {
               $aaR .= $protR -> translate (substr ($invseq, $positionR, 3)); #je traduis et stocke dans la protéine
               }
               print FICHIER $titreSeqR."_-1\n";
    		   print FICHIER $aaR."\n";
     
        my $aaR1 = '';
    	$invseq = reverse $ligneSequence;
        $invseq =~ tr/acgtACGT/tgcaTGCA/;
        # traitement sur $invseq : lecture par triplets :
    		for (my $positionR = 1; $positionR < length $invseq; $positionR += 3) #je lis par triplets
               {
               $aaR1 .= $protR -> translate (substr ($invseq, $positionR, 3)); #je traduis et stocke dans la protéine
               }
               print FICHIER $titreSeqR."_-2\n";
    		   print FICHIER $aaR1."\n";
     
        my $aaR2 = '';
    	$invseq = reverse $ligneSequence;
        $invseq =~ tr/acgtACGT/tgcaTGCA/;
        # traitement sur $invseq : lecture par triplets :
    		for (my $positionR = 2; $positionR < length $invseq; $positionR += 3) #je lis par triplets
               {
               $aaR2 .= $protR -> translate (substr ($invseq, $positionR, 3)); #je traduis et stocke dans la protéine
               }
               print FICHIER $titreSeqR."_-3\n";
    		   print FICHIER $aaR2."\n";
             }
    }
    close FICHIER;
    Je stockais les séquences dans 2 fichiers différents, mais tu peux le modifier. Le module myCodonTable est le même que celui que je t'ai indiqué plus haut. Tu peux enlever la partie "mise en une seule ligne" (j'en ai absolument besoin vu que je cherche des motifs précis au sein des séquences).


    Donc, tu auras une sortie du type :
    >fragm0_1
    VYSSSLYIVAASLVSLASLLSLLLIILIARRHMIEYFYMIPSFVYMNFIVALNFTAIFLELIRA
    >fragm0_2
    YTLLPYTLSQQA*FL*PLCFHYYL*S**QGDI**SISI*FLRSFI*TLLSH*TSLQYF*S**EHLEC
    >fragm0_3
    ILFFPIHCRSKLSFFSLSAFIITYNLNSKETYDRVFLYDSFVRLYELYCRTKLHCNIFRVNKST*
    >fragm0_-1
    LLYQKLLMR*TSLDQPVIQHLLHCHSQLLWQLLV*CAQFNYIDERF*F*VSLAGQMTENMQYLI
    >fragm0_-2
    CCTKNS*CAKRL*ISL*SSTSSTVTPSYCGNYWSSVHNLIISMRDFNFRLV*LGK*RKICNIY
    >fragm0_-3
    VVPKTPNALNVFRSACNPAPPPLSLPAIVATTGLVCTI*LYR*EILILG*FSWANDGKYAIFTFT
    Où _1, _2, _-1,... donnent les différents cadres de lecture.


    Citation Envoyé par Jasmine80 Voir le message
    Sinon, j'avais trouvé le script Free Perl Scripts for Bioinformatics ... mais ça serait mieux d'utiliser codonTable.pm et de travailler sur les 6 cadres de lecture.
    Je vais regarder, je ne connais pas ce script Pourquoi tu as préféré l'utilisation de CodonTable.pm?


    Citation Envoyé par Jasmine80 Voir le message
    Si tu manipules beaucoup de séquences nucléiques ou protéiques et que tu ne connais pas le programme BioEdit, je te le recommande vivement, je m'en sers tout les jours, il permet de faire énormément de choses (dont la traduction) et il est gratuit.
    Merci, mais c'est que pour ouinedoze Je crée mon propre prog de manipulation de séquences parce que j'en traite énormément (je crois qu'à ce jour, j'en suis à un peu plus d'un million ).

    Hope that helps
    Le tact dans l'audace c'est de savoir jusqu'où on peut aller trop loin. Cocteau
    L'abjection la plus totale, ce n'est pas de trahir, c'est de ne jamais donner un commencement de réalité à ses rêves les plus fous. M. Moreau


    Les indispensables : Les règles, , FAQ et tutos avant de poster, et !
    Traduction de Linux Device Drivers 3 : venez participer
    membre de l'April - Promouvoir et défendre les logiciels libres

  18. #18
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Merci beaucoup pour ton code, je l'ai adapté à mes besoins, voila à quoi il ressemble :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    #!/usr/bin/perl
     
    #nom du programme : CodonTable.pl
     
    # but : lire la séquence nucléique, l'organiser en une seule chaîne de caractères, 
    # faire la réverse complémentaire et traduction des deux dans les 3 cadres de lectures respectifs.
     
    use strict;
    use warnings;
     
    use Bio::Tools::CodonTable;
    use Bio::SeqIO; 
    use FileHandle;
     
     
    # clé : id   valeur : seq
    my %seq;
     
    # clé : id général   valeur : un hash contenant les 6 seq traduites 
    my %seq_prot;
     
     
    # fichier au format fasta contenant les séquences à analyser
    my $in  = Bio::SeqIO->new(-file => "P:/Perl/scripts2/Files/seq.txt", '-format' => 'Fasta');
     
    # récupération des séquences du fichier
    while ( my $dna = $in->next_seq()){
     
        # séquence du fichier	
        $seq{$dna->primary_id} = $dna->seq;
     
        # récupération de sa séquence revcom
        my $revcom = reverse($dna->seq);
        $revcom =~ tr/ACGTRYKMHDVBacgtrykmhdvb/TGCAYRMKDHBVtgcayrmkdhbv/;
        $seq{$dna->primary_id."_revcom"} = $revcom;
    }
     
     
    #création d'un objet vide qui contiendra les séquences protéiques à la fin
    my $prot = Bio::Tools::CodonTable->new();
     
     
    while (my ($id, $sequence) = each %seq) {
     
    	my ($general_id) = ($id =~ m/^(.*?)(?:_revcom)?$/);
     
    	my $aa1 = ''; #je déclare la variable scalaire vide qui contiendra le résultat de la traduction cadre 1
    	for (my $position = 0; $position < length $sequence; $position += 3){
    	#je lis par triplets à partir de la 1re base
    		$aa1 .= $prot -> translate (substr ( $sequence, $position, 3)); #je traduis et stocke dans la protéine
    	}
    	${$seq_prot{$general_id}}{$id."_1"} = $aa1;
     
    	my $aa2 = '';
    	for (my $position = 1; $position < length $sequence; $position += 3){
    	#je lis par triplets à partir de la 2nde base
    		$aa2 .= $prot -> translate (substr ( $sequence, $position, 3)); #je traduis et stocke dans la protéine
    	}
    	${$seq_prot{$general_id}}{$id."_2"} = $aa2;
     
    	my $aa3 = '';
    	for (my $position = 2; $position < length $sequence; $position += 3){
    		#je lis par triplets à partir de la 3e base
    		$aa3 .= $prot -> translate (substr ( $sequence, $position, 3)); #je traduis et stocke dans la protéine
    	}
    	${$seq_prot{$general_id}}{$id."_3"} = $aa3;
    }
     
     
     
    # fichier qui contiendra les 6 traductions possibles 
    my $out_file = FileHandle->new (">P:/Perl/scripts2/Files/prot_seq.txt"); 
     
     
    no warnings "numeric"; 
     
    # recherche du nombre de codons stop pour les différents cadres de lecture 
    foreach my $general_id (sort {$a<=>$b} keys %seq_prot){
     
    	print $general_id."\n";
    	foreach my $num ("_1", "_2", "_3", "_revcom_1", "_revcom_2", "_revcom_3" ){
     
    		# écriture dans le fichier de sortie
    		print $out_file ">$general_id$num\n${$seq_prot{$general_id}}{$general_id.$num}}\n";
     
    		my $stop_number = () = ${$seq_prot{$general_id}}{$general_id.$num} =~ m/\*/g;
    		print "\t$general_id$num\t$stop_number\n";
    	}
    }
     
    close $out_file;
    -- Jasmine --

  19. #19
    Membre éclairé
    Profil pro
    Assistant recherche bioinformatique
    Inscrit en
    Novembre 2007
    Messages
    877
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Assistant recherche bioinformatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 877
    Points : 835
    Points
    835
    Par défaut
    Donc finalement, la solution reste au comptage des STOP.
    Quid de la prediction de gene dont vous parlier plus haut ?
    Z.

  20. #20
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Citation Envoyé par Zwiter Voir le message
    Donc finalement, la solution reste au comptage des STOP.
    Quid de la prediction de gene dont vous parlier plus haut ?
    Z.
    Non, cette fois, je m'en suis sortie plus simplement, grâce au premier et dernier codon de ma séquence. Mais, vu que tôt ou tard, je n'aurai plus de gènes complets et que j'aurai donc besoin de passer par le comptage des codons stop, et vu également que je suis toujours partante pour découvrir un nouveau module, je me suis intéressée de plus prêt à CodonTable dont à parler Malicia.

    Encore merci à tous les 2 pour votre aide, ce forum est vraiment composé de gens très sympas.
    -- Jasmine --

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Problème de selection (mélange) de session
    Par CAML dans le forum ASP.NET
    Réponses: 5
    Dernier message: 15/05/2009, 13h18
  2. Réponses: 7
    Dernier message: 16/01/2009, 21h41
  3. Réponses: 4
    Dernier message: 05/07/2007, 15h22
  4. Problème d'index, Mélange de données
    Par Herman dans le forum Access
    Réponses: 4
    Dernier message: 06/10/2006, 17h40
  5. problème de séquences
    Par alliance dans le forum Oracle
    Réponses: 14
    Dernier message: 27/10/2005, 11h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo