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'affichage de tableaux


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 Problème d'affichage de tableaux
    Bonjour,

    Je n'en sors pas avec le Perl orienté objet, pourtant j'ai utilisé les tutoriaux mais c'est compliqué.

    J'entre un accession (ex DQ303459) et j'aimerais trouver les sous séquences (gènes) de la séquence entrée. (ex gène PemK)

    J'ai essayé aver les objets de Genbank mais peut-être vaudrait-il mieux directement aller rechercher des gènes en recherchant les liens vers les sous-séquences sur le site. Faire la recherche avec l'ACC et ensuite lire le code source de la page affichée contenant les informations afin de retrouver les liens vers les sous-séquences (gene pemK) de la séquence cible (DQ303459)...je ne sais pas si ma question est claire.

    exemple

    recherche pour DQ303459

    http://www.ncbi.nlm.nih.gov/entrez/v...e&val=90019040

    pour retrouver la sous-séquence correspondant au gène PemK

    gene <1..283
    /gene="pemK"
    CDS <1..283
    /gene="pemK"
    ouvrir la page via le lien de "gene" (qui apparait en lien)


    Au lieu de cette approche, je fais appel à l'objet correspondant à mon ACC recherché (DQ303459) et je recherche les positions de début et de fin de chaque gène dans l'idée de faire par la suite un split sur la séquence de référence.



    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
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    #!/usr/local/bin/perl
     
     
    #------------------- Dumper.pl -------------------------------------------#
    #    Ce programme interroge GenBank et donne les genes et leur position   #
    #    des séquences dont on a entré l'accession                            #
    #-------------------------------------------------------------------------#
     
     
    use Bio::Perl;
    use strict;
    use warnings;
    use FileHandle;
    use Data::Dumper;
     
     
     
    my $db="nucleotide";
    my $mindate="";
    my $maxdate="";
    my $reldate="";
    my $datetype="";
    my $ids="";
    my $maxids="";
    my $query_string = 'DQ303459';
     
     
    my $OutFile = FileHandle->new (">P:/Perl/scripts/Files/SousSeq.doc");
     
     
     
    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 %Informations;
    my $Ref=\%Informations;
    my @Acc;
    my @NomGene;
    my $NombreObjets;
    my $i = 0;   # différents accessions
    my $s = 0;   # différents genes
     
    my $gb = new Bio::DB::GenBank;
    my $stream = $gb->get_Stream_by_query($query);
    while (my $seq = $stream->next_seq)
    {
          $i++;
     
          $Acc[$i]= $seq->accession_number();
          $Informations{$Acc[$i]}{"Sequence"}= $seq->seq();
     
     
            my @Features = $seq->get_SeqFeatures;
     
     
            $NombreObjets = @Features."\n";
     
     
            for ($s=0; $s<$NombreObjets; $s++)
            {
     
                    my $Features = $Features[$s];  # avance block par block gâce à $s
                    foreach my $k (keys %$Features)
                    {
     
     
     
                            if ($k eq "_gsf_tag_hash")
                            {
     
                                    my $InfoGene=($Features->{$k});
                                    my @Gene="";
                                    $NomGene[$s]="";
                                    @Gene=($InfoGene->{'gene'});
                                    $NomGene[$s]=${$Gene[0]}[0];
     
                                    if($NomGene[$s] ne "")  # vérifie que l'on soit dans un block décrivant un gène
                                    {
                                            $Ref->{$Acc[$i]}{$NomGene[$s]}{"Gene"}=${$Gene[0]}[0];
                                    }
     
     
                            }
     
     
     
                            if ($k eq "_primary_tag")
                            {
                                    if($NomGene[$s] ne "")
                                    {
                                            my $InfoTag=($Features->{$k});
                                            $Ref->{$Acc[$i]}{$NomGene[$s]}{"Tag"}=$InfoTag;
                                    }
                            }
     
                            if ($k eq "_location")
                            {
                                    if($NomGene[$s] ne "")
                                    {
                                            my $InfoLocalisation=($Features->{$k});
                                            my $Debut="";
                                            $Debut=($InfoLocalisation->{'_start'});
                                            if (($Debut eq "") | ($Debut eq "undef"))
                                            {
                                                    $Debut=($InfoLocalisation->{'_max_start'});
     
                                            }
                                            $Ref->{$Acc[$i]}{$NomGene[$s]}{"Debut"}=$Debut;
                                            my $Fin="";
                                            $Fin=($InfoLocalisation->{'_end'});
                                            if (($Fin eq "") | ($Fin eq "undef"))
                                            {
                                                    $Fin=($InfoLocalisation->{'_max_end'});
     
                                                    if (($Fin eq "") | ($Fin eq "undef"))
                                                    {
                                                            $Fin=($InfoLocalisation->{'_min_end'});
                                                    }
     
                                            }
                                            $Ref->{$Acc[$i]}{$NomGene[$s]}{"Fin"}=$Fin;
                                    }
                            }
     
     
                    }
     
                    if (($Informations{$Acc[$i]}{$NomGene[$s]}{"Gene"} ne "") & ($Ref->{$Acc[$i]}{$NomGene[$s]}{"Tag"} eq "CDS"))
                    {
                            $Ref->{$Acc[$i]}{$NomGene[$s]}{"Long"}=$Ref->{$Acc[$i]}{$NomGene[$s]}{"Fin"}-$Ref->{$Acc[$i]}{$NomGene[$s]}{"Debut"}+1;
                            $Ref->{$Acc[$i]}{$NomGene[$s]}{"SousSeq"}=substr($Ref->{$Acc[$i]}{"Sequence"},$Ref->{$Acc[$s]}{"Debut"}, $Ref->{$Acc[$i]}{$NomGene[$s]}{"Long"});
     
     
     
     
                            print $OutFile $Ref->{$Acc[$i]}{$NomGene[$s]}{"Gene"}."\t";
                            print $OutFile $Ref->{$Acc[$i]}{$NomGene[$s]}{"Tag"}."\t";
                            print $OutFile $Ref->{$Acc[$i]}{$NomGene[$s]}{"Debut"}."\t";
                            print $OutFile $Ref->{$Acc[$i]}{$NomGene[$s]}{"Fin"}."\t";
                            print $OutFile $Ref->{$Acc[$i]}{$NomGene[$s]}{"Long"}."\n";
                            print $OutFile "Sous-sequence ".$Ref->{$Acc[$i]}{$NomGene[$s]}{"SousSeq"}."\n\n";
     
     
     
                    }
     
     
                    if (exists $Ref->{$Acc[$i]}{$NomGene[$s]}{"Gene"})
                    {
                            print "\t".$s."\t".$Ref->{$Acc[$i]}{$NomGene[$s]}{"Gene"}."\t".$Ref->{$Acc[$i]}{$NomGene[$s]}{"Tag"}."\t".$Ref->{$Acc[$i]}{$NomGene[$s]}{"Debut"}."\t".$Ref->{$Acc[$i]}{$NomGene[$s]}{"Fin"}."\n";
                    }
            }
     
     
     
    }
     
    Total();
     
    #SousSeq();
     
     
     
     
    close;
     
     
    sub Total
    {
            print $OutFile "TOTAL POUR LES GENES\n";
            print "TOTAL POUR LES GENES\n";
     
            for (my $j=0; $j<=$NombreObjets; $j++)
            {
     
                    if (exists $Ref->{$Acc[$i]}{$NomGene[$j]}{"Gene"})
                    {
                            print "Info ".$j."\t";
                            print $OutFile $Ref->{$Acc[$i]}{$NomGene[$j]}{"Gene"}."\t";
                            print $OutFile $Ref->{$Acc[$i]}{$NomGene[$j]}{"Tag"}."\t";
                            print $OutFile $Ref->{$Acc[$i]}{$NomGene[$j]}{"Debut"}."\t";
                            print $OutFile $Ref->{$Acc[$i]}{$NomGene[$j]}{"Fin"}."\n";
     
     
                            print $Ref->{$Acc[$i]}{$NomGene[$j]}{"Gene"}."\t";
                            print $Ref->{$Acc[$i]}{$NomGene[$j]}{"Tag"}."\t";
                            print $Ref->{$Acc[$i]}{$NomGene[$j]}{"Debut"}."\t";
                            print $Ref->{$Acc[$i]}{$NomGene[$j]}{"Fin"}."\n";
                    }
            }
     
     
    }
     
     
    sub SousSeq
    {
            print $OutFile "CDS\n";
     
            for (my $l=0; $l<$NombreObjets; $l++)
            {
                    if (($Ref->{$Acc[$i]}{$NomGene[$l]}{"Gene"} ne "") & ($Ref->{$Acc[$i]}{$NomGene[$l]}{"Tag"} eq "CDS"))
                    {
                            $Ref->{$Acc[$i]}{$NomGene[$l]}{"Long"}=$Ref->{$Acc[$l]}{$NomGene[$l]}{"Fin"}-$Ref->{$Acc[$i]}{$NomGene[$l]}{"Debut"};
                            $Ref->{$Acc[$i]}{$NomGene[$l]}{"SousSeq"}=substr($Ref->{$Acc[$i]}{"Sequence"},$Ref->{$Acc[$i]}{"Debut"}, $Ref->{$Acc[$i]}{$NomGene[$l]}{"Long"});
     
     
                            print  $Ref->{$Acc[$i]}{$NomGene[$l]}{"Gene"}."\t";
                            print  $Ref->{$Acc[$i]}{$NomGene[$l]}{"Tag"}."\t";
                            print  $Ref->{$Acc[$i]}{$NomGene[$l]}{"Debut"}."\t";
                            print  $Ref->{$Acc[$i]}{$NomGene[$l]}{"Fin"}."\t";
                            print  $Ref->{$Acc[$i]}{$NomGene[$l]}{"Long"}."\n";
                            print  "Sous-sequence ".$Ref->{$Acc[$i]}{"SousSeq"}."\n";
     
     
     
                            print $OutFile $Ref->{$Acc[$i]}{$NomGene[$l]}{"Gene"}."\t";
                            print $OutFile $Ref->{$Acc[$i]}{$NomGene[$l]}{"Tag"}."\t";
                            print $OutFile $Ref->{$Acc[$i]}{$NomGene[$l]}{"Debut"}."\t";
                            print $OutFile $Ref->{$Acc[$i]}{$NomGene[$l]}{"Fin"}."\t";
                            print $OutFile $Ref->{$Acc[$i]}{$NomGene[$l]}{"Long"}."\n";
                            print $OutFile "Sous-sequence ".$Ref->{$Acc[$i]}{$NomGene[$l]}{"SousSeq"}."\n";
     
     
     
                    }
            }
     
     
    }

    J'ai fait une query complexe avec l'idée de pouvoir ultérieurement entrer le nom précis du gène recherché pour une série d'Acc et d'obtenir en retour les différentes séquences de ce gène.



    J'obtiens en sortie

    1 pemK gene 1 283
    2 pemK CDS 1 283
    5 tnpA ISEcpI gene 532 1840
    6 tnpA ISEcpI -10_signal 532 537
    7 tnpA ISEcpI CDS 578 1840
    8 blaCTX-M-54 gene 1944 3050
    9 blaCTX-M-54 -35_signal 1944 1949
    10 blaCTX-M-54 -10_signal 1968 1973
    11 blaCTX-M-54 misc_feature 1978 1978
    13 blaCTX-M-54 CDS 2175 3050
    16 tnpA gene 3175 4063
    17 tnpA CDS 3175 4063


    TOTAL POUR LES GENES

    Info 1 pemK CDS 1 283
    Info 2 pemK CDS 1 283
    Info 5 tnpA ISEcpI CDS 578 1840
    Info 6 tnpA ISEcpI CDS 578 1840
    Info 7 tnpA ISEcpI CDS 578 1840
    Info 8 blaCTX-M-54 CDS 2175 3050
    Info 9 blaCTX-M-54 CDS 2175 3050
    Info 10 blaCTX-M-54 CDS 2175 3050
    Info 11 blaCTX-M-54 CDS 2175 3050
    Info 13 blaCTX-M-54 CDS 2175 3050
    Info 16 tnpA CDS 3175 4063
    Info 17 tnpA CDS 3175 4063
    La première colonne donnant le nom du gène, la seconde le type de séquence, puis la position de début, celle de fin et la dernière la longueur.

    POURQUOI ai-je deux tableaux différents en sortie? Le second étant faux car les dernières colonnes changent. Pourriez-vous me donner l'explication s'il vous plait. Merci

    Voici la structure de mon objet.

    $VAR2 = bless( {
    '_gsf_tag_hash' => {
    'gene' => [
    'pemK'
    ]
    },
    '_source_tag' => 'EMBL/GenBank/SwissProt',
    '_gsf_seq' => $VAR1->{'_gsf_seq'},
    '_location' => bless( {
    '_seqid' => 'DQ303459',
    '_start_pos_type' => 'BEFORE',
    '_end_pos_type' => 'EXACT',
    '_location_type' => 'EXACT',
    '_max_end' => '283',
    '_min_end' => '283',
    '_strand' => 1,
    '_min_start' => undef,
    '_max_start' => '1',
    '_root_verbose' => 0
    }, 'Bio::Location::Fuzzy' ),
    '_primary_tag' => 'gene'
    }, 'Bio::SeqFeature::Generic' );

    Auriez-vous une approche moins lourde?


    Jasmine,

  2. #2
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 38
    Par défaut
    Bonjour Jasmine80,

    j'ai lu ton message mais j'ai vraiment du mal à comprendre ton problème.

    En gros tu veux pouvoir récupèrer des information depuis le site du NCBI sur un Acces Number particulier, et ensuite récupèrer les informations des sous séquences de cet Acces Number uniquement pour les gènes ?

  3. #3
    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
    Bonjour Tygrou;

    Oui, tu as tout compris. J'y arrive très bien. Ici mon problème est au niveau du tableau dans lequel je charge mes données récupérées sur GenBank.
    Quand je l'appelle dans le script il apparait très bien. Si je refais de même mais en l'appelant via une subroutine, cela ne fonctionne plus.

    As-tu une suggestion à faire?

    Merci,

    Jasmine,

Discussions similaires

  1. [VxiR2] Problème d'affichage de tableaux
    Par nawal59 dans le forum Webi
    Réponses: 10
    Dernier message: 25/01/2011, 13h24
  2. Problème d'affichage de tableaux
    Par donkeyquote dans le forum Débuter
    Réponses: 5
    Dernier message: 01/10/2010, 20h55
  3. [XIR2] Problème d'affichage de tableaux
    Par julien2602 dans le forum Webi
    Réponses: 9
    Dernier message: 10/10/2008, 12h06
  4. Réponses: 4
    Dernier message: 11/04/2008, 12h56
  5. Réponses: 3
    Dernier message: 07/04/2006, 16h06

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