convertir un fichier fasta en format EMBL via Bio::SeqIO
Bonjour,
pour pouvoir utiliser un programme particulier sur mes séquences (qui sont actuellement au format fasta), je dois les convertir au format embl.
J'ai trouvé ce post où Jasmine80 explique comment se servir du module Bio::seqIO pour convertir un fichier EMBL en fichier fasta.
à partir de là, c'était pas bien compliqué de faire l'inverse.
Voici mon code:
Code:
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
| #!/usr/bin/perl -w
##packages utilises
use strict;
use diagnostics;
use Bio::SeqIO;
#pour la récupération des arguments
use vars qw($opt_h $opt_f);
use Getopt::Std;
##recuperation des arguments - initialisation
getopts("hf:") or die("erreur(s) de saisie dans les options. Faire -h pour obtenir l'aide\n");
if (defined($opt_h))
{
&help;
exit;
}
elsif(!defined($opt_f))
{
die("Parametre manquant : -f doit etre definit. Faire -h pour obtenir de l'aide.\n");
}
my $out_file;
if($opt_f =~ m/(.+)\.(fa|fasta)/)
{
$out_file = "$1.embl";
}
my $in = Bio::SeqIO->new(-file => $opt_f , '-format' => 'fasta');
my $out = Bio::SeqIO->new(-file => ">$out_file" , '-format' => 'EMBL');
while ( my $seq = $in->next_seq() ) {
$out->write_seq($seq);
}
sub help
{
print qq{
fasta_to_embl.pl prend en parametre un fichier au format fasta et le convertit au format EMBL (dans un nouveau fichier)
Paramètres :
-f : fichier fasta ou multifasta a convertir
};
} |
Le problème, c'est que le nom de mes fichiers fasta ne contient pas d'identifiant ensembl. Donc en sortie, mes séquences ne sont pas identifiées.
Par exemple, voici une sequence au format fasta en entré :
Code:
1 2
| >KRT16
CCTGGATAAGGCTTTCGCTCTCTCCAGTTGGGGTATTAATAGCCTTTGGTGACCTTGAAGACCATTTTCAGTTCTGAGGGTGATGGGTCTGTGGATGGACCAGAACTCCAGGCCCAACCTGACACCTGAACACTGAGGTTTTTGTCCAAGATTCCGGGGTCCCCTTTGCCCCTTTTTGGGGTAGGGGTGAGGAGTGTCAGGTTCCCTCTCCCAGGTTTGACTCTGAAGGGATGTGCATCCGTTCTGCTCTTACCTCTGGGATGAATGACCAGGGGAGATGTAGCAGTGACAAAACCCTGGTTCTGCTGAGACAAGGAATTGCCTGCCCCAGTGGAGCTCAGGCAGAAGCAGGCTGTCTCTGGGCTCCTCACCTCAACAGAGACACTGCAGAGCAAGGCCAGTGGCCAGCACCGAGGGATGCCCCACAGCACCCTGAGGAGGCCCCGTCTTGGTGCCCAGACCCCTCCATCCTCCCTCCAGTCCTCGGTGCTGGACCAGGCTCTCAGGCCAAGGCCATGCCCACCATGGGCAGACCTCCTGCCAGTGATCGTGGGGAGGTGGGTGAGAGTTGGGTATACTGGCCCCGCCTGCAGGCATGGTGGGAGCCTGGAGAGGGCCAGAGTTCTGGGTTCTAGTTGCAGCTCTGCAGCTTAAAGCAGAGTGACTTTGAGTGAATCTCTACGCTCACAGAACTGTATGGCACACACTGGGCTCTCCATGCATGCCTGAGTGGGCCCATAACCAGTGCTCTCCCCCAGCTCAGCTGGATGAATGGAGCTGCCAGGCCTAGCCTGGGATCTGTGGACACAGGAGAGAGAACTGCTGGGAACGGATCCCCGGCTAGTCCTGTTTCTACAGGGTAGGGGGGGACTCTGAGGCCCAGGTGGGGTCAGGGGTCATACCTGGCTGTAGTGGCAGGATGGGGCTCCCTCCCACCAGCCTGCAGGTGGGGTGCCTGTGATTAGGAGAGGGCGGTAGAGGAGTGGCAGAGCTAGGTGTGGGGCTGTGGTGTTCTTCAGCTGGGAGTGTGGGGGGCGCAGGGCCCTGCTTAGGGGTGCGGGATGGTGCCAGTGTGTAGAGGTGAGTGTGAGGAGCAGGTGGCTGGAGGGGCAGGATGGGGAGGCTGAGGGGCAGGGCTGGCCCTCGGGGAAGGGCCGGTGGGGTCCTTCGCGCATGTTTCTTTGTGGCTAGTGGTGTGTCATCCCCTTTTACAGATGAGAAAACTGAGGACCAAGGGGCTATAGGACCAGCCTGTGCTGTACAGTTGGTAAGGGCAGAGCAGGGACTCAGTGCCGCCTGTCTAGCTCCATGGCCAGTGCTGTTTGTATGGTGCACACACTTCTGGAGATCCCGGGGGCTCAAGGCAGCCTCTGGAACTGGAATTAGATCCAAGAGGGGAAAGAGAGTTATAGGATTTTTAGAACAGAAGGGACTCTGCAGTCACCCAGTCCAGCCTGGTCACTGAGGGGAAACAGGCCCAGAGGTGGGAGGTGGGGAGCCTCAGGCCACACAGCAAGCAGAGTGAAGACAGGAACTCTGCCCCTGCCCAGAGTGGGACATGTGGGATCCCCACAACTGCTCCCCAAGACAGCCCAGGATGGCATCACTGAGCTCTCTTTCAGCCAAGGCTGTCACTGTGGGGCAGGGAGTTCTTCTGAAGGGCTGACTCACTGCCTGGGGACGCAGTTGCCACAAAGCCACCTGTGCCAAGGCCCGACTGGCCCCGAGGGCTCCAGGAAAGGGAGCCTGATTCCCCACCGCCTAGCCTGAGTCACCACCGAACTCGCATTTCTGTGTTTTTCTCTCGGCCCCACACCCCCAAAGCTGGGTGGGAACTCTGAGCCGGCACACAGCAGAGTTGATCCTGGGCTGAATAATCCAGAGTGAGGAGTTGGACGGGACCGGGAGTGATGAAATCCAGAGGGGAACCTGGAGTCAGCAGTTAGGAGGGCCCCGCCTTCCCCAGCTGCATATAAAGGTCTCTGGGGTTGGAGGCAGCCA |
et voilà le résultat en sortie :
Code:
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
| ID unknown; SV 1; linear; unassigned DNA; STD; UNC; 2001 BP.
XX
AC unknown;
XX
XX
FH Key Location/Qualifiers
FH
XX
SQ Sequence 2001 BP; 405 A; 517 C; 670 G; 409 T; 0 other;
cctggataag gctttcgctc tctccagttg gggtattaat agcctttggt gaccttgaag 60
accattttca gttctgaggg tgatgggtct gtggatggac cagaactcca ggcccaacct 120
gacacctgaa cactgaggtt tttgtccaag attccggggt cccctttgcc cctttttggg 180
gtaggggtga ggagtgtcag gttccctctc ccaggtttga ctctgaaggg atgtgcatcc 240
gttctgctct tacctctggg atgaatgacc aggggagatg tagcagtgac aaaaccctgg 300
ttctgctgag acaaggaatt gcctgcccca gtggagctca ggcagaagca ggctgtctct 360
gggctcctca cctcaacaga gacactgcag agcaaggcca gtggccagca ccgagggatg 420
ccccacagca ccctgaggag gccccgtctt ggtgcccaga cccctccatc ctccctccag 480
tcctcggtgc tggaccaggc tctcaggcca aggccatgcc caccatgggc agacctcctg 540
ccagtgatcg tggggaggtg ggtgagagtt gggtatactg gccccgcctg caggcatggt 600
gggagcctgg agagggccag agttctgggt tctagttgca gctctgcagc ttaaagcaga 660
gtgactttga gtgaatctct acgctcacag aactgtatgg cacacactgg gctctccatg 720
catgcctgag tgggcccata accagtgctc tcccccagct cagctggatg aatggagctg 780
ccaggcctag cctgggatct gtggacacag gagagagaac tgctgggaac ggatccccgg 840
ctagtcctgt ttctacaggg taggggggga ctctgaggcc caggtggggt caggggtcat 900
acctggctgt agtggcagga tggggctccc tcccaccagc ctgcaggtgg ggtgcctgtg 960
attaggagag ggcggtagag gagtggcaga gctaggtgtg gggctgtggt gttcttcagc 1020
tgggagtgtg gggggcgcag ggccctgctt aggggtgcgg gatggtgcca gtgtgtagag 1080
gtgagtgtga ggagcaggtg gctggagggg caggatgggg aggctgaggg gcagggctgg 1140
ccctcgggga agggccggtg gggtccttcg cgcatgtttc tttgtggcta gtggtgtgtc 1200
atcccctttt acagatgaga aaactgagga ccaaggggct ataggaccag cctgtgctgt 1260
acagttggta agggcagagc agggactcag tgccgcctgt ctagctccat ggccagtgct 1320
gtttgtatgg tgcacacact tctggagatc ccgggggctc aaggcagcct ctggaactgg 1380
aattagatcc aagaggggaa agagagttat aggattttta gaacagaagg gactctgcag 1440
tcacccagtc cagcctggtc actgagggga aacaggccca gaggtgggag gtggggagcc 1500
tcaggccaca cagcaagcag agtgaagaca ggaactctgc ccctgcccag agtgggacat 1560
gtgggatccc cacaactgct ccccaagaca gcccaggatg gcatcactga gctctctttc 1620
agccaaggct gtcactgtgg ggcagggagt tcttctgaag ggctgactca ctgcctgggg 1680
acgcagttgc cacaaagcca cctgtgccaa ggcccgactg gccccgaggg ctccaggaaa 1740
gggagcctga ttccccaccg cctagcctga gtcaccaccg aactcgcatt tctgtgtttt 1800
tctctcggcc ccacaccccc aaagctgggt gggaactctg agccggcaca cagcagagtt 1860
gatcctgggc tgaataatcc agagtgagga gttggacggg accgggagtg atgaaatcca 1920
gaggggaacc tggagtcagc agttaggagg gccccgcctt ccccagctgc atataaaggt 1980
ctctggggtt ggaggcagcc a 2001
// |
au niveau de la séquence, c'est tout à fait ce que je veux, mais pour identifiant et AC, il met unknown.
Ce que j'aimerais, c'est que le nom de ma sequence apparaisse, sinon en identifiant, au moins dans une ligne de description (DE au format ensembl).
Je n'ai pas trouvé de fonction permettant d'éditer / d'ajouter une ligne dans le module Bio::SeqIO.
Je vois bien la solution de parser le fichier de résultats et d'ajouter la ligne qui convient en faisant gaffe à l'ordre des séquences, mais je me demandais s'il n'y avait pas une méthode plus propre pour le faire...
Merci d'avance pour vos conseils (en espérant que tout le monde n'est pas partie en vacances :aie:)