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 :

couper une séquence fasta en petite séquence


Sujet :

Bioinformatique Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Janvier 2010
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 257
    Par défaut couper une séquence fasta en petite séquence
    Bonjour à tous,
    Je suis face à un problème que je n'arrive pas à résoudre. Peut être puis je le faire en perl.
    J'ai une séquence de taille N. Je cherche à la "couper" en petit fragment, mais la moyenne des tailles de ces petits fragments doit être égale à une certaine valeur (qui peut changer), mais pour l'exemple mettons 50 à +/- 2 nt près.
    Les séquences doivent se suivre mais pas se chevaucher !
    Je ne sais vraiment pas comment m'y prendre. Quelqu'un aurait une idée ?
    j'ai fait une image pour illustrer mon problème.Nom : Capture01.jpg
Affichages : 383
Taille : 16,1 Ko
    Une idée pour me faire avancer ?
    Merci d'avance !

  2. #2
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Billets dans le blog
    1
    Par défaut
    Oui, ça paraît tout-à-fait possible en PerL

    Pourrais-tu donner un échantillon de cette séquence? Je suppose qu'il s'agit d'une série de lettres bout à bout, du genre ATGGGTACCAAT. Et je suppose que la séquence figurera dans une variable (ou que l'on peut la lire dans une variable à partir d'un fichier).

    Peut-on couper à n'importe quel endroit dans la séquence?

    Enfin, si je comprends bien, tu veux varier la taille des fragments par rapport à la valeur pivot choisie pour que le dernier fragment ne soit pas beaucoup plus petit que les autres. C'est cela? Si oui, il faut trouver la taille totale de la séquence et, dans l'exemple d'une valeur pivot de 50, trouver la valeur comprise entre 48 et 52 qui divise exactement la taille de la séquence ou, à défaut, celle donnant le plus grand reste.

    J'attends tes réponses à ces questions avant de te proposer une solution en Perl.

  3. #3
    Membre éclairé
    Inscrit en
    Janvier 2010
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 257
    Par défaut
    Citation Envoyé par Lolo78 Voir le message
    Pourrais-tu donner un échantillon de cette séquence?
    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CCGCAGTCGCCGCCTCCGCAGCAGCAGCAGCAGCAGCAACAACTACAACAACAACAACAACAGCCACCAGGGCAGCAACAACCACACCAGTTACAACAGCCCCAACACCAACAGCGATAACAACAACATATAGATCGCGGAATCTGCTGAAAGCCACCGCCAAAGTGAAGAAGAAGAAAAAGTGGAAGCAAATCTCCTTCGTCGACGACCAGCAACGCTTGAAGCAAGCAGCGACGTCGGCGGAGCGCAAACGCTCCACCAGCAGCGCCCCGCCCGCCCTCGAGAGCAACGTACCGCCGCGGTTGGGGCGCTTTCTGCGGCAAAAGAGCAGCGAAACTAACAGCGCTGCAACGTCAGCAGCAGCGGCGGCAGTGCAAACGGAAGCGGAAACAGGACGCCGGAAATCGTCGGCGGCATCGATAATCGCAGCGGCAGCGGGCGCTGCTGGTTTGCACAACAATAACAGCAGCAGCTGCGCAGCGACCGCCAGCGAGGAGCAAAACTCGAGCGGTACGCTCACCGGCAGCAGCGGCAATACTTCCACGTCGACGTGGTGCGGCAGCATCAACTTCCTGGTGTATATGGTGTGCTCGTTTTGCTGCTGTTGCTACAACTTTCGCAATTCGCCTTTCGATGTAGAAAATGGCCAGGGCGCTAGATCACCGCTCGAGGGCGGCTCACCCAGCGCCGGTTTGGTACTACAGAATTTGCCGCAGCGTCGCGAATCGTTTCTATATCGCTCCGATTCGGACTTTGAGATGTCACCCAAGTCCATGTCCCGAAACTCAAGCATCGCTAGCGAAAGGTTTAAAGAACAGGAAGCCTCTATACTCGTTGACCGATCCCATGGCGAGGATCTCATTGTGACGCCTTTCGCCCAAATTTTAGCCAGCTTACGTTCAGTGCGCAACAATTTATTAAGTCTGACAAATGTTCCAGCATCAAACAAATCCAGGCGGCCCAACCAATCGTCGTCGGCCTCGCGATCAGGAAATCCACCAGGAGCCCCGCTATCCCAAGGCGAGGAGGCATACACCCGCCTGGCCACCGACACAATCGAGGAGCTGGACTGGTGCCTCGACCAGCTGGAGACCATCCAGACCCATCGCAGCGTCTCCGACATGGCGTCGCTTAAGTTCAAACGCATGCTCAACAAGGAGCTGTCGCACTTTAGCGAGTCCAGCAGATCGGGAAATCAGATTTCCGAATATATATGTTCCACATTTTTGGACAAGCAACAGGAGTTCGACTTGCCATCGCTGCGCGTGGAGGATAATCCCGAGCTGGTCGCCGCCAATGCAGCCGCTGGTCAACAGTCCGCTGGACAGTATGCACGCTCCCGATCGCCGCGCGGTCCGCCCATGTCGCAGATCAGCGGCGTGAAGAGACCGCTGTCGCATACGAATAGCTTTACCGGCGAACGTTTGCCCACCTTCGGTGTGGAGACACCCAGGGAGAATGAGCTGGGCACGCTGCTCGGCGAACTGGACACCTGGGGTATTCAGATATTCAGCATCGGCGAGTTCAGTGTCAATCGACCGCTCACCTGTGTGGCATACACCATATTTCAGAGTAGAGAATTACTGACCAGTCTTATGATACCACCGAAAACTTTTCTTAACTTTATGTCTACTCTGGAGGACCACTACGTCAAAGACAATCCGTTTCACAATTCGCTGCATGCCGCCGATGTGACACAAAGCACTAATGTGCTACTCAATACACCGGCGCTGGAGGGCGTATTCACGCCGCTCGAAGTGGGCGGGGCGCTGTTCGCCGCTTGCATACACGATGTTGATCATCCCGGCTTAACCAATCAGTTCTTGGTTAACTCAAGTTCCGAACTAGCATTAATGTACAATGACGAATCTGTTTTGGAAAATCATCATTTAGCTGTTGCCTTTAAATTATTACAAAATCAAGGATGTGATATATTCTGTAATATGCAAAAGAAACAACGCCAAACATTGAGGAAAATGGTTATTGATATTGTGCTGTCCACGGACATGTCCAAGCACATGAGTCTGCTGGCCGACCTAAAGACAATGGTGGAAACCAAAAAGGTGGCCGGCTCCGGAGTACTGCTGCTGGACAACTACACCGATCGCATACAGGTGCTTGAGAATCTGGTGCACTGCGCCGATCTGAGCAATCCCACCAAGCCGCTGCCGCTTTACAAGCGCTGGGTAGCCCTGCTCATGGAGGAGTTCTTCCTGCAGGGCGATAAGGAACGCGAATCGGGCATGGACATTAGTCCCATGTGCGATCGCCATAATGCCACCATTGAGAAGTCGCAGGTGGGCTTCATCGACTACATCGTCCACCCGCTATGGGAGACCTGGGCGGACCTGGTGCATCCGGATGCCCAGGATATACTCGACACGCTTGAAGAGAACAGAGACTACTACCAGAGCATGATACCGCCTTCGCCGCCGCCATCGGGCGTCGATGAGAATCCGCAGGAGGACAGGATACGCTTTCAAGTAACCCTTGAGGAATCCGATCAGGAGAACCTCGCCGAACTGGAGGAGGGCGACGAGAGTGGTGGCGAGAGCACCACCACAGGCACAACCGGAACCACCGCTGCATCCGCGCTAAGCGGAGCTGGTGGCGGTGGCGGTGGAGGCGGGGGAATGGCACCCAGAACGGGTGGCTGCCAAAACCAACCGCAACACGGTGGAATGTGACGGAGAGTCGTGGGAATTTATCGCAAATTACAGGAAAAGGCTCACAACTTTTTCCTATTACGTTAGTGACTACTATTAACACAGAAAAAACCAAAACAAAAACCTAAAACGAAAAGCAAAAAAAAAAACAAAGAAAAACTCTTGGAAAAAATGC
    Citation Envoyé par Lolo78 Voir le message
    Peut-on couper à n'importe quel endroit dans la séquence?
    Oui on peut couper à n'importe quel endroit dans la séquence.
    Petite rectification, des fragments peuvent se chevaucher.
    J'ai également oublié de préciser que j'ai un nombre attendu de fragments (ici on peut prendre par exemple 10 fragments)

    Par exemple :
    ACAACAATAACAGCAGCAGCTGCGCAGCGACCGCCAGCGAGGAGCAAAACTCGAGCGGTACGCTCACCGGCAGCAGCGGCAATACTTCCACGTCGACGTGGTGCGGCAGCATCAACTTCCTGGTGT
    Peut donner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ACAACAATAACAGCAGCAGCTGCGCAGCG
    ------------------GCTGCGCAGCGACCGCCAGCGAGGA
    ---------------GCAGCTGCGCAGCGACCGCCAGCGAGGAGCA
    Etc ...
    La seule condition : la moyenne des longueurs des fragments générés doit être comprise entre 48 et 52.

  4. #4
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 247
    Par défaut
    En fait, si tu ne mets pas de contraintes "biologique", ne pas couper après A ou pas entre G et C... il n'y a acune raison pour que tes morceaux aient une taille variable, tu choisis juste leur taille et il te découpe tes morceaux.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    use strict;
     
    my $chaine="CCGCAGTCGCCGCCTCCGCAGCAGCAGCAGCAGCAGCAACAACTACAACAACAACAACAACAGCCACCAGGGCAGCAACAACCACACCAGTTACAACAGCCCCAACACCAACAGCGATAACAACAACATATAGATCGCGGAATCTGCTGAAAGCCACCGCCAAAGTGAAGAAGAAGAAAAAGTGGAAGCAAATCTCCTTCGTCGACGACCAGCAACGCTTGAAGCAAGCAGCGACGTCGGCGGAGCGCAAACGCTCCACCAGCAGCGCCCCGCCCGCCCTCGAGAGCAACGTACCGCCGCGGTTGGGGCGCTTTCTGCGGCAAAAGAGCAGCGAAACTAACAGCGCTGCAACGTCAGCAGCAGCGGCGGCAGTGCAAACGGAAGCGGAAACAGGACGCCGGAAATCGTCGGCGGCATCGATAATCGCAGCGGCAGCGGGCGCTGCTGGTTTGCACAACAATAACAGCAGCAGCTGCGCAGCGACCGCCAGCGAGGAGCAAAACTCGAGCGGTACGCTCACCGGCAGCAGCGGCAATACTTCCACGTCGACGTGGTGCGGCAGCATCAACTTCCTGGTGTATATGG"; 
    my $pas = 50;
    my $fin = length($chaine)-$pas-1; 
    for (my $deb=0; $deb<=$fin; $deb++){
        my $morceau = substr($chaine, $deb, $pas);
        print "$morceau\n"
    }
    comme ça tu récupères tous les sous-chaines de longueur 50 dans ta chaine

  5. #5
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    tu peux essayer ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    use strict;
    use warnings;
    use Data::Dumper;
     
    my $len = shift;
     
    my $seq = "ACAACAATAACAGCAGCAGCTGCGCAGCGACCGCCAGCGAGGAGCAAAACTCGAGCGGTACGCTCACCGGCAGCAGCGGCAATACTTCCACGTCGACGTGGTGCGGCAGCATCAACTTCCTGGTGT";
     
    my @fragments = unpack ("(a$len)*" , $seq); # faire des fragments de taille $len
    $fragments[-1] = $1 if ($seq =~ /(\w{$len})$/); # mettre le dernier fragment en chevauchement pour qu'il ait la taille $len
    print Dumper \@fragments;
    Ce qui donne:
    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
    $ perl fasta.pl 9
    $VAR1 = [
              'ACAACAATA',
              'ACAGCAGCA',
              'GCTGCGCAG',
              'CGACCGCCA',
              'GCGAGGAGC',
              'AAAACTCGA',
              'GCGGTACGC',
              'TCACCGGCA',
              'GCAGCGGCA',
              'ATACTTCCA',
              'CGTCGACGT',
              'GGTGCGGCA',
              'GCATCAACT',
              'TCCTGGTGT'
            ];
     
    $ perl fasta.pl 20
    $VAR1 = [
              'ACAACAATAACAGCAGCAGC',
              'TGCGCAGCGACCGCCAGCGA',
              'GGAGCAAAACTCGAGCGGTA',
              'CGCTCACCGGCAGCAGCGGC',
              'AATACTTCCACGTCGACGTG',
              'GTGCGGCAGCATCAACTTCC',
              'CAGCATCAACTTCCTGGTGT'
            ];
    EDIT: je n'avais pas vu les deux derniers posts quand j'ai posté ce qui précède. La solution ci-dessus ne fonctionne évidemment pas avec ces nouvelles contraintes. Plus trop le temps maintenant, je verrai plus tard si je peux trouver quelque chose correspondant à tes nouvelles contraintes.

  6. #6
    Membre éclairé
    Inscrit en
    Janvier 2010
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 257
    Par défaut
    Je vais voir si je peux adapter ceci à mon problème de départ.

  7. #7
    Membre éclairé
    Inscrit en
    Janvier 2010
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 257
    Par défaut
    Malheureusement c'est beaucoup plus compliqué que cela ...
    Il faut couper aléatoirement, avec des tailles différentes (entre 16 nt et 50 nt) , et des séquences qui se chevauchent, comme dans mon exemple. et tout cela avec des fragments qui ont une moyenne de taille de 50 +-2nt.
    j'ai commencé à faire ceci avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nucleotide_cut = int(rand(length(ma_sequence))
    Mais je n'ai pas encore fini. Je pense calculer la taille des séquences générées et l'ajouter à une variable, et choisir un nucléotide aléatoire dans ma séquence jusqu’à ce que la moyenne soit comprise entre 48 et 52 nt. Il faut aussi que je prenne en compte le nombre de fragments attendu mais je ne sais pas trop comment ...

  8. #8
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Isabella83 Voir le message
    Il faut couper aléatoirement, avec des tailles différentes (entre 16 nt et 50 nt) , et des séquences qui se chevauchent, comme dans mon exemple. et tout cela avec des fragments qui ont une moyenne de taille de 50 +-2nt.
    Cela me paraît contradictoire. si tu choisis des tailles aléatoires comprises entre 16 et 50 nt, la probabilité d'obtenir une moyenne de 51 ou 52 est nulle, et celle d'obtenir 48, 49 ou 50, sans être nulle, est proche de 0, surtout si ta séquence d'origine est un tant soit peu longue et mène à un nombre important de fragments.

  9. #9
    Membre éclairé
    Inscrit en
    Janvier 2010
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 257
    Par défaut
    Pensez vous que cela soit possible en enlevant la contrainte de taille ? des fragments de 1 nt à 50 nt ?

Discussions similaires

  1. Réponses: 2
    Dernier message: 17/05/2012, 23h07
  2. Réponses: 5
    Dernier message: 16/05/2007, 13h43
  3. Couper une chaîne
    Par MYster dans le forum Langage
    Réponses: 8
    Dernier message: 19/11/2005, 22h43
  4. Inclusion de sous séquences à l'intérieur de séquence (Bin)
    Par netcomput dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 07/05/2005, 01h56
  5. couper une connection avec un serveur corba
    Par pons dans le forum CORBA
    Réponses: 3
    Dernier message: 31/05/2002, 10h11

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