miga-base 0.2.1.0 → 0.2.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/actions/tax_distributions.rb +100 -0
- data/bin/miga +1 -0
- data/lib/miga/_data/aai-intax.tsv.gz +0 -0
- data/lib/miga/_data/aai-novel.tsv.gz +0 -0
- data/lib/miga/tax_dist.rb +65 -0
- data/lib/miga/tax_index.rb +26 -0
- data/lib/miga/taxonomy.rb +7 -0
- data/lib/miga/version.rb +1 -1
- data/utils/plot-taxdist.R +110 -0
- metadata +50 -45
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5a495f0a540632069724a9f30b87495532c74aa5
|
4
|
+
data.tar.gz: 21e81ff7c152fbc6ef89e781b25aef2852190622
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7f0f38d7981e0f872af676b4e65341baa032a00b7dd491337b1c01bf72c1c4a9702b5808ce2eb19486d1c139658e303c1d39b9422f0ae6301e4af9dc4be5ce33
|
7
|
+
data.tar.gz: 8b731945f0dc75f9f29c6dc92f943ad069e42038c6aec6fe64885832ce3ceeb1dad824b5d594ca03d25febb5d5f70599f7049ce2739c2892e8c2a0d330c955f9
|
@@ -0,0 +1,100 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# @package MiGA
|
4
|
+
# @license Artistic-2.0
|
5
|
+
|
6
|
+
require "miga/tax_index"
|
7
|
+
require "zlib"
|
8
|
+
require "tmpdir"
|
9
|
+
|
10
|
+
o = {q:true, format: :json}
|
11
|
+
OptionParser.new do |opt|
|
12
|
+
opt_banner(opt)
|
13
|
+
opt_object(opt, o, [:project])
|
14
|
+
opt_filter_datasets(opt, o)
|
15
|
+
opt.on("-i", "--index FILE",
|
16
|
+
"Pre-calculated tax-index (in tabular format) to be used.",
|
17
|
+
"If passed, dataset filtering arguments are ignored."
|
18
|
+
){ |v| o[:index]=v }
|
19
|
+
opt_common(opt, o)
|
20
|
+
end.parse!
|
21
|
+
|
22
|
+
##=> Functions <=
|
23
|
+
# Returns the _cannonical_ ID between strings +a+ and +b+.
|
24
|
+
def cannid(a, b) ; [a, b].sort.join("-") ; end
|
25
|
+
|
26
|
+
##=> Main <=
|
27
|
+
opt_require(o, project:"-P")
|
28
|
+
|
29
|
+
$stderr.puts "Loading project." unless o[:q]
|
30
|
+
p = MiGA::Project.load(o[:project])
|
31
|
+
raise "Impossible to load project: #{o[:project]}" if p.nil?
|
32
|
+
|
33
|
+
metric = p.is_clade? ? "ani" : "aai"
|
34
|
+
res_n = "#{metric}_distances"
|
35
|
+
$stderr.puts "Reading distances (1-#{metric.upcase})." unless o[:q]
|
36
|
+
res = p.result res_n
|
37
|
+
raise "#{res_n} not yet calculated." if res.nil?
|
38
|
+
matrix = res.file_path(:matrix)
|
39
|
+
raise "#{res_n} has no matrix." if matrix.nil?
|
40
|
+
dist = {}
|
41
|
+
fh = matrix=~/\.gz$/ ? Zlib::GzipReader.open(matrix) : File.open(matrix,"r")
|
42
|
+
fh.each_line do |ln|
|
43
|
+
next if fh.lineno==1
|
44
|
+
row = ln.chomp.split(/\t/)
|
45
|
+
dist[cannid(row[1], row[2])] = [row[3], 0, ["root:biota"]]
|
46
|
+
end
|
47
|
+
fh.close
|
48
|
+
|
49
|
+
Dir.mktmpdir do |dir|
|
50
|
+
if o[:index].nil?
|
51
|
+
$stderr.puts "Loading datasets." unless o[:q]
|
52
|
+
ds = p.datasets
|
53
|
+
ds.select!{ |d| not d.metadata[:tax].nil? }
|
54
|
+
ds = filter_datasets!(ds, o)
|
55
|
+
|
56
|
+
$stderr.puts "Indexing taxonomy." unless o[:q]
|
57
|
+
tax_index = MiGA::TaxIndex.new
|
58
|
+
ds.each { |d| tax_index << d }
|
59
|
+
tab = File.expand_path("index.tab", dir)
|
60
|
+
File.open(tab, "w") { |fh| fh.print tax_index.to_tab }
|
61
|
+
else
|
62
|
+
tab = o[:index]
|
63
|
+
end
|
64
|
+
|
65
|
+
$stderr.puts "Traversing taxonomy." unless o[:q]
|
66
|
+
rank_i = 0
|
67
|
+
MiGA::Taxonomy.KNOWN_RANKS.each do |rank|
|
68
|
+
$stderr.print "o #{rank}: " unless o[:q]
|
69
|
+
rank_n = 0
|
70
|
+
rank_i += 1
|
71
|
+
in_rank = nil
|
72
|
+
ds_name = []
|
73
|
+
File.open(tab, "r") do |fh|
|
74
|
+
fh.each_line do |ln|
|
75
|
+
if ln =~ /^ {#{(rank_i-1)*2}}\S+:\S+:/
|
76
|
+
in_rank = nil
|
77
|
+
ds_name = []
|
78
|
+
elsif ln =~ /^ {#{rank_i*2}}(#{rank}:(\S+)):/
|
79
|
+
in_rank = $2=="?" ? nil : $1
|
80
|
+
ds_name = []
|
81
|
+
elsif ln =~ /^ *# (\S+)/ and not in_rank.nil?
|
82
|
+
ds_i = $1
|
83
|
+
ds_name << ds_i
|
84
|
+
ds_name.each do |ds_j|
|
85
|
+
k = cannid(ds_i, ds_j)
|
86
|
+
next if dist[k].nil?
|
87
|
+
rank_n += 1
|
88
|
+
dist[k][1] = rank_i
|
89
|
+
dist[k][2].unshift in_rank
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
$stderr.puts "#{rank_n} pairs of datasets." unless o[:q]
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
dist.keys.each do |k|
|
99
|
+
puts (k.split("-") + dist[k].flatten).join("\t")
|
100
|
+
end
|
data/bin/miga
CHANGED
@@ -26,6 +26,7 @@ $task_desc = {
|
|
26
26
|
list_files: "Lists all registered files from the results of a dataset or a "+
|
27
27
|
"project.",
|
28
28
|
project_info: "Displays information about a MiGA project.",
|
29
|
+
tax_distributions: "Estimates distributions of distance by taxonomy.",
|
29
30
|
unlink_dataset: "Removes a dataset from an MiGA project."
|
30
31
|
}
|
31
32
|
|
Binary file
|
Binary file
|
@@ -0,0 +1,65 @@
|
|
1
|
+
# @package MiGA
|
2
|
+
# @license Artistic-2.0
|
3
|
+
|
4
|
+
require "miga/common"
|
5
|
+
require "miga/taxonomy"
|
6
|
+
require "zlib"
|
7
|
+
|
8
|
+
##
|
9
|
+
# Methods for taxonomy identification based on AAI/ANI values.
|
10
|
+
module MiGA::TaxDist
|
11
|
+
|
12
|
+
##
|
13
|
+
# Absolute path to the :intax or :novel data file (determined by +test+) for
|
14
|
+
# AAI.
|
15
|
+
def self.aai_path(test)
|
16
|
+
test = test.downcase.to_sym
|
17
|
+
return nil unless [:intax, :novel].include? test
|
18
|
+
File.expand_path("../_data/aai-#{test}.tsv.gz", __FILE__)
|
19
|
+
end
|
20
|
+
|
21
|
+
# Returns a Hash, where the keys correspond to the taxonomic level
|
22
|
+
# (see MiGA::Taxonomy.LONG_RANKS for the meanings), and the values correspond
|
23
|
+
# to the p-values of being :intax or :novel, as determined by +test+.
|
24
|
+
def self.aai_pvalues(aai, test)
|
25
|
+
Zlib::GzipReader.open(aai_path(test)) do |fh|
|
26
|
+
keys = nil
|
27
|
+
fh.each_line do |ln|
|
28
|
+
row = ln.chomp.split /\t/
|
29
|
+
if fh.lineno==1
|
30
|
+
keys = row[1, row.size-1].map{ |i| i.to_i }
|
31
|
+
elsif row.shift.to_f >= aai
|
32
|
+
vals = {}
|
33
|
+
keys.each do |i|
|
34
|
+
v = row.shift
|
35
|
+
next if v=="NA"
|
36
|
+
vals[MiGA::Taxonomy.KNOWN_RANKS[i]] = v.to_f
|
37
|
+
end
|
38
|
+
return vals
|
39
|
+
end
|
40
|
+
end # each_line ln
|
41
|
+
end # open fh
|
42
|
+
{}
|
43
|
+
end
|
44
|
+
|
45
|
+
# Determines the degree to which a Float +aai+ value indicates similar
|
46
|
+
# taxonomy (with +test+ :intax) or a novel taxon (with +test+ :novel). Returns
|
47
|
+
# a Hash with "likelihood" phrases as keys and values as an array with
|
48
|
+
# cannonical rank (as in MiGA::Taxonomy) and estimated p-value.
|
49
|
+
def self.aai_taxtest(aai, test)
|
50
|
+
meaning = {most_likely:[0,0.01],probably:[0.01,0.1],possibly_even:[0.1,0.5]}
|
51
|
+
pv = aai_pvalues(aai, test)
|
52
|
+
out = {}
|
53
|
+
meaning.each do |phrase, thresholds|
|
54
|
+
lwr, upr = thresholds
|
55
|
+
min = pv.values.select{ |v| v >= lwr }.min
|
56
|
+
return out if min.nil?
|
57
|
+
if min < upr
|
58
|
+
v = pv.select{ |_,v| v==min }
|
59
|
+
out[phrase] = (test==:intax ? v.reverse_each : v).first
|
60
|
+
end
|
61
|
+
end
|
62
|
+
out
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
data/lib/miga/tax_index.rb
CHANGED
@@ -34,6 +34,26 @@ class MiGA::TaxIndex < MiGA::MiGA
|
|
34
34
|
@datasets << dataset
|
35
35
|
end
|
36
36
|
|
37
|
+
##
|
38
|
+
# Finds all the taxa in the collection at the +rank+ taxonomic rank.
|
39
|
+
def taxa_by_rank(rank)
|
40
|
+
rank = MiGA::Taxonomy.normalize_rank(rank)
|
41
|
+
taxa = [@root]
|
42
|
+
select = []
|
43
|
+
loop do
|
44
|
+
new_taxa = []
|
45
|
+
taxa.map{ |tx| tx.children }.flatten.each do |ch|
|
46
|
+
if ch.rank == rank
|
47
|
+
select << ch
|
48
|
+
elsif not ch.children.empty?
|
49
|
+
new_taxa << ch
|
50
|
+
end
|
51
|
+
end
|
52
|
+
break if new_taxa.empty?
|
53
|
+
end
|
54
|
+
select
|
55
|
+
end
|
56
|
+
|
37
57
|
##
|
38
58
|
# Generate JSON String for the index.
|
39
59
|
def to_json
|
@@ -98,6 +118,12 @@ class MiGA::TaxIndexTaxon < MiGA::MiGA
|
|
98
118
|
datasets.size + children.map{ |it| it.datasets_count }.reduce(0, :+)
|
99
119
|
end
|
100
120
|
|
121
|
+
##
|
122
|
+
# Get all the datasets in the taxon (including children).
|
123
|
+
def all_datasets
|
124
|
+
datasets + children.map{ |it| it.datasets }.reduce([], :+)
|
125
|
+
end
|
126
|
+
|
101
127
|
##
|
102
128
|
# JSON String of the taxon.
|
103
129
|
def to_json(*a)
|
data/lib/miga/taxonomy.rb
CHANGED
@@ -11,6 +11,13 @@ class MiGA::Taxonomy < MiGA::MiGA
|
|
11
11
|
def self.KNOWN_RANKS() @@KNOWN_RANKS ; end
|
12
12
|
@@KNOWN_RANKS = %w{ns d k p c o f g s ssp str ds}.map{|r| r.to_sym}
|
13
13
|
|
14
|
+
##
|
15
|
+
# Long names of the cannonical ranks.
|
16
|
+
def self.LONG_RANKS() @@LONG_RANKS ; end
|
17
|
+
@@LONG_RANKS = {root: "root", ns: "namespace", d: "domain", k: "kingdom",
|
18
|
+
p: "phylum", c: "class", o: "order", f: "family", g: "genus", s: "species",
|
19
|
+
ssp: "subspecies", str: "strain", ds: "dataset"}
|
20
|
+
|
14
21
|
##
|
15
22
|
# Synonms for cannonical ranks.
|
16
23
|
@@RANK_SYNONYMS = {
|
data/lib/miga/version.rb
CHANGED
@@ -10,7 +10,7 @@ module MiGA
|
|
10
10
|
# - Float representing the major.minor version.
|
11
11
|
# - Integer representing gem releases of the current version.
|
12
12
|
# - Integer representing minor changes that require new version number.
|
13
|
-
VERSION = [0.2, 1,
|
13
|
+
VERSION = [0.2, 1, 2]
|
14
14
|
|
15
15
|
##
|
16
16
|
# Nickname for the current major.minor version.
|
@@ -0,0 +1,110 @@
|
|
1
|
+
#!/usr/bin/env Rscript
|
2
|
+
|
3
|
+
# @package MiGA
|
4
|
+
# @license Artistic-2.0
|
5
|
+
|
6
|
+
##
|
7
|
+
# To update the AAI data files, use:
|
8
|
+
#
|
9
|
+
# ```bash
|
10
|
+
# miga tax_distributions -P /Path/To/RefSeq --ref | cut -f 1-5 \
|
11
|
+
# > aai-tax-index.tsv
|
12
|
+
# ```
|
13
|
+
#
|
14
|
+
# Next, in R:
|
15
|
+
#
|
16
|
+
# ```R
|
17
|
+
# source("utils/plot-taxdist.R")
|
18
|
+
# p.val <- plot.miga.taxdist("aai-tax-index.tsv",
|
19
|
+
# exclude=c("g:Mycoplasma", "ssp:Prochlorococcus_marinus_subsp__marinus",
|
20
|
+
# "f:Rhizobiaceae", "s:Buchnera_aphidicola", "s:Prochlorococcus_marinus"))
|
21
|
+
# write.table(p.val[[1]], file="lib/miga/_data/aai-intax.tsv",
|
22
|
+
# sep="\t", row.names=TRUE, col.names=NA, quote=FALSE)
|
23
|
+
# write.table(p.val[[2]], file="lib/miga/_data/aai-novel.tsv",
|
24
|
+
# sep="\t", row.names=TRUE, col.names=NA, quote=FALSE)
|
25
|
+
# ```
|
26
|
+
#
|
27
|
+
# And finally, back in bash:
|
28
|
+
#
|
29
|
+
# ```bash
|
30
|
+
# gzip lib/miga/_data/aai-intax.tsv
|
31
|
+
# gzip lib/miga/_data/aai-novel.tsv
|
32
|
+
# rm aai-tax-index.tsv
|
33
|
+
# ```
|
34
|
+
#
|
35
|
+
|
36
|
+
#= Load stuff
|
37
|
+
#argv <- commandArgs(trailingOnly=T)
|
38
|
+
|
39
|
+
#= Functions
|
40
|
+
plot.miga.taxdist <- function(file, exclude=c()){
|
41
|
+
pdf(paste(file, ".pdf", sep=""), 6, 7)
|
42
|
+
layout(1:3, heights=c(2,1,1.5))
|
43
|
+
d <- read.table(file, sep="\t", header=FALSE,
|
44
|
+
col.names=c("a","b","aai","rank","taxon"), as.is=TRUE)
|
45
|
+
a <- d[!(d$taxon %in% exclude),]
|
46
|
+
col <- rainbow(max(a$rank)+1, s=3/4, v=3/4, alpha=1/3)
|
47
|
+
col2 <- rainbow(max(a$rank)+1, s=3/4, v=3/4)
|
48
|
+
|
49
|
+
cat("o Plot pairs.\n")
|
50
|
+
par(mar=c(0,4,1,1)+0.1)
|
51
|
+
plot(d$aai, d$rank+runif(nrow(d), -0.3, 0.3), cex=1/2, pch=16, las=1, bty="l",
|
52
|
+
col=ifelse(d$taxon %in% exclude, rgb(.8,.8,.8,1/4), col[d$rank+1]),
|
53
|
+
xlab="", ylab="Lowest common taxon", xaxt="n", ylim=rev(range(a$rank)))
|
54
|
+
for(i in c(0.1, 0.05, 0.01)){
|
55
|
+
min_q <- tapply(a$aai, a$rank, quantile, probs=i)
|
56
|
+
max_q <- tapply(a$aai, a$rank, quantile, probs=1-i)
|
57
|
+
arrows(x0=min_q, length=0, col=grey(1+log10(i)/2),
|
58
|
+
y0=as.numeric(names(min_q))-0.45, y1=as.numeric(names(min_q))+0.45)
|
59
|
+
arrows(x0=max_q, length=0, col=grey(1+log10(i)/2),
|
60
|
+
y0=as.numeric(names(max_q))-0.45, y1=as.numeric(names(max_q))+0.45)
|
61
|
+
}
|
62
|
+
|
63
|
+
cat("o Plot taxa.\n")
|
64
|
+
par(mar=c(0,4,0,1)+0.1)
|
65
|
+
plot(1, type="n", xlim=range(a$aai), ylim=rev(range(a$rank)),
|
66
|
+
xlab="", ylab="Lowest common taxon", xaxt="n", las=1, bty="l")
|
67
|
+
for(i in unique(a$rank)){
|
68
|
+
t.aai <- tapply(d$aai[d$rank==i], d$taxon[d$rank==i], mean)
|
69
|
+
t.size <- tapply(d$aai[d$rank==i], d$taxon[d$rank==i], length)
|
70
|
+
points(t.aai, i+runif(length(t.aai), -0.15, 0.15), pch=16,
|
71
|
+
cex=2*log2(1+t.size)/log2(1+max(t.size)),
|
72
|
+
col=ifelse(names(t.aai) %in% exclude, rgb(.8,.8,.8,1/4), col[i+1]))
|
73
|
+
}
|
74
|
+
|
75
|
+
cat("o Plot p-values.\n")
|
76
|
+
par(mar=c(4,4,0,1)+0.1)
|
77
|
+
plot(1, type="n", xlim=range(a$aai), ylim=c(0,0.5),
|
78
|
+
xlab="AAI (%)", ylab="P-value (--- intax; - - novel)", las=1, bty="l")
|
79
|
+
x <- seq(30, 100, 0.1)
|
80
|
+
intax <- data.frame(row.names=x)
|
81
|
+
novel <- data.frame(row.names=x)
|
82
|
+
for(i in sort(unique(a$rank))){
|
83
|
+
if(i==12) next
|
84
|
+
k <- as.character(i)
|
85
|
+
intax[,k] <- miga.taxprob.intax(x, i, a)
|
86
|
+
novel[,k] <- miga.taxprob.novel(x, i, a)
|
87
|
+
lines(x, intax[,k], col=col2[i+1], lwd=2)
|
88
|
+
lines(x, novel[,k], col=col2[i+1], lwd=2, lty=2)
|
89
|
+
}
|
90
|
+
dev.off()
|
91
|
+
return(list(intax, novel))
|
92
|
+
}
|
93
|
+
|
94
|
+
miga.taxprob.novel <- function(max.aai, rank, data){
|
95
|
+
o <- c()
|
96
|
+
for(i in max.aai){
|
97
|
+
a <- sum(data$rank >= rank & data$aai <= i)/sum(data$aai <= i)
|
98
|
+
o <- c(o, a)
|
99
|
+
}
|
100
|
+
return(o*sum(data$rank < 12)/sum(data$rank >= rank))
|
101
|
+
}
|
102
|
+
|
103
|
+
miga.taxprob.intax <- function(max.aai, rank, data){
|
104
|
+
o <- c()
|
105
|
+
for(i in max.aai){
|
106
|
+
a <- sum(data$rank < rank & data$aai >= i)/sum(data$aai >= i)
|
107
|
+
o <- c(o, a)
|
108
|
+
}
|
109
|
+
return(o*sum(data$rank < 12)/sum(data$rank < rank))
|
110
|
+
}
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: miga-base
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.1.
|
4
|
+
version: 0.2.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Luis M. Rodriguez-R
|
@@ -14,70 +14,70 @@ dependencies:
|
|
14
14
|
name: rest-client
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ~>
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.7'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ~>
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.7'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: daemons
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ~>
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '1.2'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ~>
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '1.2'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: json
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ~>
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '1.8'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ~>
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '1.8'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rake
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ~>
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '11'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ~>
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '11'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: test-unit
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - ~>
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '3'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - ~>
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '3'
|
83
83
|
description: Microbial Genomes Atlas
|
@@ -88,26 +88,6 @@ extensions: []
|
|
88
88
|
extra_rdoc_files:
|
89
89
|
- README.md
|
90
90
|
files:
|
91
|
-
- Gemfile
|
92
|
-
- LICENSE
|
93
|
-
- README.md
|
94
|
-
- Rakefile
|
95
|
-
- actions/add_result.rb
|
96
|
-
- actions/add_taxonomy.rb
|
97
|
-
- actions/create_dataset.rb
|
98
|
-
- actions/create_project.rb
|
99
|
-
- actions/daemon.rb
|
100
|
-
- actions/date.rb
|
101
|
-
- actions/download_dataset.rb
|
102
|
-
- actions/find_datasets.rb
|
103
|
-
- actions/import_datasets.rb
|
104
|
-
- actions/index_taxonomy.rb
|
105
|
-
- actions/list_datasets.rb
|
106
|
-
- actions/list_files.rb
|
107
|
-
- actions/project_info.rb
|
108
|
-
- actions/unlink_dataset.rb
|
109
|
-
- bin/miga
|
110
|
-
- lib/miga.rb
|
111
91
|
- lib/miga/common.rb
|
112
92
|
- lib/miga/daemon.rb
|
113
93
|
- lib/miga/dataset.rb
|
@@ -116,9 +96,22 @@ files:
|
|
116
96
|
- lib/miga/project.rb
|
117
97
|
- lib/miga/remote_dataset.rb
|
118
98
|
- lib/miga/result.rb
|
99
|
+
- lib/miga/tax_dist.rb
|
119
100
|
- lib/miga/tax_index.rb
|
120
101
|
- lib/miga/taxonomy.rb
|
121
102
|
- lib/miga/version.rb
|
103
|
+
- lib/miga.rb
|
104
|
+
- test/common_test.rb
|
105
|
+
- test/daemon_test.rb
|
106
|
+
- test/dataset_test.rb
|
107
|
+
- test/metadata_test.rb
|
108
|
+
- test/project_test.rb
|
109
|
+
- test/remote_dataset_test.rb
|
110
|
+
- test/tax_index_test.rb
|
111
|
+
- test/taxonomy_test.rb
|
112
|
+
- test/test_helper.rb
|
113
|
+
- lib/miga/_data/aai-intax.tsv.gz
|
114
|
+
- lib/miga/_data/aai-novel.tsv.gz
|
122
115
|
- scripts/_distances_functions.bash
|
123
116
|
- scripts/_distances_noref_nomulti.bash
|
124
117
|
- scripts/_distances_ref_nomulti.bash
|
@@ -140,21 +133,33 @@ files:
|
|
140
133
|
- scripts/subclades.bash
|
141
134
|
- scripts/trimmed_fasta.bash
|
142
135
|
- scripts/trimmed_reads.bash
|
143
|
-
- test/common_test.rb
|
144
|
-
- test/daemon_test.rb
|
145
|
-
- test/dataset_test.rb
|
146
|
-
- test/metadata_test.rb
|
147
|
-
- test/project_test.rb
|
148
|
-
- test/remote_dataset_test.rb
|
149
|
-
- test/tax_index_test.rb
|
150
|
-
- test/taxonomy_test.rb
|
151
|
-
- test/test_helper.rb
|
152
136
|
- utils/adapters.fa
|
153
137
|
- utils/mytaxa_scan.R
|
154
138
|
- utils/mytaxa_scan.rb
|
139
|
+
- utils/plot-taxdist.R
|
155
140
|
- utils/requirements.txt
|
156
141
|
- utils/subclades-compile.rb
|
157
142
|
- utils/subclades.R
|
143
|
+
- bin/miga
|
144
|
+
- actions/add_result.rb
|
145
|
+
- actions/add_taxonomy.rb
|
146
|
+
- actions/create_dataset.rb
|
147
|
+
- actions/create_project.rb
|
148
|
+
- actions/daemon.rb
|
149
|
+
- actions/date.rb
|
150
|
+
- actions/download_dataset.rb
|
151
|
+
- actions/find_datasets.rb
|
152
|
+
- actions/import_datasets.rb
|
153
|
+
- actions/index_taxonomy.rb
|
154
|
+
- actions/list_datasets.rb
|
155
|
+
- actions/list_files.rb
|
156
|
+
- actions/project_info.rb
|
157
|
+
- actions/tax_distributions.rb
|
158
|
+
- actions/unlink_dataset.rb
|
159
|
+
- Gemfile
|
160
|
+
- Rakefile
|
161
|
+
- README.md
|
162
|
+
- LICENSE
|
158
163
|
homepage: http://enve-omics.ce.gatech.edu/miga
|
159
164
|
licenses:
|
160
165
|
- Artistic-2.0
|
@@ -163,25 +168,25 @@ post_install_message:
|
|
163
168
|
rdoc_options:
|
164
169
|
- lib
|
165
170
|
- README.md
|
166
|
-
-
|
171
|
+
- --main
|
167
172
|
- README.md
|
168
|
-
-
|
173
|
+
- --title
|
169
174
|
- MiGA
|
170
175
|
require_paths:
|
171
176
|
- lib
|
172
177
|
required_ruby_version: !ruby/object:Gem::Requirement
|
173
178
|
requirements:
|
174
|
-
- -
|
179
|
+
- - '>='
|
175
180
|
- !ruby/object:Gem::Version
|
176
181
|
version: '1.9'
|
177
182
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
178
183
|
requirements:
|
179
|
-
- -
|
184
|
+
- - '>='
|
180
185
|
- !ruby/object:Gem::Version
|
181
186
|
version: '0'
|
182
187
|
requirements: []
|
183
188
|
rubyforge_project:
|
184
|
-
rubygems_version: 2.
|
189
|
+
rubygems_version: 2.0.14
|
185
190
|
signing_key:
|
186
191
|
specification_version: 4
|
187
192
|
summary: MiGA
|