Bonjour à tous,
je viens voir si l'un(e) d'entre vous pourrait venir à mon secours. Je m'explique, j'ai actuellement un fichier .fasta contenant environ 10000 séquences de petits ARN qu'il faudrait que je blaste. Pour ne pas le faire manuellement, j'ai décidé d'utiliser Bioperl et de faire un petit script (très très largement inspiré de ce que j'ai trouvé sur le net) pour qu'il le fasse de lui-même.
Le but de ce script: blaster chacune de mes séquences l'une derrière l'autre et enregistrer pour chaque séquence le résultat dans un fichier "nom_séquence.out".
Le problème: quelle que soit la séquence le fichier de sortie contient:
"No alias or index file found for nucleotide database [nr/nt] in search path [/export/home/web/public/htdocs/blast/SPLITD:/export/home/splitd/blastdb/blast:/blast/db/blast:/blast/db/disk.blast/blast1:]"
et aussi :
"<b>No significant similarity found.</b> For reasons why, <A HREF = "Blast.cgi?CMD=Web&PAGE_TYPE=BlastDocs&DOC_TYPE=FAQ"><b>click here</A>.</b><br><br>"
C'est quoi ce "For reasons why .... click here"? Aurai-je fais une erreur de code?
Or ce n'est pas possible, il y a forcément un résultat. J'ai essayé de le faire pour quelques séquences directement sur le site du NCBI mais ça plante.
Je voudrais donc votre avis sur mon code, savoir s'il est correct ou si' j'ai raté quelquechose. En vous remerciant par avance!
Encore merci pour toute réponse que vous pourrez m'apporter!
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 use Bio::Tools::Run::RemoteBlast; use strict; my $prog = 'blastn'; my $db = 'nr/nt'; my $e_val= '1e-10'; my @params = ( '-prog' => $prog, '-data' => $db, '-expect' => $e_val, '-readmethod' => 'SearchIO' ); my $factory = Bio::Tools::Run::RemoteBlast->new(@params); my $v = 1; my $str = Bio::SeqIO->new(-file=>"C:/fichier.fasta" , -format => 'fasta' ); while (my $input = $str->next_seq()){ my $r = $factory->submit_blast($input); print STDERR "waiting..." if( $v > 0 ); while ( my @rids = $factory->each_rid ) { foreach my $rid ( @rids ) { my $rc = $factory->retrieve_blast($rid); if( !ref($rc) ) { if( $rc < 0 ) { $factory->remove_rid($rid); } print STDERR "." if ( $v > 0 ); sleep 5; } else { my $result = $rc->next_result(); my $filename = $result->query_name()."\.out"; $factory->save_output($filename); $factory->remove_rid($rid); print "\nQuery Name: ", $result->query_name(), "\n"; while ( my $hit = $result->next_hit ) { next unless ( $v > 0); print "\thit name is ", $hit->name, "\n"; while( my $hsp = $hit->next_hsp ) { print "\t\tscore is ", $hsp->score, "\n"; } } } } } }
Partager