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 :

[bioinfo] NCBI et BioPerl et OO


Sujet :

Bioinformatique Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut [bioinfo] NCBI et BioPerl et OO
    Bonjour à tous,

    Je découvre ce site, il parait très intéressant. Je suis dans la recherche biomoléculaire et j'utilise bioperl afin d'analyser des séquences d'ADN. Je suis bloquée dans un programme et j'aimerais un coup de main de votre part.

    J'aimerais pouvoir accéder aux valeurs contenues dans un objet composé d'objets. La classe est get_SeqFeatures et j'ai plusieurs instances de cette classe dont j'aimerais extraire des informations à l'aide d'une boucle.
    Voici un exemple d'objet obtenu par : print Dumper($Features)."\n";.

    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
    $VAR1 = bless( {
     
                     '_gsf_tag_hash' => {
                                          'mol_type' => [
                                                          'mRNA'
                                                        ],
                                          'db_xref' => [
                                                         'taxon:185431'
                                                       ],
                                          'isolate' => [
                                                         '927/4 GUTat10.1'
                                                       ],
                                          'chromosome' => [
                                                            '1'
                                                          ],
                                          'organism' => [
                                                          'Trypanosoma brucei TREU927'
                                                        ],
                                          'note' => [
                                                      'single VAT derivative of TREU927/4 (GPAL/KE/70/EATRO 1534)'
                                                    ]
                                        },
     
                   '_source_tag' => 'EMBL/GenBank/SwissProt',
     
                     '_gsf_seq' => bless( {
                                            'display_id' => 'XM_001219120',
                                            'primary_id' => '115504656',
                                            'accession_number' => 'XM_001219120',
                                            '_seq_length' => '2097',
                                            '_version' => '1',
                                            'alphabet' => 'dna',
                                            'desc' => 'Trypanosoma brucei hypothetical protein, conserved (Tb927.1.4280) mRNA, complete cds.',
                                            '_root_verbose' => 0,
                                            'seq' => 'ATGGAGAAGGTAGCAACAACAGCGTCTAAGGACAGTTCTGCTGTTAGGATTGTTGAACCAGTGATGTGA'
                                          }, 'Bio:: PrimarySeq' ),
     
                     '_location' => bless( {
                                             '_strand' => 1,
                                             '_seqid' => 'XM_001219120',
                                             '_location_type' => 'EXACT',
                                             '_start' => '1',
                                             '_end' => '2097',
                                             '_root_verbose' => 0
                                           }, 'Bio::Location::Simple' ),
     
      '_primary_tag' => 'source'
                   }, 'Bio::SeqFeature::Generic' );

    J'aimerais récupérer les valeurs contenues dans "'_gsf_tag_hash'", la référence ('taxon:185431') et l'isolat ('927/4 GUTat10.1'). Mais tous mes objets de classe get_seqFeatures ne possèdent pas "_gsf_tag_hash. Il faut donc que je commence par un test (if exists) et ensuite que j'extraie l'information.
    Pourriez vous m'expliquer comment accéder aux informations provenant d'objets composés?


    Voici ce que j'ai fait


    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
          my($Features)= $seq->get_SeqFeatures;
          foreach my $k (keys %$Features)
          {
            #print "$k : $Features->{$k}\n";
            if ($k eq "_gsf_tag_hash")
            {
                    my $SousObjet1=($Features->{$k});
                    foreach my $key (keys(%$SousObjet1))
                    {
                            #print "$key \t $SousObjet1->{$key}\n ";
                            if ($key eq "db_xref")
                            {
                            @taxon=($SousObjet1->{'db_xref'});
                            print $taxon[0];
                            }
     
                    }
     
            }

    mais $taxon[0] possède une array.


    Pourriez- vous m'aider?


    Merci beaucoup,


    Jasmine,

  2. #2
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Bienvenue à une bioinformaticienne sur le forum et un de plus. Tout d'abord, reedite ton message en mettant ton code perl entre balise code (tu selectionne ton code et click sur le #), ce sera plus clair, plus lisible pour tout le monde

  3. #3
    Rédactrice

    Avatar de stoyak
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    408
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 408
    Par défaut
    Bienvenue à toi!

    Alors, après indenté 1 peu ton code et l'avoir mis entre balise, peux-tu nous préciser certaines choses:

    - donne nous 1 petit bout de script pour voir ta façon de coder et voir sous quelle forme tu appelles ta classe (module, procédures, etc ..)
    - de quelle manière sont stockées tes informations? hash? tableau? scalaire?
    la façon de récupérer tes infos va dépendre de ça!

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

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    Merci beaucoup pour cet accueil. Je débute et j'espère que la façon dont je programme n'est pas trop affreuse. Si vous avez des conseils de style, n'hésitez pas, ils sont les bien venus. Je vous donne tout le code ainsi vous aurez toutes les réponses.


    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
    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
    139
    140
    141
    142
    143
    #!/usr/local/bin/perl
     
     
    # Ce script interroge NCBI au sujet des informations suivantes:
    #       Acc number (ID)
    #       Gi (Primary Id)
    #       Type de la séquence (ADN, ARN ou PROT)
    #       Description de la séquence
    #       Séquence
     
     
     
     
    use Bio::Perl;
    use Bio::Annotation::Collection;
    use strict;
    use warnings;
    use FileHandle;
    use Data::Dumper;  # visualisation des OO
     
     
    # Args    : -db       database ('protein' or 'nucleotide')
    #           -query    query string
    #           -mindate  minimum date to retrieve from
    #           -maxdate  maximum date to retrieve from
    #           -reldate  relative date to retrieve from (days)
    #           -datetype date field to use ('edat' or 'mdat')
    #           -ids      array ref of gids (overrides query)  exemple :   -ids=>[195052,2981014,11127914]
    #           -maxids   the maximum number of IDs you wish to collect (defaults to 100)
     
     
    my ($i)=0;
    my ($db)="nucleotide";
    my ($mindate)="";
    my ($maxdate)="";
    my ($reldate)="";
    my ($datetype)="";
    my ($ids)="";
    my($maxids)="";
    my ($query_string) = 'XM_001219120';
     
     
     
     
     
     
       my $query = Bio::DB::Query::GenBank->new(-db=>$db,
                                                -query=>$query_string,
    					    -mindate => $mindate,
    					    -maxdate => $maxdate,
                                                -reldate => $reldate,
                                                -datetype => $datetype,
                                                -ids => $ids,
                                                -maxids => $maxids
                                              );
     
            my $count = $query->count;
            print "Compte du nombre d'entrees = $count\n";
     
     
     
    Info();
     
     
    close;
     
     
     
     
     
     
    sub Info
     
    {
     
     
       # get a genbank database handle
       my $gb = new Bio::DB::GenBank;
       my $stream = $gb->get_Stream_by_query($query);
       while (my $seq = $stream->next_seq)
       {
     
          my($string);                        #$seq->revcom->seq();
          $string = $seq->seq();
          my($Acc);
          $Acc= $seq->accession_number();
          #my ($Id);
          #$Id=$seq->display_id();       # the human read-able id of the sequence = Acc
          my ($Type);
          $Type=$seq->alphabet();         # one of 'dna','rna','protein'
          my ($PrimId);
          $PrimId=$seq->primary_id();       # a unique id for this sequence irregardless  = Gi
          my ($Desc);
          $Desc = $seq->desc();             # a description of the sequence
          my (@taxon);
     
     
     
     
           my($Features)= $seq->get_SeqFeatures;      # The 'top level' sequence features
           my ($AllSeq)=$seq->get_all_SeqFeatures;  # All sequence features, including sub-features
     
     
     
          foreach my $k (keys %$Features)
          {
            print "$k : $Features->{$k}\n";
            if ($k eq "_gsf_tag_hash")
            {
                    my $SousObjet1=($Features->{$k});
                    foreach my $key (keys(%$SousObjet1))
                    {
                            print "$key \t $SousObjet1->{$key}\n ";
                            if ($key eq "db_xref")
                            {
                            @taxon=($SousObjet1->{'db_xref'});
                            print $taxon[0];
                            }
     
                    }
     
            }
     
         }
     
     
     
     
     
     
     
          #print Dumper($Features)."\n";
     
     
     
     
       }
     
     
     
     
          $i++;
    }
    Mon but est d'ensuite faire de ce script un module. Est-ce une bonne idée? Il renverrai un tableau indexé contenant toutes les infomations.
    Dans mon travail, j'utilise MySQL et j'ai déjà écrit un programme créant une table à partir des informations que j'arrive à prélever, il fonctionne très bien mais j'aimerais plus d'informations. Vaut il mieux réécrire un second programme et utiliser un module me donnant les informations NCBI ou au contraire ne faire qu'un seul script interrogeant NCBI et chargeant la DB?


    Merci,

    Jasmine,

  5. #5
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Ce forum est visité par de nombreuses personnes bioinformaticien, informaticien, etc. Donc si tu veux avoir plus d'informations et d'aides, il faut que tu sois le plus clair possible.
    Tout le monde ne connait pas le NCBI et ne sait pas ce que fait ton module et le fichier que tu veux parser. Donc faudrait que tu donnes des bouts d'exemple de fichier à parser et t'explique un peu le module bioperl que tu utilises. De plus, tu parses pas le NCBI , mais des fichiers GENBANK, donc attention à l'abus de langage .

    Sinon je pense pas que tu ai vraiment besoin de faire un module, mais bon pourquoi pas, c'est bien pour l'apprentissage.
    En ce qui concerne ton souci de $taxon[0], comme tu le sais, un accesion number peut avoir souvent plusieurs taxonomy, donc c'est pour ça que tu peux te retrouver avec un array, ce qui veut dire qu'il t'a renvoyé une référence à un tableau. pour avoir la premiere case de ce tableau par exemple, c'est ainsi :
    ${$taxon[0]}[0]. J'ai écrit une doc dans la FAQ sur les références, je te conseil donc de la lire.

    Sinon quel est le résultat de ton code? t'as fait des print, qu'est ce que ça donne?

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

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    Recoucou,


    Oui, tu as raison, je mélange NCBI et Genbank. Je vais faire attention.
    J'ai remplacé dans le code print "\n".${$taxon[0]}[0]."\n"; et cela fonctionne très bien, merci.


    Voici ce que mon script me donne:







    Compte du nombre d'entrees = 1

    _gsf_tag_hash : HASH(0x2198e0c)
    mol_type ARRAY(0x2198e48)
    db_xref ARRAY(0x2198e24)

    taxon:10255
    strain ARRAY(0x2198e6c)
    isolate ARRAY(0x2198e90)
    organism ARRAY(0x2198eb4)

    -----------------------
    _source_tag : EMBL/GenBank/SwissProt

    -----------------------
    _gsf_seq : Bio:rimarySeq=HASH(0x219f320)

    -----------------------
    _location : Bio::Location::Simple=HASH(0x2198c68)

    -----------------------
    _primary_tag : source

    -----------------------







    Je découvre les références depuis ce matin. J'ai trouvé un chouette turorial.
    => http://sylvain.lhullier.org/publicat...hapitre11.html
    (http://sylvain.lhullier.org/publications/intro_perl/)

    j'utilise aussi http://perl.enstimac.fr/DocFr/perl.html



    Merci beaucoup,

    Jasmine,

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [bioinfo] fonction getoption
    Par perlaud dans le forum Bioinformatique
    Réponses: 13
    Dernier message: 30/07/2004, 16h07
  2. [bioinfo] pbl avec code
    Par perlaud dans le forum Bioinformatique
    Réponses: 12
    Dernier message: 19/07/2004, 17h38
  3. [bioinfo] fonction qui renvoie chaîne à autre fonction
    Par perlaud dans le forum Bioinformatique
    Réponses: 11
    Dernier message: 16/07/2004, 15h06
  4. [bioinfo] reverse complementaire d'une sequence
    Par perlgirl dans le forum Bioinformatique
    Réponses: 6
    Dernier message: 18/06/2004, 11h22
  5. [bioinfo] Equivalence comd "source" Unix
    Par MSP dans le forum Bioinformatique
    Réponses: 5
    Dernier message: 26/08/2003, 17h10

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