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 :

Extraction de séquences nucléotidiques des CDS d'un fichier Genbank


Sujet :

Bioinformatique Perl

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 22
    Points : 20
    Points
    20
    Par défaut Extraction de séquences nucléotidiques des CDS d'un fichier Genbank
    Bonjour,

    Je suis souvent venu sur ce forum pour trouver des solutions. Après quelques heures de recherche c'est mon tour de vous poser un problème (certainement tout bête) que je n'arrive pas à résoudre.

    Je souhaite extraire les séquences nucléotidiques de tous les CDS d'un fichier Genbank afin de réaliser un fichier fasta. J'ai lu avec attention la notice écrite par Jasmine80 concernant le traitement de ces fichiers mais je ne trouve pas de solution. Il existe un tag permettant d'extraire les traductions protéiques des CDS mais je vois rien concernant les séquences nucléotidiques. Je vois bien la solution de récupérer la localisation de ces CDS et de se servir des coordonnées pour extraire la portion de séquence correspondante mais il doit bien y avoir plus simple (scrogneugneu!)?

  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
    Je ne travaille pas avec des fichiers genbank mais je récupère directement les séquences en me connectant sur NCBI. En ce qui concerne les tags des séquences nucléiques, j'utilise la fonction has_tag du module :
    Bio::SeqFeatureI - Abstractinterface of a Sequence Feature
    Peut_être peux-tu l'adapter avec tes fichiers.

    Si ce tag est bien 'CDS', je récupère les positions de départ et de fin et je recoupe la séquence d'origine... Il y a peut-être plus simple, mais je ne connais pas d'autres solutions.
    -- Jasmine --

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 22
    Points : 20
    Points
    20
    Par défaut
    Citation Envoyé par Jasmine80 Voir le message
    Je ne travaille pas avec des fichiers genbank mais je récupère directement les séquences en me connectant sur NCBI.
    J'ai testé aussi bien avec fichiers genbank locaux qu'en faisant appel à ceux du NCBI. Ces objets étant identiques, je n'ai pas de problème pour parser l'un ou l'autre.

    En ce qui concerne les tags des séquences nucléiques, j'utilise la fonction has_tag du module : Bio::SeqFeatureI - Abstractinterface of a Sequence Feature
    Peut_être peux-tu l'adapter avec tes fichiers.
    Si ce tag est bien 'CDS', je récupère les positions de départ et de fin et je recoupe la séquence d'origine... Il y a peut-être plus simple, mais je ne connais pas d'autres solutions.
    Apparemment, je n'étais pas complètement à l'ouest, j'avais eu cette intuition pour arriver à mes fins.
    As-tu, s'il te plait, un morceau de code sous la main que je pourrai adapter à ma sauce?

    Merci

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 22
    Points : 20
    Points
    20
    Par défaut
    J'ai au final trouvé un solution ne passant pas l'utilisation des coordonnées. Je poste le code en dessous. Il permet de parser un Genbank afin d'obtenir un fichier fasta multiséquence contenant dans les identifiants: locus_tag, product et position

    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
     
    #--------------------------- Gb_parser.pl -----------------------------#
    #       recherche une séquence dans GenBank à partir de Gi ou d'Acc    #
    #	parse le résultat des features en un fichier fasta détaillé    #
    #	nommé Gb_parser.fasta                                          #
    #--------------------------- Gb_parser.pl -----------------------------#
     
    use warnings;
    use Bio::DB::GenBank;
    use Bio::SeqIO;
    use Bio::SeqFeatureI;
     
    open (OUTFILE, ">Gb_parser.fasta");
     
    my $gb = new Bio::DB::GenBank;
     
    # Récupération dans $seq de l'objet Genbank contenant de nombreuses informations
    # Gi, Acc, séquence, Annotations, Organisme, Espèce, Genre ...
     
    my $Acc = 'AE000783'; #Accession number de la séquence à traiter
    my $seq1 = $gb->get_Seq_by_acc($Acc);
    my $Sequence = $seq1->seq();
    my $Description = $seq1->desc();
    print "Acc = $Acc\nDescription = $Description\n"; #ecrit le num d'accession et sa description associée
    my $seqio_object = $seq1;
     
    for my $feat_object ($seqio_object->get_SeqFeatures) {
    	#print "\n", $feat_object->primary_tag, "\n";
     
    		for my $tag ($feat_object->get_all_tags){
    			#print $tag." ";
    			for my $value ($feat_object->get_tag_values($tag)){
    				#print $value."\n"		
    			}
    		}
    }
     
    foreach $feat ( $seqio_object->get_SeqFeatures() ) {
    	if ($feat->primary_tag() eq "CDS"){ # ne s'intéresse qu'aux tags "CDS"
    		foreach $tag ( $feat->get_all_tags() ) {	
    			if ($tag eq "locus_tag"){
    				print OUTFILE  ">", join(' ',$feat->get_tag_values($tag)); #ecrit le locus
    			}
    			elsif ($tag eq "product"){
    				print OUTFILE  " ", join(' ',$feat->get_tag_values($tag)); #ecrit le nom du CDS
    			}
    		}
    		print OUTFILE " ", $feat->start, "..", $feat->end,"\n";;# " on strand ", $feat->strand, "\n";
    		$out = $feat->seq; #out est un Primary::Seq
    		$string = $out->seq(); #recupère la séquence
    		print OUTFILE $string."\n";
    	}
    }
    Mon code n'est certainement pas très propre mais ça fonctionne
    Merci en tous cas Jasmine... de toutes façons je risque de repasser dans les jours, semaines, mois à venir

  5. #5
    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 mathgon Voir le message
    Mon code n'est certainement pas très propre mais ça fonctionne
    Merci en tous cas Jasmine... de toutes façons je risque de repasser dans les jours, semaines, mois à venir
    Désolée de répondre si tardivement et de ne pas avoir donné de code ... tu as dû en trouver facilement sur ce forum via l'option de recherche. Ma petite fille aura 4 semaines jeudi, mes nuits sont courtes et mes journées très chargées .

    Un conseil, utilise le pragma strict, ça t'aidera à améliorer ton code.

    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    open (OUTFILE, ">Gb_parser.fasta");
    utilise de préférence
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    open  my $outfile, '>',  "Gb_parser.fasta";
    ... et n'oublie pas de fermer le fichier


    Pour ce qui est du fichier de sortie, ne peux-tu pas utiliser Bio::SeqIO? Ce serait plus propre mais je ne sais pas si la fonction 'join' sera acceptée. lien
    -- Jasmine --

Discussions similaires

  1. Ajouter des lignes dans un fichier GenBank
    Par hajarita dans le forum Bioinformatique
    Réponses: 1
    Dernier message: 25/04/2012, 11h49
  2. Taille et séquence totales du gène dans un fichier GenBank
    Par myosotis29 dans le forum Bioinformatique
    Réponses: 0
    Dernier message: 26/08/2008, 00h26
  3. [REDHAT] Installer avec des CDs non bootable
    Par Giovanny Temgoua dans le forum RedHat / CentOS / Fedora
    Réponses: 2
    Dernier message: 12/05/2006, 15h49
  4. [EJB2.1 Entity] [CMP] Problème avec l'extraction de la collection des fk.
    Par Last newbie dans le forum Java EE
    Réponses: 1
    Dernier message: 24/12/2005, 16h48
  5. Extraction de données sur des fichiers excel
    Par iupgeii dans le forum MFC
    Réponses: 3
    Dernier message: 23/01/2004, 13h53

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