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 :

convertir un fichier fasta en format EMBL via Bio::SeqIO


Sujet :

Bioinformatique Perl

  1. #1
    Membre habitué
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 379
    Points : 129
    Points
    129
    Par défaut convertir un fichier fasta en format EMBL via Bio::SeqIO
    Bonjour,

    pour pouvoir utiliser un programme particulier sur mes séquences (qui sont actuellement au format fasta), je dois les convertir au format embl.

    J'ai trouvé ce post où Jasmine80 explique comment se servir du module Bio::seqIO pour convertir un fichier EMBL en fichier fasta.
    à partir de là, c'était pas bien compliqué de faire l'inverse.

    Voici mon code:
    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
    #!/usr/bin/perl -w
     
    ##packages utilises
    use strict;
    use diagnostics;
    use Bio::SeqIO;
     
    #pour la récupération des arguments
    use vars qw($opt_h $opt_f);
    use Getopt::Std;
     
    ##recuperation des arguments - initialisation
    getopts("hf:") or die("erreur(s) de saisie dans les options. Faire -h pour obtenir l'aide\n");
    if (defined($opt_h))
    {
    	&help;
    	exit;
    }
    elsif(!defined($opt_f))
    {
    	die("Parametre manquant : -f doit etre definit. Faire -h pour obtenir de l'aide.\n");
    }
     
    my $out_file;
     
    if($opt_f =~ m/(.+)\.(fa|fasta)/)
    {
    	$out_file = "$1.embl";
    }
     
    my $in  = Bio::SeqIO->new(-file => $opt_f , '-format' => 'fasta');
    my $out = Bio::SeqIO->new(-file => ">$out_file" , '-format' => 'EMBL');
     
    while ( my $seq = $in->next_seq() ) {
    	$out->write_seq($seq);
    }
     
     
    sub help
    {
    	print qq{
    fasta_to_embl.pl prend en parametre un fichier au format fasta et le convertit au format EMBL (dans un nouveau fichier)
     
    Paramètres :
    	-f : fichier fasta ou multifasta a convertir
     
    };
    }
    Le problème, c'est que le nom de mes fichiers fasta ne contient pas d'identifiant ensembl. Donc en sortie, mes séquences ne sont pas identifiées.

    Par exemple, voici une sequence au format fasta en entré :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >KRT16
    CCTGGATAAGGCTTTCGCTCTCTCCAGTTGGGGTATTAATAGCCTTTGGTGACCTTGAAGACCATTTTCAGTTCTGAGGGTGATGGGTCTGTGGATGGACCAGAACTCCAGGCCCAACCTGACACCTGAACACTGAGGTTTTTGTCCAAGATTCCGGGGTCCCCTTTGCCCCTTTTTGGGGTAGGGGTGAGGAGTGTCAGGTTCCCTCTCCCAGGTTTGACTCTGAAGGGATGTGCATCCGTTCTGCTCTTACCTCTGGGATGAATGACCAGGGGAGATGTAGCAGTGACAAAACCCTGGTTCTGCTGAGACAAGGAATTGCCTGCCCCAGTGGAGCTCAGGCAGAAGCAGGCTGTCTCTGGGCTCCTCACCTCAACAGAGACACTGCAGAGCAAGGCCAGTGGCCAGCACCGAGGGATGCCCCACAGCACCCTGAGGAGGCCCCGTCTTGGTGCCCAGACCCCTCCATCCTCCCTCCAGTCCTCGGTGCTGGACCAGGCTCTCAGGCCAAGGCCATGCCCACCATGGGCAGACCTCCTGCCAGTGATCGTGGGGAGGTGGGTGAGAGTTGGGTATACTGGCCCCGCCTGCAGGCATGGTGGGAGCCTGGAGAGGGCCAGAGTTCTGGGTTCTAGTTGCAGCTCTGCAGCTTAAAGCAGAGTGACTTTGAGTGAATCTCTACGCTCACAGAACTGTATGGCACACACTGGGCTCTCCATGCATGCCTGAGTGGGCCCATAACCAGTGCTCTCCCCCAGCTCAGCTGGATGAATGGAGCTGCCAGGCCTAGCCTGGGATCTGTGGACACAGGAGAGAGAACTGCTGGGAACGGATCCCCGGCTAGTCCTGTTTCTACAGGGTAGGGGGGGACTCTGAGGCCCAGGTGGGGTCAGGGGTCATACCTGGCTGTAGTGGCAGGATGGGGCTCCCTCCCACCAGCCTGCAGGTGGGGTGCCTGTGATTAGGAGAGGGCGGTAGAGGAGTGGCAGAGCTAGGTGTGGGGCTGTGGTGTTCTTCAGCTGGGAGTGTGGGGGGCGCAGGGCCCTGCTTAGGGGTGCGGGATGGTGCCAGTGTGTAGAGGTGAGTGTGAGGAGCAGGTGGCTGGAGGGGCAGGATGGGGAGGCTGAGGGGCAGGGCTGGCCCTCGGGGAAGGGCCGGTGGGGTCCTTCGCGCATGTTTCTTTGTGGCTAGTGGTGTGTCATCCCCTTTTACAGATGAGAAAACTGAGGACCAAGGGGCTATAGGACCAGCCTGTGCTGTACAGTTGGTAAGGGCAGAGCAGGGACTCAGTGCCGCCTGTCTAGCTCCATGGCCAGTGCTGTTTGTATGGTGCACACACTTCTGGAGATCCCGGGGGCTCAAGGCAGCCTCTGGAACTGGAATTAGATCCAAGAGGGGAAAGAGAGTTATAGGATTTTTAGAACAGAAGGGACTCTGCAGTCACCCAGTCCAGCCTGGTCACTGAGGGGAAACAGGCCCAGAGGTGGGAGGTGGGGAGCCTCAGGCCACACAGCAAGCAGAGTGAAGACAGGAACTCTGCCCCTGCCCAGAGTGGGACATGTGGGATCCCCACAACTGCTCCCCAAGACAGCCCAGGATGGCATCACTGAGCTCTCTTTCAGCCAAGGCTGTCACTGTGGGGCAGGGAGTTCTTCTGAAGGGCTGACTCACTGCCTGGGGACGCAGTTGCCACAAAGCCACCTGTGCCAAGGCCCGACTGGCCCCGAGGGCTCCAGGAAAGGGAGCCTGATTCCCCACCGCCTAGCCTGAGTCACCACCGAACTCGCATTTCTGTGTTTTTCTCTCGGCCCCACACCCCCAAAGCTGGGTGGGAACTCTGAGCCGGCACACAGCAGAGTTGATCCTGGGCTGAATAATCCAGAGTGAGGAGTTGGACGGGACCGGGAGTGATGAAATCCAGAGGGGAACCTGGAGTCAGCAGTTAGGAGGGCCCCGCCTTCCCCAGCTGCATATAAAGGTCTCTGGGGTTGGAGGCAGCCA
    et voilà le résultat en sortie :
    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
    ID   unknown; SV 1; linear; unassigned DNA; STD; UNC; 2001 BP.
    XX
    AC   unknown;
    XX
    XX
    FH   Key             Location/Qualifiers
    FH
    XX
    SQ   Sequence 2001 BP; 405 A; 517 C; 670 G; 409 T; 0 other;
         cctggataag gctttcgctc tctccagttg gggtattaat agcctttggt gaccttgaag        60
         accattttca gttctgaggg tgatgggtct gtggatggac cagaactcca ggcccaacct       120
         gacacctgaa cactgaggtt tttgtccaag attccggggt cccctttgcc cctttttggg       180
         gtaggggtga ggagtgtcag gttccctctc ccaggtttga ctctgaaggg atgtgcatcc       240
         gttctgctct tacctctggg atgaatgacc aggggagatg tagcagtgac aaaaccctgg       300
         ttctgctgag acaaggaatt gcctgcccca gtggagctca ggcagaagca ggctgtctct       360
         gggctcctca cctcaacaga gacactgcag agcaaggcca gtggccagca ccgagggatg       420
         ccccacagca ccctgaggag gccccgtctt ggtgcccaga cccctccatc ctccctccag       480
         tcctcggtgc tggaccaggc tctcaggcca aggccatgcc caccatgggc agacctcctg       540
         ccagtgatcg tggggaggtg ggtgagagtt gggtatactg gccccgcctg caggcatggt       600
         gggagcctgg agagggccag agttctgggt tctagttgca gctctgcagc ttaaagcaga       660
         gtgactttga gtgaatctct acgctcacag aactgtatgg cacacactgg gctctccatg       720
         catgcctgag tgggcccata accagtgctc tcccccagct cagctggatg aatggagctg       780
         ccaggcctag cctgggatct gtggacacag gagagagaac tgctgggaac ggatccccgg       840
         ctagtcctgt ttctacaggg taggggggga ctctgaggcc caggtggggt caggggtcat       900
         acctggctgt agtggcagga tggggctccc tcccaccagc ctgcaggtgg ggtgcctgtg       960
         attaggagag ggcggtagag gagtggcaga gctaggtgtg gggctgtggt gttcttcagc      1020
         tgggagtgtg gggggcgcag ggccctgctt aggggtgcgg gatggtgcca gtgtgtagag      1080
         gtgagtgtga ggagcaggtg gctggagggg caggatgggg aggctgaggg gcagggctgg      1140
         ccctcgggga agggccggtg gggtccttcg cgcatgtttc tttgtggcta gtggtgtgtc      1200
         atcccctttt acagatgaga aaactgagga ccaaggggct ataggaccag cctgtgctgt      1260
         acagttggta agggcagagc agggactcag tgccgcctgt ctagctccat ggccagtgct      1320
         gtttgtatgg tgcacacact tctggagatc ccgggggctc aaggcagcct ctggaactgg      1380
         aattagatcc aagaggggaa agagagttat aggattttta gaacagaagg gactctgcag      1440
         tcacccagtc cagcctggtc actgagggga aacaggccca gaggtgggag gtggggagcc      1500
         tcaggccaca cagcaagcag agtgaagaca ggaactctgc ccctgcccag agtgggacat      1560
         gtgggatccc cacaactgct ccccaagaca gcccaggatg gcatcactga gctctctttc      1620
         agccaaggct gtcactgtgg ggcagggagt tcttctgaag ggctgactca ctgcctgggg      1680
         acgcagttgc cacaaagcca cctgtgccaa ggcccgactg gccccgaggg ctccaggaaa      1740
         gggagcctga ttccccaccg cctagcctga gtcaccaccg aactcgcatt tctgtgtttt      1800
         tctctcggcc ccacaccccc aaagctgggt gggaactctg agccggcaca cagcagagtt      1860
         gatcctgggc tgaataatcc agagtgagga gttggacggg accgggagtg atgaaatcca      1920
         gaggggaacc tggagtcagc agttaggagg gccccgcctt ccccagctgc atataaaggt      1980
         ctctggggtt ggaggcagcc a                                                2001
    //
    au niveau de la séquence, c'est tout à fait ce que je veux, mais pour identifiant et AC, il met unknown.

    Ce que j'aimerais, c'est que le nom de ma sequence apparaisse, sinon en identifiant, au moins dans une ligne de description (DE au format ensembl).

    Je n'ai pas trouvé de fonction permettant d'éditer / d'ajouter une ligne dans le module Bio::SeqIO.

    Je vois bien la solution de parser le fichier de résultats et d'ajouter la ligne qui convient en faisant gaffe à l'ordre des séquences, mais je me demandais s'il n'y avait pas une méthode plus propre pour le faire...

    Merci d'avance pour vos conseils (en espérant que tout le monde n'est pas partie en vacances )

  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
    Bio::SeqIO manipule des objets BIO::Seq, il faut regarder de ce côté là pour voir comment ajouter les données que tu veux.
    -- Jasmine --

  3. #3
    Membre habitué
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 379
    Points : 129
    Points
    129
    Par défaut
    Merci, c'est bête mais j'avais pas pensé à aller voir par là

    Du coup, avec la fonction display_id() de l'objet $seq j'arrive à récupérer le nom de mes séquences fasta.

    Maintenant, il faut que j'arrive à le réinjecter dans l'objet embl

    petit à petit, on avance vers la solution

  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
    Citation Envoyé par zaboug Voir le message
    Merci, c'est bête mais j'avais pas pensé à aller voir par là

    Du coup, avec la fonction display_id() de l'objet $seq j'arrive à récupérer le nom de mes séquences fasta.

    Maintenant, il faut que j'arrive à le réinjecter dans l'objet embl

    petit à petit, on avance vers la solution
    Oui, c'est également ce que j'était entrain de regarder.
    Voici la structure de ton fichier de sortie :
    ID, qui devrait être le display_id est mis automatiquement à unknow.

    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
    $VAR1 = bless( {
                     '_molecule' => 'unassigned DNA',
                     '_dates' => [],
                     '_division' => 'UNC',
                     '_secondary_accession' => [],
                     'primary_seq' => bless( {
                                               'display_id' => 'unknown',
                                               'accession_number' => 'unknown',
                                               '_seq_length' => undef,
                                               '_root_verbose' => 0,
                                               'seq' => 'CCTGGATAAGGCTTTCGCTCTCTCCAGTTGGGGTATTAATAGCCTTTGGTGACCTTGAAGACCATTTTCAGTTCTGAGGGTGATGGGTCTGTGGATGGACCAGAACTCCAGGCCCAACCTGACACCTGAACACTGAGGTTTTTGTCCAAGATTCCGGGGTCCCCTTTGCCCCTTTTTGGGGTAGGGGTGAGGAGTGTCAGGTTCCCTCTCCCAGGTTTGACTCTGAAGGGATGTGCATCCGTTCTGCTCTTACCTCTGGGATGAATGACCAGGGGAGATGTAGCAGTGACAAAACCCTGGTTCTGCTGAGACAAGGAATTGCCTGCCCCAGTGGAGCTCAGGCAGAAGCAGGCTGTCTCTGGGCTCCTCACCTCAACAGAGACACTGCAGAGCAAGGCCAGTGGCCAGCACCGAGGGATGCCCCACAGCACCCTGAGGAGGCCCCGTCTTGGTGCCCAGACCCCTCCATCCTCCCTCCAGTCCTCGGTGCTGGACCAGGCTCTCAGGCCAAGGCCATGCCCACCATGGGCAGACCTCCTGCCAGTGATCGTGGGGAGGTGGGTGAGAGTTGGGTATACTGGCCCCGCCTGCAGGCATGGTGGGAGCCTGGAGAGGGCCAGAGTTCTGGGTTCTAGTTGCAGCTCTGCAGCTTAAAGCAGAGTGACTTTGAGTGAATCTCTACGCTCACAGAACTGTATGGCACACACTGGGCTCTCCATGCATGCCTGAGTGGGCCCATAACCAGTGCTCTCCCCCAGCTCAGCTGGATGAATGGAGCTGCCAGGCCTAGCCTGGGATCTGTGGACACAGGAGAGAGAACTGCTGGGAACGGATCCCCGGCTAGTCCTGTTTCTACAGGGTAGGGGGGGACTCTGAGGCCCAGGTGGGGTCAGGGGTCATACCTGGCTGTAGTGGCAGGATGGGGCTCCCTCCCACCAGCCTGCAGGTGGGGTGCCTGTGATTAGGAGAGGGCGGTAGAGGAGTGGCAGAGCTAGGTGTGGGGCTGTGGTGTTCTTCAGCTGGGAGTGTGGGGGGCGCAGGGCCCTGCTTAGGGGTGCGGGATGGTGCCAGTGTGTAGAGGTGAGTGTGAGGAGCAGGTGGCTGGAGGGGCAGGATGGGGAGGCTGAGGGGCAGGGCTGGCCCTCGGGGAAGGGCCGGTGGGGTCCTTCGCGCATGTTTCTTTGTGGCTAGTGGTGTGTCATCCCCTTTTACAGATGAGAAAACTGAGGACCAAGGGGCTATAGGACCAGCCTGTGCTGTACAGTTGGTAAGGGCAGAGCAGGGACTCAGTGCCGCCTGTCTAGCTCCATGGCCAGTGCTGTTTGTATGGTGCACACACTTCTGGAGATCCCGGGGGCTCAAGGCAGCCTCTGGAACTGGAATTAGATCCAAGAGGGGAAAGAGAGTTATAGGATTTTTAGAACAGAAGGGACTCTGCAGTCACCCAGTCCAGCCTGGTCACTGAGGGGAAACAGGCCCAGAGGTGGGAGGTGGGGAGCCTCAGGCCACACAGCAAGCAGAGTGAAGACAGGAACTCTGCCCCTGCCCAGAGTGGGACATGTGGGATCCCCACAACTGCTCCCCAAGACAGCCCAGGATGGCATCACTGAGCTCTCTTTCAGCCAAGGCTGTCACTGTGGGGCAGGGAGTTCTTCTGAAGGGCTGACTCACTGCCTGGGGACGCAGTTGCCACAAAGCCACCTGTGCCAAGGCCCGACTGGCCCCGAGGGCTCCAGGAAAGGGAGCCTGATTCCCCACCGCCTAGCCTGAGTCACCACCGAACTCGCATTTCTGTGTTTTTCTCTCGGCCCCACACCCCCAAAGCTGGGTGGGAACTCTGAGCCGGCACACAGCAGAGTTGATCCTGGGCTGAATAATCCAGAGTGAGGAGTTGGACGGGACCGGGAGTGATGAAATCCAGAGGGGAACCTGGAGTCAGCAGTTAGGAGGGCCCCGCCTTCCCCAGCTGCATATAAAGGTCTCTGGGGTTGGAGGCAGCCA',
                                               '_version' => '1',
                                               'alphabet' => 'dna'
                                             }, 'Bio::PrimarySeq' ),
                     '_seq_version' => '1',
                     '_root_verbose' => 0,
                     '_annotation' => bless( {
                                               '_typemap' => bless( {
                                                                      '_type' => {
                                                                                   'comment' => 'Bio::Annotation::Comment',
                                                                                   'reference' => 'Bio::Annotation::Reference',
                                                                                   'dblink' => 'Bio::Annotation::DBLink'
                                                                                 }
                                                                    }, 'Bio::Annotation::TypeManager' ),
                                               '_annotation' => {}
                                             }, 'Bio::Annotation::Collection' )
                   }, 'Bio::Seq::RichSeq' );
    -- Jasmine --

  5. #5
    Membre habitué
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 379
    Points : 129
    Points
    129
    Par défaut
    Bon, j'arrive à ajouter mon identifiant fasta dans une ligne de description EMBL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while ( my $seq = $in->next_seq() ) {
    	my $id = $seq->display_id();
    	$seq->desc($id);
    	$out->write_seq($seq);
    }
    ça le fera apparaitre en sortie du programme que je ferais tourner sur les fichier EMBL, mais en seconde position, et non en première, ce qui rendra la lecture finale moins facile...

    Du coup, je cherche toujours un moyen de mettre mon identifiant dans la ligne ID

  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
    Bio::SeqIO::embl - EMBL sequence input/output stream

    _id_generation_func()

    This is function which is called as

    print "ID ", $func($annseq), "\n";

    To generate the ID line. If it is not there, it generates a sensible ID line using a number of tools.

    If you want to output annotations in EMBL format they need to be stored in a Bio::Annotation::Collection object which is accessible through the Bio::SeqI interface method annotation().

    The following are the names of the keys which are polled from a Bio::Annotation::Collection object.
    reference - Should contain Bio::Annotation::Reference objects
    comment - Should contain Bio::Annotation::Comment objects
    dblink - Should contain Bio::Annotation:BLink objects
    -- Jasmine --

  7. #7
    Membre habitué
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 379
    Points : 129
    Points
    129
    Par défaut
    merci pour le lien, ça à l'air puissant, mais j'ai du mal à comprendre comment l'utiliser...

    Enfin bon, je continue de chercher quand même, je vais bien finir par comprendre comment ça marche

  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
    Citation Envoyé par zaboug Voir le message
    merci pour le lien, ça à l'air puissant, mais j'ai du mal à comprendre comment l'utiliser...

    Enfin bon, je continue de chercher quand même, je vais bien finir par comprendre comment ça marche
    Moi non plus, je ne sais pas comment cela fonctionne, je n'utilise jamais le format EMBL. En essayant de comprendre à deux, on trouvera peut-être la solution.
    -- Jasmine --

  9. #9
    Membre habitué
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 379
    Points : 129
    Points
    129
    Par défaut
    je viens de comprendre pourquoi je comprenais pas

    Si j'ai bien compris, la fonction _id_generation_func() fait partie de l'interface Bio::SeqIO, mais elle n'est pas implémenté :

    en essayant le code (à tout hasard )
    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
    while ( my $seq = $in->next_seq() ) {
    	my $id = $seq->display_id();
    	$seq->desc($id);
     
    	my $sequence_as_string = $seq->seq();
     
    	my $seqout = Bio::Seq->new( -display_id => $id,
                                 -seq => $sequence_as_string,
                                 '-format' => 'EMBL');
     
    	$seqout -> _id_generation_func($id);
     
    	$outIO->write_seq($seqout);
    	print $seqout->display_id()."\n";
    }
    j'ai obtenu l'erreur suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    mathilde@cgmc134:~/Dossier_partage_VM/distances_edition/bin$ perl fasta_to_embl.pl -f ../resultats/jeu_test_c-jun_human.fa 
    Can't locate object method "_id_generation_func" via package "Bio::Seq" at
    	fasta_to_embl.pl line 44, <GEN0> line 1 (#1)
        (F) You called a method correctly, and it correctly indicated a package
        functioning as a class, but that package doesn't define that particular
        method, nor does any of its base classes.  See perlobj.
     
    Uncaught exception from user code:
    	Can't locate object method "_id_generation_func" via package "Bio::Seq" at fasta_to_embl.pl line 44, <GEN0> line 1.
     at fasta_to_embl.pl line 44
    du coup, il faudrait créer une classe héritant de bio::seqIO et implémenter la méthode _id_generation_func(). Mais j'ai jamais fait de POO en perl (et j'en ai pas fait des masses dans d'autres langages non plus). Du coup, ça me semble bien compliqué pour si peu.
    Il doit y avoir un moyen plus simple, non?

  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
    Si tu regardes bien la structure de l'objet EMBL créé (un des messages précédents), c'est bien un Bio::Annotation::Collection ... le tout est de réussir à modifier ses données ... faut simplement trouver la formule magique.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
                     '_annotation' => bless( {
                                               '_typemap' => bless( {
                                                                      '_type' => {
                                                                                   'comment' => 'Bio::Annotation::Comment',
                                                                                   'reference' => 'Bio::Annotation::Reference',
                                                                                   'dblink' => 'Bio::Annotation::DBLink'
                                                                                 }
                                                                    }, 'Bio::Annotation::TypeManager' ),
                                               '_annotation' => {}
                                             }, 'Bio::Annotation::Collection' )
    -- Jasmine --

  11. #11
    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 pense qu'il faut faire quelque chose de ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    while ( my $seq = $in->next_seq() ) {
     
    	my $ac = $seq->annotation();
    	$ac->add_Annotation('ID',$seq->primary_id);
     
    	$out->write_seq($seq);
    }
    sauf que pour $seq->primary_id, c'est un objet qui est attendu.
    -- Jasmine --

  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
    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
    my $infile = "test.txt";
    my $outfile = "test.EMBL";
     
    my $in  = Bio::SeqIO->new(-file => $infile , '-format' => 'fasta');
    my $out = Bio::SeqIO->new(-file => ">$outfile" , '-format' => 'EMBL');
     
     
    while ( my $seq = $in->next_seq() ) {
     
    	my $ac = $seq->annotation();
    	my $dblink = Bio::Annotation::DBLink->new(-database =>"GenBank",
                                                      -primary_id => $seq->primary_id);
     
    	$ac->add_Annotation('dblink',$dblink);
     
     
    	$out->write_seq($seq);
    }
    permet de modifier la ligne DR du fichier de sortie et d'y écrire l'ID

    ID unknown; SV 1; linear; unassigned DNA; STD; UNC; 2001 BP.
    XX
    AC unknown;
    XX
    XX
    DR GenBank; KRT16.
    XX
    FH Key Location/Qualifiers
    FH
    XX
    -- Jasmine --

  13. #13
    Membre habitué
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 379
    Points : 129
    Points
    129
    Par défaut
    En fait, j'arrive déjà à ajouter une ligne DE contenant l'identifiant. ça me suffira si on n'arrive pas à modifier la ligne ID.

    Mais je vais continuer de chercher à partir de tes propositions pour tenter de remplir la ligne d'identification...

  14. #14
    Membre habitué
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 379
    Points : 129
    Points
    129
    Par défaut
    je me suis repenchée sur tes précédents posts, et y'a un truc que je comprends pas : comment obtiens tu la structure du fichier de sortie?
    En faisant un Dumper sur l'objet $out, j'obtiens ça:
    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
    out2 : $VAR1 = bless( {
                     '_seqio_seqfactory' => bless( {
                                                     'type' => 'Bio::Seq::RichSeq',
                                                     '_root_verbose' => 0
                                                   }, 'Bio::Seq::SeqFactory' ),
                     '_show_dna' => 1,
                     '_func_ftunit_hash' => {},
                     '_file' => '>../Tmp/test_fasta_to_embl.embl',
                     '_root_cleanup_methods' => [
                                                  sub { "DUMMY" }
                                                ],
                     '_flush_on_write' => 1,
                     '_filehandle' => \*Symbol::GEN1,
                     '_root_verbose' => 0,
                     '_object_builder' => bless( {
                                                   'want_all' => 1,
                                                   'object_conds' => [],
                                                   'wanted_slots' => [],
                                                   'sequence_factory' => $VAR1->{'_seqio_seqfactory'},
                                                   'unwanted_slots' => [],
                                                   '_root_verbose' => 0,
                                                   '_objhash' => {}
                                                 }, 'Bio::Seq::SeqBuilder' ),
                     '_seqio_locfactory' => bless( {
                                                     '_root_verbose' => 0
                                                   }, 'Bio::Factory::FTLocationFactory' )
                   }, 'Bio::SeqIO::embl' );
    Ce qui n'est pas la même chose que ce que tu m'as montré... on ne retrouve pas ici les champs qu'il y a dans l'objet $out, je comprends pas très bien

    c'est fou que ça soit si compliqué (ou en tout cas si peu intuitif) de modifier la ligne d'identification d'un objet seqIO ensembl !!
    ça donne pas envie de travailler avec ! (moi j'ai pas le choix dans ce cas là, mais bon...)

  15. #15
    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 zaboug Voir le message
    je me suis repenchée sur tes précédents posts, et y'a un truc que je comprends pas : comment obtiens tu la structure du fichier de sortie?
    En faisant un Dumper sur l'objet $out, j'obtiens ça: ...
    Je n'ai pas fait un Dumper sur l'objet $out mais j'ai ouvert le fichier de sortie via un second programme pour essayer de comprendre où placer l'identifiant.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    use Bio::SeqIO;
    use Data::Dumper;
     
     
    my $infile = "test.EMBL"; # fichier de sortie précédent
     
    my $in  = Bio::SeqIO->new(-file => $infile , '-format' => 'EMBL');
     
    while ( my $seq = $in->next_seq() ) {
    	print Dumper $seq;
    }
    -- Jasmine --

  16. #16
    Membre habitué
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 379
    Points : 129
    Points
    129
    Par défaut
    ah ok, je comprends mieux

    j'ai beau tourner et retourner le problèlme dans tous les sens, je ne vois pas de solution

    Et je me suis rendue compte qu'en fait avoir l'identifiant dans DE ne me permettait pas de faire tout ce que je veux. du coup, il faut absolument que je trouve un moyen de supprimer ce "unknown" et de mettre mon id à la place

    Je sens que je vais me tourner vers la solution pas terrible de parser le fichier final, et de remplacer l'id après coup...

  17. #17
    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 zaboug Voir le message
    Je sens que je vais me tourner vers la solution pas terrible de parser le fichier final, et de remplacer l'id après coup...
    =>
    -- Jasmine --

  18. #18
    Membre habitué
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 379
    Points : 129
    Points
    129
    Par défaut
    Citation Envoyé par Jasmine80 Voir le message
    =>
    et oui, c'est pas l'idéal, mais je pars en vacances demain () et je veux finir ça avant de partir...

    du coup, voilà la solution pas optimale mais qui donne un fichier de la forme qui me convient :
    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
    #!/usr/bin/perl -w
     
    ##packages utilises
    use strict;
    use diagnostics;
    use Data::Dumper;
    use Bio::SeqIO;
     
    #pour la récupération des arguments
    use vars qw($opt_h $opt_f);
    use Getopt::Std;
     
    ##recuperation des arguments - initialisation
    getopts("hf:") or die("erreur(s) de saisie dans les options. Faire -h pour obtenir l'aide\n");
    if (defined($opt_h))
    {
    	&help;
    	exit;
    }
    elsif(!defined($opt_f))
    {
    	die("Parametre manquant : -f doit etre definit. Faire -h pour obtenir de l'aide.\n");
    }
     
    my ($tmp_file, $out_file);
     
    if($opt_f =~ m/(.+)\.(fa|fasta)/)
    {
    	$out_file = "$1.embl";
    }
     
    $tmp_file = "tmp_no_id.embl";
     
    my $in  = Bio::SeqIO->new(-file => $opt_f , '-format' => 'fasta');
    my $out = Bio::SeqIO->new(-file => ">$tmp_file" , '-format' => 'EMBL');
     
     
    while ( my $seq = $in->next_seq() ) {
    	my $id = $seq->display_id();
    	$seq->desc($id);
     
    	#print Dumper $seq;
     
    	$out->write_seq($seq);
    }
     
    my %stock_id_unknown = ();
    open(TMP, "<", $tmp_file) or die("Impossible d'ouvrir $tmp_file\n");
    open(EMBL, '>', $out_file) or die("Impossible d'ouvrir $out_file\n");
     
    my $cpt_seq = 0;
    while(my $line = <TMP>)
    {
    	if($line =~ m/ID   unknown(.+)/)
    	{
    		$cpt_seq ++;
    		$stock_id_unknown{$cpt_seq} = $1;
    	}
    	elsif($line =~ m/DE   (.+)/)
    	{
    		my $id = $1.$stock_id_unknown{$cpt_seq};
    		print(EMBL "ID   $id\nXX\n");
    	}
    	elsif($line =~ m/SQ/ || $line =~ m/^\s+[\sactg\d]+/i || $line =~ m/\/\//)
    	{
    		print(EMBL $line);
    	}
    }
     
    close(EMBL);
    close(TMP);
     
    # my $infile = $out_file; # fichier de sortie précédent
    #  
    # $in  = Bio::SeqIO->new(-file => $infile , '-format' => 'EMBL');
    #  
    # while ( my $seq = $in->next_seq() ) {
    # 	print Dumper $seq;
    # }
     
    sub help
    {
    	print qq{
    fasta_to_embl.pl prend en parametre un fichier au format fasta et le convertit au format EMBL (dans un nouveau fichier)
     
    Paramètres :
    	-f : fichier fasta ou multifasta a convertir
     
    };
    }
    je laisse le sujet non résolu quelques temps, au cas où quelqu'un connaitrait ou trouverait une manière de faire plus propre (ou même moi si j'ai le temps de me repencher dessus avant de partir )

    j'aime pas faire les choses comme ça, ça donne un goût de travail baclé, mais là faut vraiment que j'avance

    en tous cas, encore merci à toi jasmine, ta patience et tes compétences me rendent régulièrement service

  19. #19
    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
    Bonnes vacances
    -- Jasmine --

  20. #20
    Membre habitué
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 379
    Points : 129
    Points
    129
    Par défaut
    Citation Envoyé par Jasmine80 Voir le message
    Bonnes vacances
    merci

    toi de même (si elles ne sont pas déjà prises )

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 13/07/2011, 18h11
  2. création d'un fichier fasta via Bio::SeqIO
    Par cal123 dans le forum Bioinformatique
    Réponses: 1
    Dernier message: 29/11/2009, 19h23
  3. Comment convertir un fichier genbank en format xml
    Par kargero dans le forum Bioinformatique
    Réponses: 0
    Dernier message: 11/02/2008, 16h26
  4. Convertir un fichier texte du format csv au format hws
    Par slayer23 dans le forum MATLAB
    Réponses: 8
    Dernier message: 14/06/2007, 17h48
  5. lecture de fichier au format xls via un prog C++
    Par lepoutho dans le forum C++
    Réponses: 9
    Dernier message: 08/09/2005, 10h23

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