annotate 1.0.0/assets/abricate-get_db @ 0:801b85b03a17 draft default tip

planemo upload
author galaxytrakr
date Thu, 28 May 2026 20:31:42 +0000
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
1 #!/usr/bin/env perl
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
2
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
3 use strict;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
4 use FindBin;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
5 use Bio::SeqIO;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
6 use Bio::Seq;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
7 use Path::Tiny;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
8 use File::Basename;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
9 use File::Spec;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
10 use File::Path qw(make_path remove_tree);
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
11 use List::Util qw(first);
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
12 use Cwd qw(abs_path);
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
13 use Data::Dumper;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
14 use LWP::Simple;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
15 use JSON;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
16
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
17 #..............................................................................
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
18 # Globals
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
19
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
20 my $EXE = basename($0);
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
21 my $ABX_SEP = ';';
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
22
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
23 my %DATABASE = (
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
24 'resfinder' => \&get_resfinder,
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
25 'plasmidfinder' => \&get_plasmidfinder,
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
26 'megares' => \&get_megares,
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
27 'argannot' => \&get_argannot,
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
28 'card' => \&get_card,
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
29
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
30 # 'ncbibetalactamase' => \&get_ncbibetalactamase,
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
31 'ncbi' => \&get_ncbi,
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
32 'vfdb' => \&get_vfdb,
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
33 'ecoli_vf' => \&get_ecoli_vf, # https://github.com/phac-nml/ecoli_vf
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
34 'ecoh' => \&get_ecoh,
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
35 'bacmet2' => \&get_bacmet2,
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
36 'victors' => \&get_victors,
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
37
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
38 # 'serotypefinder' => \&get_serotypefinder,
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
39 );
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
40 my $DATABASES = join( ' ', sort keys %DATABASE );
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
41
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
42 #..............................................................................
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
43 # Command line options
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
44
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
45 my ( @Options, $debug, $outdir, $db, $force );
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
46 setOptions();
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
47
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
48 $db or err("Please choose a --db from: $DATABASES");
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
49 exists $DATABASE{$db} or err("Unknown --db '$db', choose from: $DATABASES ");
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
50 -d $outdir or err("--outdir '$outdir' does not exist");
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
51
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
52 my $dir = abs_path( File::Spec->catdir( $outdir, $db ) );
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
53 make_path($dir);
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
54 msg("Setting up '$db' in '$dir'");
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
55
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
56 #my $tmpdir = tempdir("$db-XXXXXXXX", DIR=>$dir, CLEANUP=>0);
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
57 #my $tmpdir = "/home/tseemann/git/abricate/db/resfinder/resfinder-6Kuphtvv";
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
58 my $tmpdir = "$dir/src";
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
59 make_path($tmpdir);
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
60
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
61 # run the specific function from --db
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
62 chdir $tmpdir;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
63 my $seq = $DATABASE{$db}->();
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
64 map { is_full_gene($_) } @$seq; # doesn't do anything?
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
65 $seq = dedupe_seq($seq);
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
66
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
67 #print Dumper($seq);
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
68 msg("Sorting sequences by ID");
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
69 $seq = [ sort { $a->{ID} cmp $b->{ID} } @$seq ];
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
70 save_fasta( "$dir/sequences", $seq );
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
71
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
72 msg("Formatting BLASTN database: $dir/sequences");
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
73 my $logfile = "$tmpdir/makeblastdb.log";
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
74 my $ncbi_title = $db;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
75 if ( "$db" eq "ncbi" ) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
76 $ncbi_title = "ncbiamrplus";
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
77 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
78 my $ec = system(
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
79 "makeblastdb -in '$dir/sequences' -title '$ncbi_title' -dbtype nucl -hash_index -logfile $logfile"
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
80 );
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
81 if ( $ec != 0 ) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
82 system("tail '$logfile'");
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
83 err("Error with makign BLAST database. See $logfile");
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
84 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
85
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
86 #msg("Run 'abricate --setupdb' to format the database");
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
87
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
88 msg("Done.");
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
89
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
90 #..............................................................................
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
91
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
92 sub download {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
93 my ( $url, $dest ) = @_;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
94 if ( -r $dest and not $force ) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
95 msg("Won't re-download existing $dest (use --force)");
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
96
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
97 #exit(1);
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
98 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
99 else {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
100 msg("Downloading: $url");
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
101 my $ec = mirror( $url, $dest );
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
102 msg("HTTP Result: $ec");
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
103 ( $ec == 200 or $ec = 304 )
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
104 or err("HTTP $ec | failed to download $url"); # is HTTP OK ?
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
105 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
106 msg("Destination: $dest");
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
107 msg( "Filesize:", ( -s $dest ), "bytes" );
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
108 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
109
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
110 #..............................................................................
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
111 sub trim_spaces {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
112 my ($s) = @_;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
113 $s =~ s/^\s+//;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
114 $s =~ s/\s+$//;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
115 return $s;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
116 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
117
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
118 #..............................................................................
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
119 sub get_resfinder {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
120 my $name = "resfinder_db";
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
121
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
122 # FIXME - can we just get HEAD.zip like in plasmidfinder?
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
123 my $url = "https://bitbucket.org/genomicepidemiology/$name.git";
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
124
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
125 if (-r $name and not $force) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
126 msg("Won't overwrite existing $name (use --force)");
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
127 exit(1);
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
128 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
129 else {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
130 msg("Nuking existing folder: $name");
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
131 remove_tree("./$name");
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
132 msg("Cloning $url to $name");
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
133 system("git clone --quiet $url $name");
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
134 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
135
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
136 #<*.fsa>
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
137 #>aac(6')-Ib_2_M23634
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
138 #>blaNDM-19_1_MF370080
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
139 #>mcr-1.1_1_KP347127
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
140 #>fosB1_1_CP001903
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
141 #>fusB_1_AY373761
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
142 #>VanHAX_1_FJ866609
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
143 #>ere(A)_6_DQ157752
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
144 #>nimA_1_X71444
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
145 #>cfr_1_AM408573
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
146 #>catB3_2_U13880
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
147 #>qnrA1_1_AY070235
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
148 #>ARR-2_1_HQ141279
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
149 #>sul1_2_U12338
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
150 #>tet_1_M74049
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
151 #>dfrA19_1_EU855687
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
152
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
153 #<notes.txt>
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
154 #aac(6')-Iv:Aminoglycoside resistance:
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
155 #aac(6')-Iw:Aminoglycoside resistance:Alternate name; aac(6')-Ix
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
156 #sul3:Sulphonamide resistance:
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
157 ##Tetracycline:
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
158 #ort(B):Tetracycline resistance:
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
159 #blaCMY-59:Beta-lactam resistance:
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
160
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
161 #<phenotypes.txt>
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
162 #Gene_accession no. Class Phenotype PMID Mechanism of resistance Notes Required_gene
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
163 #ant(2'')-Ia_1_X04555 Aminoglycoside Gentamicin, Tobramycin 3024112 Enzymatic modification Alternative name aadB
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
164 #ant(2'')-Ia_2_JF826500 Aminoglycoside Gentamicin, Tobramycin 22271862 Enzymat
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
165
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
166 # $name = "~/apps/bettercallsal/assets/abricate_dbs/$name";
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
167 my $metafn = "$name/phenotypes.txt";
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
168 my @meta = path($metafn)->lines( { chomp => 1 } );
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
169 my %anno;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
170 foreach (@meta) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
171 next if m/^#/;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
172 my @x = split m/\t/;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
173
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
174 #msg("$metafn: @x");
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
175 my ($gene) = ( $x[0] =~ m/^(.*?)_\w+$/ );
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
176 $anno{$gene}{ABX} = [
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
177 map { trim_spaces($_) }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
178 grep { !m/(unknown|notes|^none)/i }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
179 split m/,\s*/,
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
180 $x[2]
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
181 ];
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
182
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
183 #msg("$metafn: $gene |", $anno{$gene}{ABX}->@*);
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
184 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
185 msg( "get_resfinder: $metafn", scalar( keys %anno ), "genes" );
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
186
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
187 #print Dumper(\%anno);
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
188
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
189 my @seq;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
190 for my $fasta (<$name/*.fsa>) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
191
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
192 # Issue #62 - repair broken fasta files like this:
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
193 # GCTTTAAATTGGAAAAAAGATAGTCAAACTCTTTAA>cmr_1_U43535
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
194 # inline replacement
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
195 system( 'sed', '-i.bak', 's/\([A-Z]\)>/\1\n>/gi', $fasta );
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
196 my $args = load_fasta($fasta);
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
197
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
198 # use name of fasta file as antibiotic name
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
199 #my $abx = basename($fasta, '.fsa');
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
200 #msg("$fasta: Assigning '$abx' to all genes");
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
201 #push @{$_->{ABX}}, $abx for (@$args);
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
202 push @seq, @$args;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
203 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
204
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
205 # https://github.com/tseemann/abricate/issues/92
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
206 # mcr-9_1_NZ_NAAN01000063.1
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
207 #>mcr-9_1_NZ_NAAN01000063.1
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
208 # mcr-9.1:Colistin resistance:
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
209
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
210 for my $seq (@seq) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
211 my ( $id, $copy, $acc ) = $seq->{ID} =~ m/^(.*?)_(\d+)_(\S+)$/;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
212
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
213 #msg("resfinder: $1 $2 $3", $anno{$1});
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
214 $seq->{ID} = "${id}_${copy}";
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
215 $seq->{ACC} = $acc;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
216 $seq->{DESC} = $anno{$id}{DESC} || $id;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
217 push @{ $seq->{ABX} }, @{ $anno{$id}{ABX} } if $anno{$id}{ABX};
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
218 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
219
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
220 return \@seq;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
221 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
222
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
223 #..............................................................................
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
224 sub get_serotypefinder {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
225 my $name = "serotypefinder_db";
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
226 my $url = "https://bitbucket.org/genomicepidemiology/$name.git";
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
227
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
228 if ( -r $name and not $force ) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
229 msg("Won't overwrite existing $name (use --force)");
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
230
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
231 # exit(1);
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
232 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
233 else {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
234 msg("Nuking existing folder: $name");
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
235 remove_tree("./$name");
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
236 msg("Cloning $url to $name");
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
237 system("git clone --quiet $url $name");
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
238 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
239
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
240 my @seq;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
241 for my $fasta (<$name/*.fsa>) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
242 push @seq, @{ load_fasta($fasta) };
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
243 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
244
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
245 # >fliC_44444_AY250028_H52
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
246 # FIXME - this is already in EcOH database!
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
247 for my $seq (@seq) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
248 my ( $id, $copy, $acc ) = $seq->{ID} =~ m/^(.*)_(\d+)_(\w+)$/;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
249
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
250 #msg("serotypefinder: $1 $2 $3", $anno{$1});
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
251 $seq->{ID} = "${id}_${copy}";
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
252 $seq->{ACC} = $acc;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
253
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
254 #$seq->{DESC} = $anno{$id} || '';
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
255 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
256
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
257 return \@seq;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
258 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
259
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
260 #..............................................................................
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
261 sub get_tag {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
262 my ( $f, $tag ) = @_;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
263 if ( $f->has_tag($tag) ) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
264 my ($val) = $f->get_tag_values($tag);
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
265 return $val;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
266 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
267 return '';
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
268 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
269
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
270 #..............................................................................
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
271 sub get_ncbi {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
272 my $AFP =
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
273 "https://ftp.ncbi.nlm.nih.gov/pathogen/Antimicrobial_resistance/AMRFinderPlus/database/latest";
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
274
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
275 #my $src = "https://ftp.ncbi.nlm.nih.gov/pathogen/Antimicrobial_resistance/AMRFinderPlus/data/latest/AMR_CDS";
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
276 my $src = "$AFP/AMR_CDS.fa";
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
277 my $name = "amr_cds.ffn";
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
278
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
279 #my $src2 = "https://ftp.ncbi.nlm.nih.gov/pathogen/Antimicrobial_resistance/AMRFinderPlus/data/latest/ReferenceGeneCatalog.txt";
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
280 my $src2 = "$AFP/ReferenceGeneCatalog.txt";
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
281 my $name2 = "amr_cds.tsv";
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
282
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
283 if ( -r $name and -r $name2 and not $force ) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
284 msg("Won't overwrite existing $name/$name2 (use --force)");
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
285
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
286 # exit(1);
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
287 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
288 else {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
289 download( $src, $name );
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
290 download( $src2, $name2 );
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
291 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
292
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
293 #1 allele
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
294 #2 gene_family ble
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
295 #3 whitelisted_taxa
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
296 #4 product_name BLMA family bleomycin binding protein
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
297 #5 scope core
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
298 #6 type AMR
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
299 #7 subtype AMR
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
300 #8 class BLEOMYCIN
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
301 #9 subclass BLEOMYCIN
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
302 #10 refseq_protein_accession WP_063842967.1
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
303 #11 refseq_nucleotide_accession NG_047554.1
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
304 #12 curated_refseq_start No
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
305 #13 genbank_protein_accession CAA02068.1
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
306 #14 genbank_nucleotide_accession A31900.1
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
307 #15 genbank_strand_orientation +
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
308 #16 genbank_cds_start 6
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
309 #17 genbank_cds_stop 374
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
310 #18 pubmed_reference
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
311 #19 blacklisted_taxa
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
312 #20 db_version 2019-08-27.1
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
313
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
314 my $tsv = load_tabular( $name2, 10 ); # refseq_nucleotide_accession
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
315 my $tsv2 = load_tabular( $name2, 12 ); # refseq_nucleotide_accession
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
316
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
317 msg( "[$name2] Loaded", scalar keys %$tsv, "records" );
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
318 msg( "[$name2] Loaded", scalar keys %$tsv2, "records" );
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
319 # print keys %$tsv;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
320 # exit;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
321
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
322 # https://github.com/ncbi/amr/wiki/AMRFinderPlus-database#amrprot
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
323 # 0 1 2 3 4 5 6 7
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
324 # >1000909371|WP_061158039.1|NG_050200|1|1|blaTEM-156|blaTEM|class_A_beta-lactamase_TEM-156 NG_050200:101-961
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
325 my @seq;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
326 my $in = Bio::SeqIO->new( -file => $name, -format => "fasta" );
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
327 while ( my $rec = $in->next_seq ) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
328
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
329 # parse ID
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
330 my ( $gi, $pi, $acc, $fp, $fn, $gene, $fam, $prod ) = split m/\|/,
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
331 $rec->id;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
332
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
333 # skip fusion genes
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
334 next unless $fp == 1 and $fn == 1;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
335
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
336 # only keep true ARGs
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
337 $acc .= ".1" unless $acc =~ m/\.\d+$/;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
338 #my $t = $tsv->{$acc} or next;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
339 my $t;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
340 if ($tsv->{$acc}) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
341 $t = $tsv->{$acc}
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
342 } elsif ($tsv2->{$pi}) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
343 # print $pi, ": pi\n";
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
344 # print $acc, ": acc\n";
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
345 # print "$pi | scope: ", $t->{scope}, "\n";
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
346 # exit;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
347 $t = $tsv->{$pi}
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
348 } else {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
349 next;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
350 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
351 #next unless ( $t->{scope} eq 'plus' || $t->{scope} eq 'core' );
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
352
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
353 # next unless $t->{type} eq 'VIRULENCE';
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
354 # next unless $t->{subtype} eq 'VIRULENCE';
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
355 # construct sequence record
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
356 $prod =~ s/_/ /g;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
357 err("$pi: gene is empty") unless $gene;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
358 err("$pi: product is empty") unless $prod;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
359 my $s = {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
360 ID => $gene,
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
361 ACC => $acc,
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
362 DESC => $prod,
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
363 SEQ => $rec->seq,
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
364 ABX => [ split m'/', $t->{subclass} ]
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
365 };
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
366 push @seq, $s;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
367 msg( "[$name]", 0 + @seq, "|", $s->{ID}, "|", $s->{ACC}, "|",
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
368 $s->{DESC} );
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
369
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
370 #msg(Dumper($s));
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
371 msg( $s->{ID}, " is fusion $fp/$fn" ) if "$fp$fn" ne '11';
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
372 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
373 return \@seq;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
374 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
375
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
376 #..............................................................................
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
377 sub get_plasmidfinder {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
378 my $name = "plasmidfinder";
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
379 my $zip = "$name.zip";
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
380
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
381 # download("https://cge.cbs.dtu.dk/cge/download_data.php?folder=$name&filename=$zip&submit=$zip", $zip);
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
382 download(
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
383 "https://bitbucket.org/genomicepidemiology/plasmidfinder_db/get/HEAD.zip",
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
384 $zip
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
385 );
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
386 system("unzip -j -u $zip");
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
387
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
388 my @seq;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
389 for my $fasta (<*.fsa>) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
390 push @seq, @{ load_fasta($fasta) };
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
391 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
392
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
393 for my $seq (@seq) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
394 $seq->{DESC} = $seq->{ID}; # no desc, so use ORIGINAL ID as desc
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
395 my ( $id, $acc ) =
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
396 ( $seq->{ID} =~ m/^(.*)_(([A-Z]+|NC_)\d+(\.\d+)?)$/ );
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
397 $id =~ s/_+$//g;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
398 $seq->{ID} = $id || $seq->{ID};
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
399 $seq->{ACC} = $acc || '';
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
400 wrn( "Parsed empty ID:",
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
401 $seq->{DESC},
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
402 "=> id='$id' acc='$acc' seq=" . substr( $seq->{SEQ}, 0, 10 ) )
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
403 if not $id;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
404 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
405
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
406 return \@seq;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
407 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
408
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
409 #..............................................................................
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
410 sub get_megares {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
411 my $zip = "megares.zip";
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
412 download( 'https://www.meglab.org/downloads/megares_v3.00.zip', $zip );
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
413 system("unzip -j -u $zip");
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
414 my $seqs = load_fasta( glob("megares_drugs_*.fasta") );
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
415 my @okseq;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
416
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
417 # >MEG_372|Multi-compound|Drug_and_biocide_resistance|Drug_and_biocide_MATE_efflux_pumps|ABEM
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
418 # >MEG_411|Multi-compound|Drug_and_biocide_resistance|Drug_and_biocide_RND_efflux_regulator|ACRR|RequiresSNPConfirmation
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
419 # >MEG_7860|Drugs|betalactams|Class_B_betalactamases|ZOG
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
420 # >MEG_7439|Drugs|Glycopeptides|VanI-type_resistance_protein|VANI
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
421 # >MEG_7245|Drugs|Tetracyclines|Tetracycline_resistance_MFS_efflux_pumps|TETY
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
422 # >MEG_9|Drugs|Aminoglycosides|Aminoglycoside-resistant_16S_ribosomal_subunit_protein|A16S|RequiresSNPConfirmation
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
423
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
424 for my $s (@$seqs) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
425 my ( $id, $type, $class, $mech, $group, $note ) = split m/\|/, $s->{ID};
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
426 if ($note) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
427
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
428 # "RequiresSNPConfirmation" is the common one; we can't do that
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
429 msg("Skipping $id due to: $note");
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
430 next;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
431 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
432 $s->{ID} = $group;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
433 $s->{ACC} = $id;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
434 $s->{DESC} = join( ':', $type, $class, $mech, $group );
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
435 push @okseq, $s;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
436 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
437 return [@okseq];
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
438
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
439 #return $seqs;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
440 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
441
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
442 #..............................................................................
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
443 sub get_argannot {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
444 my $fasta = 'arg-annot.fa';
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
445 download(
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
446 # 'http://www.mediterranee-infection.com/arkotheque/client/ihumed/_depot_arko/articles/1425/argannot-aa-v3-march2017_doc.fasta',
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
447 # 'http://www.mediterranee-infection.com/arkotheque/client/ihumed/_depot_arko/articles/691/argannot-nt_doc.fasta',
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
448 'https://www.mediterranee-infection.com/wp-content/uploads/2019/09/ARG-ANNOT_NT_V6_July2019.txt',
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
449 $fasta
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
450 );
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
451
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
452 # fix syntax errors in the FASTA file...
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
453 path($fasta)->edit( sub { s/\\//g; $_ } );
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
454
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
455 my $seqs = load_fasta($fasta);
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
456
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
457 # 0 1 2 3
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
458 # >(AGly)Aac2-Ie:NC_011896:3039059-3039607:549
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
459 for my $s (@$seqs) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
460 my @x = split m/:/, $s->{ID};
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
461 $s->{ID} = $x[0];
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
462 $s->{ACC} = $x[1] . ':' . $x[2];
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
463 $s->{DESC} = '';
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
464 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
465
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
466 return $seqs;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
467 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
468
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
469 #..............................................................................
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
470 sub get_bacmet2 {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
471 my $fasta = 'bacmet2.fa';
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
472 download(
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
473 'http://bacmet.biomedicine.gu.se/download/BacMet2_EXP_database.fasta',
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
474 $fasta );
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
475
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
476 # This is a PROTEIN file
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
477 my $seqs = load_fasta($fasta);
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
478
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
479 # 0 1 2 3 4 ^
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
480 # >BAC0098|ctpC|sp|P0A502|CTPC_MYCTU Probable manganese/zinc-exporting
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
481 for my $s (@$seqs) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
482 my @x = split m/\|/, $s->{ID};
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
483 $s->{ID} = $x[1] . '-' . $x[0];
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
484 $s->{ACC} = $x[2] . ':' . $x[3];
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
485 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
486
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
487 return $seqs;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
488 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
489
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
490 #..............................................................................
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
491 sub get_card {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
492
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
493 # https://github.com/tseemann/abricate/issues/25
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
494 my $tarball = 'card.tar.bz2';
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
495 download(
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
496 #'https://card.mcmaster.ca/download/0/broadstreet-v2.0.2.tar.gz',
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
497 'https://card.mcmaster.ca/latest/data',
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
498
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
499 #'https://card.mcmaster.ca/latest/data/card-data.tar.bz2',
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
500 $tarball # yes, it's really BZ2 not GZ ...
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
501 );
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
502
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
503 # my $fasta = "./nucleotide_fasta_protein_homolog_model.fasta";
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
504 my $jsonfile = "./card.json";
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
505 system( "tar", "xf", $tarball, $jsonfile ) == 0
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
506 or err("Problem with tar xf $tarball $jsonfile");
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
507 -r $jsonfile or err("Could not extract $jsonfile from $tarball");
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
508
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
509 # JSON
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
510 my $json = path($jsonfile)->slurp_utf8;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
511 my $card = from_json( $json, { latin1 => 1 } );
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
512 my @seq;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
513 for my $g ( values %$card ) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
514 next unless ref($g) eq 'HASH';
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
515
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
516 # msg(Dumper($g));
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
517 next
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
518 unless $g->{model_type} eq
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
519 "protein homolog model"; # only 'acquired' genes
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
520 my $id = $g->{model_name};
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
521 err("$id has {model_param}{snp}") if exists $g->{model_param}{snp};
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
522
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
523 # msg("CARD: $id");
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
524 # print STDERR Dumper($g);
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
525 my $dna = $g->{model_sequences}{sequence}
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
526 or err("$id: no {model_sequences}{sequence} found");
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
527 my ($key) = sort keys %$dna; # first key
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
528 $dna = $dna->{$key} or err("$id: invalid key '$key'");
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
529 $dna = $dna->{dna_sequence} or err("$id: no dna_sequence");
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
530
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
531 # msg(Dumper($dna)) if $id eq 'OXA-25';
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
532
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
533 # ARO_category => {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
534 # 'category_aro_name' => 'cephalosporin',
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
535 # 'category_aro_class_name' => 'Drug Class',
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
536 my $is_amr_gene = 0;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
537 my @abx;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
538 for my $key ( keys $g->{ARO_category}->%* ) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
539 my $c = $g->{ARO_category}{$key};
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
540 if ( $c->{category_aro_class_name} eq 'Drug Class' ) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
541 my $abx = $c->{category_aro_name};
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
542 $abx =~ s/ antibiotic//;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
543 $abx =~ s/\s/_/g;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
544 push @abx, $abx;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
545 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
546 if ( $c->{category_aro_class_name} eq 'AMR Gene Family' ) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
547 $is_amr_gene++;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
548 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
549 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
550
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
551 #err("CARD | $id | ", Dumper($g->{ARO_category}) ) unless $is_amr_gene;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
552 #msg("ABX=$_") for @abx;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
553
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
554 # put coordinates into normal form
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
555 my ( $start, $stop ) =
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
556 $dna->{strand} eq '-'
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
557 ? ( $dna->{fmax}, $dna->{fmin} )
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
558 : ( $dna->{fmin}, $dna->{fmax} );
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
559
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
560 $id =~ s/\s+/_/g;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
561 push @seq,
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
562 {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
563 ID => $id,
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
564 ACC => $dna->{accession} . ":$start-$stop",
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
565 DESC => ( $g->{ARO_description} || $g->{ARO_accession} ),
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
566 SEQ => $dna->{sequence},
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
567 ABX => [@abx],
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
568 };
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
569
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
570 # msg(Dumper($seq[-1]));
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
571 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
572
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
573 return \@seq;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
574 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
575
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
576 #..............................................................................
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
577 sub get_victors {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
578
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
579 # the CDS data is in .ffn and has source GI and coords
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
580 # the PROT data is in .faa and has the protein ref and /product
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
581
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
582 #>gi|115534241:2616-3152 Campylobacter jejuni plasmid pCJ01, complete sequence
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
583 download( 'http://www.phidias.us/victors/downloads/gen_downloads.php',
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
584 'victors.ffn' );
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
585
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
586 #>gi|115534244|ref|YP_783826.1| hypothetical protein pCJ01p4 [Campylobacter jejuni]
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
587 download(
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
588 'http://www.phidias.us/victors/downloads/gen_downloads_protein.php',
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
589 'victors.faa' );
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
590
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
591 my %gi;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
592 open my $FAA, '<', 'victors.faa';
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
593 while (<$FAA>) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
594
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
595 #>gi|115534244|ref|YP_783826.1| hypothetical protein pCJ01p4 [Campylobacter jejuni]
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
596 next unless m"^>gi.(\d+).ref.([^|]+). ([^[]+)";
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
597 $gi{$1}{ACC} = $2;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
598 $gi{$1}{DESC} = $3;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
599 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
600
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
601 my $seqs = load_fasta("victors.ffn");
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
602
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
603 for my $s (@$seqs) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
604
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
605 #>gi|115534241:2616-3152 Campylobacter jejuni plasmid pCJ01, complete sequence
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
606 $s->{ID} =~ m/gi.(\d+):(\d+)-(\d+)/;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
607 $s->{ACC} = $gi{$1}{ACC} || "gi|$1:$2-$3";
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
608 $s->{DESC} =~ $gi{$1}{DESC} || 'hypothetical protein';
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
609 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
610
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
611 # print Dumper($seqs); exit;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
612
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
613 return $seqs;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
614 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
615
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
616 #..............................................................................
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
617 sub get_vfdb {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
618 download( 'http://www.mgc.ac.cn/VFs/Down/VFDB_setA_nt.fas.gz',
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
619 'vfdb.fa.gz' );
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
620 system("gzip -f -d -c vfdb.fa.gz > vfdb.fa");
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
621 my $seqs = load_fasta("vfdb.fa");
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
622
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
623 # >VFG000676(gb|AAD32411) (lef) anthrax toxin lethal factor precursor [Anthrax toxin (VF0142)] [Bacillus anthracis str. Sterne]
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
624 for my $s (@$seqs) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
625
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
626 # https://github.com/tseemann/abricate/issues/64#issuecomment-421895159 by @VGalata
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
627 $s->{ID} =~ m/^(\w+)\(\w+\|(\w+)(\.\d+)?\)$/; #
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
628 #$s->{ID} =~ m/^(\w+)\(\w+\|(\w+)\)$/;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
629 $s->{ACC} = $2 if $2;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
630 $s->{DESC} =~ m/^\((.*?)\)/;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
631 $s->{ID} = $1 if $1;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
632
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
633 # print STDERR Dumper($s); exit;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
634 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
635
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
636 return $seqs;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
637 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
638
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
639 #..............................................................................
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
640 sub get_ncbibetalactamase {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
641 my $fasta = "ncbi.fa";
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
642 download(
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
643 'ftp://ftp.ncbi.nlm.nih.gov/pathogen/betalactamases/Allele-dna.fa',
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
644 $fasta );
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
645 my $tab = "ncbi.tab";
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
646 download( 'ftp://ftp.ncbi.nlm.nih.gov/pathogen/betalactamases/Allele.tab',
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
647 $tab );
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
648
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
649 # >ACD12694.1 EU650653.1:1-1173
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
650 my $seqs = load_fasta($fasta);
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
651
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
652 # ACC-1 ACD12694.1 EU650653.1 blaACC-1 1 1173 + cephalosporin-hydrolyzing class C beta-lactamase ACC-1
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
653 my %anno;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
654 my @anno = grep { !m/^#/ } path($tab)->lines( { chomp => 1 } );
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
655 msg( "Read", 0 + @anno, "annotations" );
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
656 foreach (@anno) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
657 my ( $name, $id, $acc, $gene, $begin, $end, undef, $product ) =
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
658 split m/\t/;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
659 $anno{$id} = {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
660 ID => $gene,
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
661 DESC => $product,
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
662 ACC => "$acc:$begin-$end",
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
663 };
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
664 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
665
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
666 # print Dumper(\%anno);
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
667
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
668 for my $s (@$seqs) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
669 my $id = $s->{ID};
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
670 next unless exists $anno{$id};
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
671 $s->{ID} = $anno{$id}{ID};
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
672 $s->{ACC} = $anno{$id}{ACC};
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
673 $s->{DESC} = $anno{$id}{DESC};
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
674 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
675
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
676 # print Dumper($seqs);
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
677
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
678 return $seqs;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
679 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
680
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
681 #..............................................................................
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
682 sub get_ecoh {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
683 my $fasta = "EcOH.fa";
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
684 download(
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
685 'https://raw.githubusercontent.com/katholt/srst2/master/data/EcOH.fasta',
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
686 $fasta
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
687 );
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
688
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
689 # https://github.com/katholt/srst2#generating-srst2-compatible-clustered-database-from-raw-sequences
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
690 # [clusterID]__[gene]__[allele]__[seqID] [other stuff]
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
691 # >1__fliC__fliC-H1__1 AB028471.1;flagellin;H1
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
692 # >8__wzx__wzx-O41__246 AB811617.1;O antigen flippase;O41
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
693 # >9__wzy__wzy-OgN31__597 LC125932.1;O antigen polyermase;OgN31
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
694 my $seqs = load_fasta($fasta);
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
695
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
696 for my $s (@$seqs) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
697 my @id = split m/__/, $s->{ID};
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
698 my @desc = split m';', $s->{DESC};
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
699 $s->{ID} = $id[2];
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
700 $s->{ACC} = shift(@desc);
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
701 $s->{DESC} = join( ' ', @desc );
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
702 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
703
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
704 # print Dumper($seqs);
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
705 return $seqs;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
706 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
707
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
708 #..............................................................................
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
709 sub get_ecoli_vf {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
710 my $fasta = "ecoli_vf.ffn";
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
711 download(
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
712 'https://github.com/phac-nml/ecoli_vf/raw/master/data/repaired_ecoli_vfs_shortnames.ffn',
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
713 $fasta
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
714 );
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
715 my $seqs = load_fasta($fasta);
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
716
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
717 # >VFG000748(gi:2865308) (espF) EspF [EspF (VF0182)] [Escherichia coli O127:H6 str. E2348/69]
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
718 # >VFG000749(gi:6009379) (bfpA) Bundlin [BFP (VF0174)] [Escherichia coli B171]
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
719 # >SPG000142 (cvac) Escherichia coli cvi cvaC operon. [X57525 434-745]
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
720 # >SPG000143 (iss2) Escherichia coli Iss (iss) gene, complete cds. [AF042279 292-600]
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
721
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
722 for my $s (@$seqs) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
723
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
724 #print STDERR Dumper("IN", $s);
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
725 $s->{ID} =~ m/ ^ (\w+) (?: \( (.*?) \) )? $ /x
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
726 or die "Can't parse $fasta at " . Dumper($s);
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
727 $s->{ID} = $1 if $1;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
728 $s->{ACC} = $2 || $1;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
729 $s->{DESC} =~ s/\s\[.*?\]$//g; # remove strain name
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
730 $s->{DESC} =~ m/^(?:\((.*?)\)\s+)?(.*?)$/;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
731 $s->{ID} = $1 if $1;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
732 $s->{DESC} = $2;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
733
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
734 #print STDERR Dumper("OUT", $s);
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
735 #print STDERR "="x60, "\n";
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
736 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
737
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
738 # print Dumper($seqs);
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
739 return $seqs;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
740 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
741
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
742 #..............................................................................
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
743 sub is_full_gene {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
744 my ($s) = @_;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
745 my $has_ambig = 0;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
746
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
747 my $id = $s->{ID};
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
748 my $L = length( $s->{SEQ} );
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
749 if ( $L % 3 != 0 ) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
750 wrn("$id - length $L bp is not multiple of 3");
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
751 return;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
752 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
753 if ( $s->{SEQ} !~ m/^[AGCT]+$/ ) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
754 wrn("$id - has non-AGTC bases");
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
755 return;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
756 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
757
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
758 my $seq = Bio::Seq->new( -id => $s->{ID}, -seq => $s->{SEQ} );
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
759
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
760 my $aa = $seq->translate->seq;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
761
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
762 if ( $aa =~ m/\*./ ) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
763 wrn("$id - has internal stop codons, trying revcom");
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
764 $aa = $seq->revcom->translate->seq;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
765 if ( $aa =~ m/\*./ ) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
766 wrn("$id - revcom has internal stop codons too");
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
767 return;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
768 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
769 else {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
770 msg("$id - revcom resolves problem, hooray!");
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
771 $s->{SEQ} = $seq->revcom->seq;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
772 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
773 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
774
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
775 return $L;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
776 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
777
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
778 #..............................................................................
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
779 sub dedupe_seq {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
780 my ($seq) = @_;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
781 my %seen;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
782 my $good = [];
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
783 for my $s (@$seq) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
784 if ( $seen{ $s->{SEQ} } ) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
785 wrn( "duplicate", length( $s->{SEQ} ),
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
786 "bp sequence:", $s->{ID}, '~', $seen{ $s->{SEQ} } );
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
787 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
788 else {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
789 push @$good, $s;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
790 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
791 $seen{ $s->{SEQ} } .= ' ' . $s->{ID};
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
792 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
793 msg( "dedupe_seq: read", scalar(@$seq), "/ kept", scalar(@$good) );
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
794 return $good;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
795 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
796
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
797 #..............................................................................
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
798 sub load_tabular {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
799 my ( $fname, $keycol, $sep ) = @_;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
800 $keycol //= 0;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
801 $sep //= "\t";
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
802 my $hash = {};
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
803 my @hdr;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
804 my $row = 0;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
805 open my $TSV, '<', $fname or err("Can't read TSV file: $fname");
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
806 while (<$TSV>) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
807 chomp;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
808 my @col = split m/$sep/;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
809 $row++;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
810 if (@hdr) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
811 @hdr == @col or err("Header and row $row differ in column count");
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
812
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
813 #my $key = $col[$keycol] or wrn("Empty key column $keycol: $_");
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
814 #exists{$hash->{$col[$key}} and wrn("WARNING: dupe key $key at row: $_");
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
815 my $key = $col[$keycol];
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
816 $hash->{$key} ||=
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
817 { map { ( $hdr[$_] => $col[$_] ) } ( 0 .. $#hdr ) };
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
818 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
819 else {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
820 @hdr = @col;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
821 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
822 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
823 close $TSV;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
824 return $hash;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
825 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
826
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
827 #..............................................................................
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
828 sub load_fasta {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
829 my ($fasta) = @_;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
830 my %seen;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
831 my $list;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
832 my $dbtype = 'unknown';
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
833 msg("load_fasta: $fasta");
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
834 my $in = Bio::SeqIO->new( -file => $fasta, -format => 'fasta' );
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
835 while ( my $seq = $in->next_seq ) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
836 my $id = $seq->id or err("Empty ID in $fasta");
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
837 if ( $seen{$id} ) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
838 wrn("Duplicate ID '$id' in $fasta");
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
839 $id = $id . '_dupe';
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
840 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
841 $seen{$id}++;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
842 my $s = uc( $seq->seq );
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
843 $dbtype = $seq->alphabet eq 'dna' ? 'nucl' : 'prot';
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
844 $dbtype eq 'nucl' ? $s =~ s/[^AGTC]/N/g : $s =~ s/[^A-Z]/X/g;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
845 push @$list,
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
846 {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
847 ID => $id,
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
848 ACC => '',
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
849 DESC => $seq->desc,
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
850 SEQ => $s,
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
851 TYPE => $dbtype,
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
852 };
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
853 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
854 msg( "load_fasta: read", scalar(@$list), "$dbtype sequences" );
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
855 return $list;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
856 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
857
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
858 #..............................................................................
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
859 sub save_fasta {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
860 my ( $fasta, $seq ) = @_;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
861 msg("save_fasta: $fasta");
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
862 my %seen;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
863 my $out = Bio::SeqIO->new( -file => ">$fasta", -format => 'fasta' );
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
864 for my $s (@$seq) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
865 $seen{ $s->{ID} }++;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
866 my $freq = $seen{ $s->{ID} };
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
867
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
868 #wrn("seen $s->{ID} now $freq times") if $freq > 1;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
869 # print Dumper($s);
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
870 my $ABX =
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
871 defined( $s->{ABX} ) ? join( $ABX_SEP, sort @{ $s->{ABX} } ) : '';
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
872 $ABX =~ s/\s+/_/g; # remove spaces!
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
873 my $obj = Bio::Seq->new(
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
874 -id => join( '~~~', $db, $s->{ID}, $s->{ACC}, $ABX ),
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
875 -desc => ( $s->{DESC} || $s->{ID} ),
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
876 -seq => $s->{SEQ},
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
877 );
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
878
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
879 # $obj->desc( hash_encode($s) );
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
880 $out->write_seq($obj);
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
881
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
882 # $seen{ $s->{ID} }++;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
883 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
884 msg( "save_fasta: wrote", scalar(@$seq), "sequences" );
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
885 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
886
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
887 #----------------------------------------------------------------------
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
888 sub msg {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
889 print STDERR "@_\n";
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
890 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
891
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
892 #----------------------------------------------------------------------
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
893 sub wrn {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
894 msg( "WARNING:", @_ ) if $debug;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
895 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
896
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
897 #----------------------------------------------------------------------
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
898 sub err {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
899 msg( "ERROR:", @_ );
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
900 exit(1);
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
901 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
902
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
903 #----------------------------------------------------------------------
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
904 # Option setting routines
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
905
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
906 sub setOptions {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
907 use Getopt::Long;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
908
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
909 @Options = (
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
910 { OPT => "help", VAR => \&usage, DESC => "This help" },
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
911 {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
912 OPT => "debug!",
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
913 VAR => \$debug,
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
914 DEFAULT => 0,
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
915 DESC => "Verbose debug output"
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
916 },
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
917 {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
918 OPT => "dbdir=s",
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
919 VAR => \$outdir,
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
920 DEFAULT => abs_path("$FindBin::RealBin/../db"),
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
921 DESC => "Parent folder"
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
922 },
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
923 {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
924 OPT => "db=s",
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
925 VAR => \$db,
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
926 DEFAULT => "",
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
927 DESC => "Choices: $DATABASES"
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
928 },
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
929 {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
930 OPT => "force!",
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
931 VAR => \$force,
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
932 DEFAULT => 0,
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
933 DESC => "Force download even if exists"
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
934 },
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
935 );
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
936
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
937 &GetOptions( map { $_->{OPT}, $_->{VAR} } @Options ) || usage(1);
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
938
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
939 # Now setup default values.
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
940 foreach (@Options) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
941 if ( defined( $_->{DEFAULT} ) && !defined( ${ $_->{VAR} } ) ) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
942 ${ $_->{VAR} } = $_->{DEFAULT};
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
943 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
944 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
945 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
946
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
947 sub usage {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
948 my ($exitcode) = @_;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
949 $exitcode = 0 if $exitcode eq 'help'; # what gets passed by getopt func ref
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
950 $exitcode ||= 0;
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
951 select STDERR if $exitcode; # write to STDERR if exitcode is error
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
952
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
953 print "SYNOPIS\n Download databases for abricate to use\n";
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
954 print "USAGE\n $EXE [options] --db DATABASE\n";
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
955 print "OPTIONS\n";
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
956 foreach (@Options) {
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
957 printf " --%-13s %s%s.\n", $_->{OPT}, $_->{DESC},
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
958 defined( $_->{DEFAULT} ) ? " (default '$_->{DEFAULT}')" : "";
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
959 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
960 exit($exitcode);
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
961 }
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
962
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
963 #----------------------------------------------------------------------
801b85b03a17 planemo upload
galaxytrakr
parents:
diff changeset
964