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 :

Requête sur bases de données Blast


Sujet :

Bioinformatique Perl

  1. #1
    Candidat au Club
    Inscrit en
    Janvier 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Requête sur bases de données Blast
    Bonjour à tous,

    Alors je vous expose mon problème:
    Nous avons un service blast installé localement sur un serveur. Des tâches planifiées s'occupent de télécharger les dernières bases de données au format Fasta, elles sont automatiquement mises en forme, une fiche fasta va correspondra à ces fichiers ( .psq, .psi, .psd, .pni, .pnd et .pin).
    Voilà pour situer le contexte.
    Ce que je voudrais faire c'est récupérer une séquence dans ces bases de données grâce à son identifiant, par exemple avec un identifiant swissprot je récupère la séquence correspondante dans la "table" swissprot.

    Est ce que l'outil BioPerl me permet de faire cela ?
    Sinon comment faire pour lancer des requêtes sur ma base Blast.

    Merci pour votre aide.

  2. #2
    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
    Points : 1 491
    Points
    1 491
    Par défaut
    Que veux-tu faire au juste?

    Utiliser les bases téléchargées pour récupérer les séquences à partir d'un identifiant (ce qui revient à du parsing des fichiers de ta base locale) ?

    Ou réaliser un alignement avec ta base locale et récupérer les séquences qui passent certains filtres (e-value, nombre de résidus, ...)?
    Cela demande du courage d'en tirer du plaisir
    Quand on n'a qu'un marteau, tous les problèmes ressemblent à un clou

  3. #3
    Membre confirmé
    Avatar de MaliciaR
    Inscrit en
    Juillet 2008
    Messages
    513
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juillet 2008
    Messages : 513
    Points : 600
    Points
    600
    Par défaut
    Salut et bienvenue,

    Blast n'est pas une base ou banque de données, mais un outil de recherche de similarités dans une base ou banque

    Sinon, quel est ton système d'exploitation?

    A titre indicatif, j'ai ce pitit script qui me permet de récupérer une fiche de GenBank ou EMBL (que je préfère) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #!/usr/bin/perl -w
     
    use Bio::DB::GenBank;
    use Bio::SeqIO;
     
    my $db = new Bio::DB::GenBank();
    my $seq = $db->get_Seq_by_acc("NM_021964");
    my $seqout = new Bio::SeqIO(-format => "genbank");
    if (defined $seq) {
    $seqout->write_seq($seq);
    }
    Donne un peu plus de détails pour qu'on puisse mieux t'aider (quel est le format de sortie souhaité, quel OS, quelles sont tes connaissances en Perl, etc.).
    Le tact dans l'audace c'est de savoir jusqu'où on peut aller trop loin. Cocteau
    L'abjection la plus totale, ce n'est pas de trahir, c'est de ne jamais donner un commencement de réalité à ses rêves les plus fous. M. Moreau


    Les indispensables : Les règles, , FAQ et tutos avant de poster, et !
    Traduction de Linux Device Drivers 3 : venez participer
    membre de l'April - Promouvoir et défendre les logiciels libres

  4. #4
    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
    Points : 1 491
    Points
    1 491
    Par défaut
    Si tu souhaites récupérer des informations (séquence, locus, description) à partir d'un identifiant grâce à Genbank, je te conseille en effet Bio::DB::GenBank (module BioPerl).

    Je te conseille l'article de Jasmine qui en explique tous les rouages!

    Cet article a pour vocation de vous expliquer comment extraire des informations dans la banque de données GenBank relatives à une séquence nucléique via un numéro d'accession, identifiant, en utilisant un module CPAN Perl (bioperl) nommé Bio :: DB :: GenBank.
    Tu y trouveras à priori toutes les informations nécessaires!
    Cela demande du courage d'en tirer du plaisir
    Quand on n'a qu'un marteau, tous les problèmes ressemblent à un clou

  5. #5
    Candidat au Club
    Inscrit en
    Janvier 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Merci pour vos réponses.

    Je sais que Blast est un outil et non une base ^^ mais je me suis mal exprimé.
    Nous téléchargeons de manière automatique les bases NCBI dans lesquelles nous souhaitons faire des comparaisons avec nos séquences. Elles sont alors au format Fasta zippé.
    Un autre script automatique les met en forme pour créer notre base de données.
    Blast est installé sur un serveur linux et se sert donc de cette base de données pour les comparaisons.
    Grâce à un outil sur notre intranet nous pouvons par exemple lancer une comparaison entre l'une de nos séquences et l'ensemble d'une table. (un MPIBlast)

    Parfois un utilisateur connaît l'identifiant de la séquence (dans la table swissprot par exemple) avec laquelle il voudrait comparer sa propre séquence.
    Ce qu'il faudrait faire n'est pas un Blast entre sa séquence et chaque séquence de la table swissprot mais un blast 2 séquences entre la séquence de l'utilisateur et la séquence que l'on récuperait dans la base de données grâce à l'identifiant en question. Tout cela dans un but évident de gagner du temps.

    Vu que l'outil est installé en local, avec les tables qui nous sont utiles. J'aurai voulu récupérer la séquence correspondante à l'identifiant et lancer un blast 2sequences. Je me demandais si BioPerl était capable d'interroger la base utilisée par Blast.

    Ou si vous savez comment faire. Est-il possible en ligne de commande que blast me retourne la séquence correspondante ? Vu que si je fais un blastAll sur une de ses tables blast va les parcourir. N'est-il pas capable de me renvoyer une séquence?


    J'ai quelques connaissances en perl sans être un expert et je viens de la programmation web et java, le domaine bioinformatique et tout nouveau pour moi. Je reprends le travail qui a été fait par une autre personne il y a quelques temps de cela et ce n'est pas évident de se plonger dedans.

    Récupérer la séquence en interrogeant GenBank sera mon dernier recours car on m'a demandé de plutôt travailler avec ce qui exste déjà en interne.

  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
    Citation Envoyé par jb59000 Voir le message
    Parfois un utilisateur connaît l'identifiant de la séquence (dans la table swissprot par exemple) avec laquelle il voudrait comparer sa propre séquence.
    Ce qu'il faudrait faire n'est pas un Blast entre sa séquence et chaque séquence de la table swissprot mais un blast 2 séquences entre la séquence de l'utilisateur et la séquence que l'on récuperait dans la base de données grâce à l'identifiant en question. Tout cela dans un but évident de gagner du temps.

    Vu que l'outil est installé en local, avec les tables qui nous sont utiles. J'aurai voulu récupérer la séquence correspondante à l'identifiant et lancer un blast 2sequences. Je me demandais si BioPerl était capable d'interroger la base utilisée par Blast.

    Ou si vous savez comment faire. Est-il possible en ligne de commande que blast me retourne la séquence correspondante ? Vu que si je fais un blastAll sur une de ses tables blast va les parcourir. N'est-il pas capable de me renvoyer une séquence?
    Pour ce qui est de blaster 2 séquences, tu peux utiliser la fonction bl2seq de module StandAloneBlast

    Citation Envoyé par jb59000 Voir le message
    blast 2 séquences entre la séquence de l'utilisateur et la séquence que l'on récuperait dans la base de données grâce à l'identifiant en question.
    ...
    Vu que si je fais un blastAll sur une de ses tables blast va les parcourir. N'est-il pas capable de me renvoyer une séquence?
    Blast est prévu pour comparer une séquence à une base de données. Il peut te récupérer la séquence la plus proche de ta séquence cible. Pour ce qui est de récupérer une séquence dans une base de données via son identifiant, il faut utiliser GenBank.

    Citation Envoyé par jb59000 Voir le message
    J'aurai voulu récupérer la séquence correspondante à l'identifiant et lancer un blast 2sequences.
    Si on travaille en ligne, c'est très facile via le module Genbank mais en local je ne sais pas comment faire. As-tu fait une recherche sur le CPAN?
    -- Jasmine --

  7. #7
    Candidat au Club
    Inscrit en
    Janvier 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Jasmine80 Voir le message
    Si on travaille en ligne, c'est très facile via le module Genbank mais en local je ne sais pas comment faire. As-tu fait une recherche sur le CPAN?
    Non c'est d'ailleurs une bonne idée, je vais chercher dessus si des modules peuvent me servir.

    Le problème avec GenBank c'est que l'identifiant de la séquence recherchée n'est pas le même que dans ma base locale. Par exemple une séquence dans le fichier Canine2_probe_fasta est
    ">probe:Canine_2:Cfa.10075.1.A1_at:571:739; Interrogation_Position=110; Antisense;
    GGCTCTTTCTGCACCAAAGCCAAGA" L'identifiant de cette séquence (que connaissent mes utilisateurs) est : Cfa.10075.1.A1_at:571:739. Alors que sous GenBank son identifiant sera du style AM117601.

    Je pense que si je ne trouve pas de solutions dans les modules du CPAN je devrais développer moi même le module pour interroger ma base de données.
    Je vous remercie pour vos réponses. Je vous tiens informé si je trouve quelque chose d'utile.

  8. #8
    Membre confirmé
    Avatar de MaliciaR
    Inscrit en
    Juillet 2008
    Messages
    513
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juillet 2008
    Messages : 513
    Points : 600
    Points
    600
    Par défaut
    Salut,

    J'aime bien les lignes de commande et je fais certaines choses (par exemple, des BLAST ainsi). Il te faut donc un outil type console sous Linux ou un environnement Linux-like genre Cygwin sous Windows. Tu installes blastall et puis, tout baigne

    Donc, voilà une proposition, elle vaut ce qu'elle vaut


    Citation Envoyé par jb59000 Voir le message
    Un autre script automatique les met en forme pour créer notre base de données.
    Blast est installé sur un serveur linux et se sert donc de cette base de données pour les comparaisons.
    C'est donc lui qui attribue les N° d'accession spécifiques? Toujours selon la même nomenclature (je parle du Cfa.10075.1.A1_at:571:739 : il s'agit toujours de 3 lettres puis point puis un nombre à plusieurs chiffres, etc.)?


    Citation Envoyé par jb59000 Voir le message
    Ou si vous savez comment faire. Est-il possible en ligne de commande que blast me retourne la séquence correspondante ? Vu que si je fais un blastAll sur une de ses tables blast va les parcourir. N'est-il pas capable de me renvoyer une séquence?
    Si j'ai un fichier avec plein de séquences au format fasta, je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    formatdb -i fichier_seq.fasta -p F -n fichierDB
    Formatdb transforme un fichier de séquences nucléiques ou protéiques en une espèce de banque pour être interrogée par BLAST (ce sont les développeurs de BLAST qui ont fait cet outil ). L'option -p F idnique que les séquences d'entrée sont des nucléotides. Pour les autres options : man formatdb devrait t'aider.
    Je te donne cette ligne parce que souvent, j'extraie des séquences à partir d'un gros fichier et je les transforme en banque : je bosse sur telle bactérie, je ne vais pas m'amuser à perdre du temps à chercher dans une banque entière alors que je peux créer la mienne (sous-banque) contenant par exemple le génome entière de la bactos tartampion ou toutes les protéines régulatrices impliquées dans je ne sais quel processus.
    Donc, au cas où...

    Ensuite, je lance un BLAST sur cette banque :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    blastall -p blastn -d fichierDB -i ma-sequence.fasta -a 2 -o blast_out.txt
    Donc, tu spécifies que tu veux utiliser ta banque perso (fichierDB), mais tu peux aussi bien mettre une autre (si elle est en local). L'option -o doit toujours précéder le nom de ton fichier de sortie, sinon y veut pas Tu peux fixer la E-value minimum par l'option -e X (X étant un nombre, la valeur par défaut est 10.0).

    Mais bon, admettons que tu as le numéro d'accession de la séquence d'intérêt : Cfa.10075.1.A1_at:571:739. On ne fait donc pas de recherche comme ce que je viens d'expliquer.
    Tu veux utiliser bl2seq (qui est un outil de comparaison de 2 séquences nucléiques ou protéiques en utilisant l'algo blastn ou blastp respectivement) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    b2seq -p blastn -i seq1.fasta -j seq2.fasta -G 5 -E 1
    Là, on compare deux séquences nucléiques. J'ai mis -G et -E comme ça me venait : il s'agit de la pénalité d'ouverture et d'extension de gap, respectivement. On peut spécifier plein de choses en plus : -A te permet d'avoir en input une séquence sous la forme d'un numéro d'accession, -M te permet de définir la matrice de substitution utiliée pour la comparaison de 2 séquences protéiques (BLOSUM62 par défaut), etc.
    Ici, la sortie est STDOUT (à l'écran). Mais si tu veux stocker dans un fichier texte ou autre, ça peut se faire

    Sinon, tu peux toujours utiliser le module Bio::AlignIO::bl2seq du CPAN.

    J'espère que ça t'aide un peu. Et que je n'ai pas dit une ânerie quelque part (l'heure est avancée ).
    Le tact dans l'audace c'est de savoir jusqu'où on peut aller trop loin. Cocteau
    L'abjection la plus totale, ce n'est pas de trahir, c'est de ne jamais donner un commencement de réalité à ses rêves les plus fous. M. Moreau


    Les indispensables : Les règles, , FAQ et tutos avant de poster, et !
    Traduction de Linux Device Drivers 3 : venez participer
    membre de l'April - Promouvoir et défendre les logiciels libres

  9. #9
    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
    A ce que j'ai compris
    Ce que je voudrais faire c'est récupérer une séquence dans ces bases de données grâce à son identifiant, par exemple avec un identifiant swissprot je récupère la séquence correspondante dans la "table" swissprot.
    ...

    Parfois un utilisateur connaît l'identifiant de la séquence (dans la table swissprot par exemple) avec laquelle il voudrait comparer sa propre séquence.
    Ce qu'il faudrait faire n'est pas un Blast entre sa séquence et chaque séquence de la table swissprot mais un blast 2 séquences entre la séquence de l'utilisateur et la séquence que l'on récuperait dans la base de données grâce à l'identifiant en question. Tout cela dans un but évident de gagner du temps.
    Il ne faut pas faire un blast de la séquence de l'utilisateur avec une (énorme) base de données de séquences mais faire un blast de cette séquence avec une autre bien précise. Dès lors, je ne vois pas l'intérêt d'utiliser blastall qui fera perdre du temps. Le plus efficaces serait (selon moi) de créer une DB classique genre MySQL, d'utiliser l'identifiant des séquences comme clé primaire et de créer un champ contenant les séquences.

    Utilisateur entre un identifiant et une séquence.
    Recherche dans la DB de la séquence correspondante (module DBI)
    Utilisation de bl2seq qui fera un blast de la séquence de l'utilisateur versus celle récupérée de la DB.(et inutile d'utiliser blastall qui prendrait énormément de temps et ne donnerait peut-être pas le résultat voulu).
    -- Jasmine --

  10. #10
    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
    Points : 1 491
    Points
    1 491
    Par défaut
    Si ton but est de récupérer la séquence correspondant à un identifiant dans les fichiers de la base locale de ton BLAST, alors je suis d'accord avec Jasmine .... aucun intérêt de faire un blastall ou même un bl2seq.

    L'idée de faire une base de données est bonne, surtout si tu fais des recherches régulières. Parse ton fichier local et insére tes données dans ta table.
    Je te conseille même de faire un update de ta table à chaque mise à jour de tes bases BLAST.
    Cela demande du courage d'en tirer du plaisir
    Quand on n'a qu'un marteau, tous les problèmes ressemblent à un clou

  11. #11
    Candidat au Club
    Inscrit en
    Janvier 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Bonjour à tous,

    Merci pour vos réponses, j'ai discuté de ce point avec un collègue qui doit bosser avec moi sur ce projet et on a évoqué l'idée de créer une base SQL qui regrouperait les données qui nous intéressent, un champ identifiant et un champ pour la séquence. ç'est ennuyeux car ça duplique les données mais si on peut gagner en facilité et en vitesse c'est pas un mal.

    Sinon nous avons trouvé des modules qui peuvent nous servir sur le cpan.

    Je passe le post en résolu, merci pour le coup de main et bonne journée.

  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
    Citation Envoyé par jb59000 Voir le message
    Sinon nous avons trouvé des modules qui peuvent nous servir sur le cpan.
    Par curiosité, quels modules allez-vous utiliser?
    -- Jasmine --

  13. #13
    Candidat au Club
    Inscrit en
    Janvier 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Bonjour, en fait dans le package BioPerl il existe des modules permettant d'interroger des bases locales formatées pour être utilisées par blast.
    Je devais regarder plus avant pour voir comment les paramétrer mais j'ai trouvé un moyen de faire plus simple:

    Les bases ici sont créées à partir de fichier Fasta mis en forme par l'utilitaire formatdb. Il y a un autre utilitaire fastacmd qui permet d'interroger une base de donnée ainsi faite et de récupérer la séquence que l'on veut en fonction de son identifiant donc exactement ce que je voulais faire.
    je vais donc travailler de cette manière plutôt que par les modules Perl car beaucoup plus simple à mettre en place.

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

Discussions similaires

  1. Requête sur base de données distante
    Par themich dans le forum Requêtes
    Réponses: 0
    Dernier message: 09/02/2013, 18h24
  2. [1.x] Requête sur base de données
    Par lepopol dans le forum Symfony
    Réponses: 23
    Dernier message: 29/05/2011, 13h10
  3. [MySQL] Requête sur base de données à partir d'un formulaire
    Par spawns dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 26/01/2009, 09h00
  4. Execution de requête sur base de données distante
    Par ~~PriVate JoKe~~ dans le forum Requêtes
    Réponses: 4
    Dernier message: 19/11/2006, 21h59
  5. Requête sur base de données ACCESS
    Par JLamotte dans le forum Access
    Réponses: 1
    Dernier message: 21/11/2005, 10h50

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