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 :

GenBank et récupération de certaines infos


Sujet :

Bioinformatique Perl

  1. #1
    Membre régulier
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    212
    Points
    93
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2009
    Messages : 212
    Points : 93
    Par défaut GenBank et récupération de certaines infos
    Bonjour,

    voila je suis en deuxième année de DUT bio-info sur Aurillac et pour mon ptut je dois faire un programme dont vous avez un bout dessous. ce programme a pour but dans un premier temps de créer des dossiers et des fichiers au nom des enzymes, ces noms étant contenus dans un fichier texte. jusque la pas de problème. dans un second temps le programme devrait me permettre de récupéré des infos dans un fichier texte relatif aux noms des enzymes. j'arrive à récupérer le Gi, la seq et la description mais je n'arrive pas à récupérer le CDS (plus précisément le /coded_by...) mon script ne marche pas. Pourriez-vous m'aider svp?!
    je tenais a remercier jasmine80 qui grâce à son tuto et à ses réponse sur le forum m'a beaucoup aidé.
    Merci d'avance


    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
    #!/usr/bin/perl
     
    use strict; # appelle pragma
    use warnings;  # appelle pragma, warnings, opère à la compilation une vérification de la syntaxe sur de nombreux points qui peuvent facilement passer inaperçus aux yeux du développeurs mais se révèlent souvent fatals à l'exécution
    use Cwd;  #donne le chemin absolu du répertoire courant ou est lancée le programme
    use Bio::DB::GenBank; #sert dans la partie Genbank
    use Bio::SeqIO;
     
    # LES VARIABLES........................................
     
     
    # variables de la premières partie 
    # pour les dossiers
    my $reponse;#contient la saisie au clavier de la réponse à la question avant le while
    my $dossier_courant = getcwd(); #enregistre le chemin du repertoire courant
    my $adress;#met le chemin du repertoire courant dans adress quelque soit la reponse a la question
    my $nom;#contient le nom de l'enzyme du fichier et est reinitialiser a chaque execussion de boucle while
     
    #variables pour la recherche sur genbank à partir du fichier contenant le nom des enzymes
    my $name;#recupere le nom de l'enzyme, même fonction que le $nom de la partie precedente 
    my $db="Protein";
    my $gb = new Bio::DB::GenBank; #charge le module GenBank
    my $query_string;
    my $query;
    my $stream;
    my $i;
    my $info;
    my $Gi;
    my $seq;
    my $def;
    my $info2;
    my @name;
     
    #variables pour la recherche sur genebank a partir du numero d'accesion recupere d'internet et contenue dans le fichier avec les info sur l'enzyme et la souche
    my $gb2 = new Bio::DB::GenBank;
    my $ligne;
    my @ligne;
    my $accession;
    my @ligne2;
    my $ligne2;
    my @ligne3;
    my $ligne3;
    my $query_string2;
    my $query2;
    my $stream2;
    my $i2;
    my $seq2;
    my @accession;
    my @tabfeat;
    my $feat;
     
    # variable qui servent dans la comparaison des deux fichiers
    my $seqligne;
    my @seq10;
    my $seqligne_sans_espace;
    my $seqgood; 
    my $seqgene; 
    my $n;
    my $a;
     
     
    #création des dossiers
    A:
    print " Voulez-vous mettre les dossiers au meme endroit (meme chemin) que la base de donnée?---->oui ou non\n\n.
            Attention si un dossier de meme nom existe deja, il sera ecrase\n\n";#demande
    $reponse=<STDIN>;#met dans variable la reponse
    print "\n\n";
    chomp $reponse;#enleve le dernier caractere
    print "dossier courant : $dossier_courant\n\n";#donne le chemin du dossier courant
    open (FILE, "$dossier_courant\\liste_enzyme.txt") || die "connot open liste_enzyme.txt";#ouvre le fichier #l'application doit être au même endroit que la base snn le dossier courant ne sera pas le même et le prog prendra le dossier courant de l'application et non celui de la bdd
    while (<FILE>)
    {
    	if($_=~/^\D/) # si commence par une lettre
    		{
    		chomp $_;#enleve le dernier caractère de fin de ligne
     
    		if ($reponse=~/oui/||$reponse=~/OUI/) #si reponse oui a la question avant la boucle while
    			{
    			mkdir ("$dossier_courant"."/"."$_"); #creation au niveau du dossier courant d'un repertoire au nom de l'enzyme correspondant à $_
    			$adress="$dossier_courant";#recuperation de l'adresse pour ne pas avoir de probleme plus bas
    			#print "test ok\n";
    			}
     
    		elsif ($reponse=~/non/||$reponse=~/NON/)#si reponse non a la question avant la boucle while
    			{
    			goto B;#va a B: directement plus bas
    			}
     
    		else # en cas d'une autre reponse
    			{
    			print "          oui ou non rien d'autre!\n\n";#message d'avertissement
    			goto A;#revient a A: plus haut
    			}
    		}
     
    	else #si autre que des lettres dans le fichiers avec le nom des enzymes
    		{
    		print "\n\n";
    		print "Il y a un probleme avec le fichier contenant le nom des enzymes. Verifier qu'il n'y ait que des noms.\n\n";
    		}
    }
     
    B:
    if ($reponse=~/non/||$reponse=~/NON/) #reprise hors while si reponse non
    	{
    	print "Ou souhaitez-vous les mettre?\n\n";#demande le nouveau chemin
    	$adress=<STDIN>;#saisi de la nouvelle adresse complete
    	chomp $adress;#enleve le dernier caractere
    	while (<FILE>)
    		{
    		if ($_=~/^\D/)
    			{
    			chomp $_;
    			mkdir("$adress"."/"."$_");#creation du repertoire au nom de l'enzyme a $adress
    			}
     
    		else
    			{
    			print "\n\n";
    			print "Il y a un probleme avec le fichier contenant le nom des enzymes. Verifier qu'il n'y ait que des noms.\n\n";
    			}
    		}
    	}
     
    print "vous avez mis vos dossiers a\n\n$adress\n\n";#impression du chemin ou se trouve le repertoire
     
    #ok ici
     
    # traite le fichier text et va chercher sur GenBank l'enzyme et en retir les infos que l'on souhaite que l'on met dans un fichier_enzyme  (test si trouve pas enzyme) 
    open (FILE, "$dossier_courant\\liste_enzyme.txt") || die "connot open liste_enzyme.txt";#doit le réouvrir
    while (<FILE>)
    {
    	if($_=~/^\D/)
    		{
    		chomp $_;
    		$name=$_;
    		}
    	open (FILE2, ">$dossier_courant\\$name\\$name.txt")|| die "cannot open file2";
    	push (@name, $name);
    	$query_string="$name"; #[organisme] a voir si il le faut
    	print "$query_string\n\n";
    	$gb->request_format('fasta') || die "pas de bol";
     
    	$query = Bio::DB::Query::GenBank->new(   -db=>$db,
    													-query=>$query_string,
    												) || die "pas de bol 2";
     
    	$stream = $gb->get_Stream_by_query($query) || die "pas de bol 3";
     
    	$i=0;
    		#recherches sur genbank et enregistrement dans le fichier
           while ($info = $stream->next_seq) #recupere les info
    		{
    		$Gi = $info->primary_id();
    		$seq = $info->seq;
    		$def = $info->description;
    		$i++;#incremente pour mettre dans le fichier
    		print FILE2 "$i : $Gi\n$def\n$seq\n";
    		#push(@ListeGi, $Gi);
    		}
    		@tabfeat= $info->get_SeqFeatures();
    		foreach $feat (@tabfeat)
    	{
             #recuperation du CDS
    	if ($feat->primary_tag() eq 'CDS')
    		{
    			#print FILE2 "coucou";#test
    			print FILE2 "Gène : ",$feat->get_tag_values('gene'),"\n";
    			print FILE2 "Product : ",$feat->get_tag_values('product'),"\n\n\n";
    		}
     
    }
     
    }

  2. #2
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Par défaut
    Je pense que le but d'un devoir ou d'un projet est de vous permettre d'apprendre en cherchant par soi même. Vous donner la réponse ne vous aidera en rien d'un point de vu formation. C'est malheureusement l'un des défauts d'internet où tout le monde cherche la réponse à sa question, ses devoirs ou autres sans se prendre réfléchir un minimum.

  3. #3
    Membre régulier
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    212
    Points
    93
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2009
    Messages : 212
    Points : 93
    Par défaut
    je suis désolé de dire cela mais nous avons des cours de perl java unix html mais pas de bio-perl donc on fait tout par soit même. Les professeurs donnant les sujets (les tuteurs) sont des prof de bioch ou génétique et ne mesurent pas forcément l'ampleur du travail au niveau programmation. De plus dans l'IUT nous avons un prof de bio-perl qui nous aide mais cela n'est pas forcément suffisant, il n'a pas que ça à faire. Le but du ptut est de faire en équipe un projet mais aussi de demander de l'aide lorsque nous avons besoin auprès de personnes qualifiées. Après je peux toujours demander a mon prof de ptut de vous envoyer un mail pour vous expliquer que nous aider n'est pas un problème. J'ai fais le programme par moi même et je ne suis pas prête de l'avoir fini. ce que je demande c'est juste de savoir ou est mon erreur, comment la débugger et de me l'expliquer.

  4. #4
    Membre régulier
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    212
    Points
    93
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2009
    Messages : 212
    Points : 93
    Par défaut
    j'ai oublier un détail, si vous avez lu le programme je pense que vous pourrez en déduire que je me suis pas mal pris le choux, surtout sachant que j'ai fais un courte formation de perl et pas de bio-perl, j'ai donc plus ou moins tout appris sur le tas en peu de temps en plus de mes cours. après chapeau bas et tant mieux pour vous si vous y arriver vite ; mais personnellement c'est dénigrant de vous faire voir un travail comme celui-ci qui ma couté énormément d'heures et de s'entendre dire (ou plutôt ici lire) que je ne me suis pas prise le choux avec mon programme.

    cordialement

  5. #5
    Rédactrice

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 408
    Points : 1 491
    Par défaut
    Nous sommes des familiers du forum Perl ... ce qui n'est pas ton cas. Après une visite régulière, tu verras que bien souvent, un certain nombre de forumeurs utilisent le forum comme une correction facile et pas chère ...
    Donc la première des réactions, comme l'a eu djibril, c'est de te dire qu'on ne fera pas les choses à ta place. Il est en effet difficile de savoir si tu as travaillé le code que tu nous a mis.

    Maintenant, si dans le cadre de ton projet, tu peux dire que tu as eu un coup de main ...
    Autre remarque :
    mon script ne marche pas
    n'est pas très informatif ... As-tu des erreurs de code? des résultats inattendus?
    Que contiennent tes fichiers?

    Un peu plus de détail et tu verras qu'ici les gens sont la plupart du temps bien sympa ...

  6. #6
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Par défaut
    Bon,

    Les formations en informatique ou bioinformatique, je les connais très bien. Donc je sais très bien comment fonctionnent les étudiants.

    Pour revenir au concret, bioperl n'est pas un langage de programmation, mais juste une librairie qui regroupe des modules permettant de faciliter la création de programmes, donc il n'existe pas des professeurs bioperl, mais perl ou autre langage.
    Généralement dans les formations, on vous donne souvent des projets à faire et on vous demande de ne pas utiliser de librairies annexes, ou plutôt modules pour revenir à perl, car le but est d'apprendre les bases du langage. Dès qu'on les maitrise un peu plus, on peut chercher à se faciliter la vie en utilisant les modules adéquats.

    Maintenant, pour revenir au fonctionnement de ce forum, il y a des règles à suivre que vous devriez lire ici. Pour avoir une réponse claire, il faut poser une question claire. Ce type de phrase "Ça ne marche pas ..." ne veut rien dire en informatique. Quel est votre bug, quels sont les messages d'erreurs, qu'obtenez vous comme résultat, à quoi vous attendiez vous, etc ?

    Voilà, maintenant si ces réponses vous gênes, c'est dommage.

  7. #7
    Membre régulier
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    212
    Points
    93
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2009
    Messages : 212
    Points : 93
    Par défaut
    ce n'est pas que cela me gène mais c'est juste vexant. Je suis d'accord sur le principe de ne pas faire les devoirs à la place des autres il n'y a aucun souci, je suis même d'accord. Le problème est que nous sommes plusieurs groupes à avoir le même style de sujet et nous n'arrivons pas à récupérer le CDS, nos script sont plus ou moins similaire.
    Mon problème ici est donc que j'arrive à tout récupérer sur le CDS. Mon programme crée un dossier au nom de l'enzyme (les noms sont contenu dans un fichier texte) et un fichier au nom de l'enzyme contenant le gi, la séquence et le descriptif (nom de la souche d'ou est extrait l'enzyme). Seulement sur chaque fiche internet je veux aussi récupéré le CDS (plus précisément le /coded_by.... du CDS qui contient le numéro d'accession de la souche ainsi que la partie de la séquence qui code pour l'enzyme). mon but est de récupérer ces infos afin de trouver les différentes séquences codant pour l'enzyme, les récupérer les comparer afin d'en faire des sondes moléculaires. et toute ses infos seront intégré dans une base de donnée. Tout notre travail servira pour la recherche de nos prof. Mais sans CDS je suis dans le pétrin.
    lorsque j'exécute se scripte il me rempli le premier fichier avec les infos sur l'enzyme exeptés le CDS et me met l'erreur "can't call method "get _SeqFeature" on an undefined value at refais.pl (nom du prog) line 166 , <GEN2> line 33" et du coup arrète le programme donc je n'ai pas les résultats pour les autre enzymes. si j'enlève la partie sur le CDS de mon programme celui tourne impec.
    voila le véritable problème
    je m'excuse de ne pas avoir été claire dès le départ
    merci de votre attention

    juste en note à l'IUT d'Aurillac depuis peu de temps il est proposé une licence pro bio-informatique avec des cours de Bio-perl avec un prof de bio-perl qui se nomme Mr Rimour qui est un intervenant tout comme mon prof de perl qui a la base est biologiste. cette licence a été mise en oeuvre dans un premier temps pour que les élèves de DUT Génie Biologique option Bio-informatique puisse continuer dans cette voix. Cette option en génie-bio est unique et sa formation se fait a Aurillac tout comme la licence pro. voili voila pour le petit coup de pub ^^

  8. #8
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Points
    2 673
    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
    Points : 2 673
    Par défaut
    Au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if($_=~/^\D/) # si commence par une lettre
    Utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if($_=~ m/^[a-z]/i) # si commence par une lettre
    Au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($reponse=~/oui/||$reponse=~/OUI/)
    Utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($reponse =~ m/oui/i)
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($reponse eq 'oui' || $reponse eq 'OUI')
    Pour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    goto A;#revient a A: plus haut
    Je ne sais pas si c'est approprié, mais peut-être est-ce la seule façon de procéder dans ton cas Article
    Conclusion

    Vous l'avez constaté, il existe de nombreux cas en programmation où l'instruction goto est appropriée. Mais depuis la polémique autour de l'utilisation du goto les langages de programmation ont adopté de nouveaux mots-clés pour faciliter la programmation structurée.

    C'est pourquoi en Perl, le goto « classique » est réservé à certains types de programmes et ne doit pas être utilisé pour la sortie de boucles, la gestion d'exception ou l'émulation d'une instruction case.


    Au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    open (FILE, "$dossier_courant\\liste_enzyme.txt") || die "connot open liste_enzyme.txt";#doit le réouvrir
    Utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    open my $file, '<', "$dossier_courant\\liste_enzyme.txt" or die $!;
    et n'oublie pas de fermer ton filehandle
    De façon générale, tu n'es pas obligée de déclarer toutes tes variables en bloc au début du code. Celles qui restent locales à une boucle, peuvent être déclarées à l'intérieure de celle-ci.

    Pour la partie du code qui pose problème, essaie ce mini code avec la query qui ne fonctionne pas et dis nous si ça va :
    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
    #!/usr/bin/perl
     
    use strict; # appelle pragma
    use warnings;  # appelle pragma, warnings, opère à la compilation une vérification de la syntaxe sur de nombreux points qui peuvent facilement passer inaperçus aux yeux du développeurs mais se révèlent souvent fatals à l'exécution
     
    use Cwd;  #donne le chemin absolu du répertoire courant ou est lancée le programme
    use Bio::DB::GenBank; #sert dans la partie Genbank
    use Bio::SeqIO;
     
     
     
    my $gb = new Bio::DB::GenBank;
     
    my $query = Bio::DB::Query::GenBank->new(   -db=>'protein',
    					    -query=> 'YP_001714198',
    					) || die "pas de bol 2";
     
     
    my $stream = $gb->get_Stream_by_query($query) || die "pas de bol 3";
     
     
    #recherches sur genbank et enregistrement dans le fichier
    while ( my $info = $stream->next_seq) #recupere les info
    {
    	my $Gi = $info->primary_id();
    	my $seq = $info->seq;
    	my $def = $info->description;
     
     
    	foreach my $feat ( $info->get_SeqFeatures() ) {
    		 #recuperation du CDS
    		 if ($feat->primary_tag() eq 'CDS')
    			{
    				print "Gène : ",$feat->get_tag_values('gene'),"\n";
     
    				if ( $feat->has_tag('product')){
    					print "Product : ",$feat->get_tag_values('product'),"\n\n\n";
    				}
    			}
    	}
    }

  9. #9
    Membre régulier
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    212
    Points
    93
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2009
    Messages : 212
    Points : 93
    Par défaut
    Merci beaucoup avec quelques modifications et tes réponses, mon programme tourne, il faut juste que je règle le détail d'imprimer dans un fichier mais j'y arriverais je n'ai pas eu le temps de m'y pencher c'est tout. Je vais enfin pouvoir continuer le développement du programme^^

    Merci encore de votre aide.

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

Discussions similaires

  1. Récupération de certains éléments d'une BDD
    Par DaisyVIP dans le forum ASP.NET
    Réponses: 27
    Dernier message: 08/06/2007, 16h20
  2. Réponses: 11
    Dernier message: 16/05/2007, 16h10
  3. Réponses: 3
    Dernier message: 06/12/2006, 12h44
  4. Récupération d'une info dans une balise
    Par sirbaldur dans le forum Langage
    Réponses: 4
    Dernier message: 18/07/2006, 12h34
  5. Réponses: 8
    Dernier message: 14/04/2005, 14h25

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