miga-base 0.5.10.0 → 0.6.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Rakefile +19 -9
- data/lib/miga/cli/action/run.rb +13 -4
- data/lib/miga/cli/action/stats.rb +1 -145
- data/lib/miga/cli/base.rb +0 -1
- data/lib/miga/common/hooks.rb +49 -0
- data/lib/miga/common/path.rb +0 -9
- data/lib/miga/daemon.rb +1 -2
- data/lib/miga/dataset.rb +7 -0
- data/lib/miga/dataset/hooks.rb +72 -0
- data/lib/miga/dataset/result.rb +35 -25
- data/lib/miga/project.rb +5 -3
- data/lib/miga/project/dataset.rb +3 -1
- data/lib/miga/project/hooks.rb +60 -0
- data/lib/miga/project/result.rb +6 -3
- data/lib/miga/result.rb +17 -11
- data/lib/miga/result/base.rb +6 -0
- data/lib/miga/result/source.rb +46 -0
- data/lib/miga/result/stats.rb +157 -0
- data/lib/miga/version.rb +3 -3
- data/scripts/cds.bash +2 -2
- data/scripts/miga.bash +0 -5
- data/scripts/stats.bash +1 -1
- data/test/hook_test.rb +110 -0
- data/utils/subclades.R +1 -1
- metadata +8 -4
- data/lib/miga/cli/action/plugins.rb +0 -28
- data/lib/miga/project/plugins.rb +0 -41
data/lib/miga/version.rb
CHANGED
@@ -10,15 +10,15 @@ 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.
|
13
|
+
VERSION = [0.6, 0, 0]
|
14
14
|
|
15
15
|
##
|
16
16
|
# Nickname for the current major.minor version.
|
17
|
-
VERSION_NAME = '
|
17
|
+
VERSION_NAME = 'lithograph'
|
18
18
|
|
19
19
|
##
|
20
20
|
# Date of the current gem release.
|
21
|
-
VERSION_DATE = Date.new(2020,
|
21
|
+
VERSION_DATE = Date.new(2020, 3, 7)
|
22
22
|
|
23
23
|
##
|
24
24
|
# Reference of MiGA.
|
data/scripts/cds.bash
CHANGED
@@ -28,7 +28,7 @@ case "$TYPE" in
|
|
28
28
|
P_LEN=0
|
29
29
|
BEST_CT=0
|
30
30
|
echo "# Codon table selection:" > "${DATASET}.ct.t"
|
31
|
-
for ct in 4
|
31
|
+
for ct in 11 4 ; do
|
32
32
|
prodigal -a "${DATASET}.faa.$ct" -d "${DATASET}.fna.$ct" \
|
33
33
|
-o "${DATASET}.gff3.$ct" -f gff -q -p single -g "$ct" \
|
34
34
|
-i "../05.assembly/${DATASET}.LargeContigs.fna"
|
@@ -36,7 +36,7 @@ case "$TYPE" in
|
|
36
36
|
| perl -pe 's/[^A-Z]//ig' | wc -c | awk '{print $1}')
|
37
37
|
echo "# codon table $ct total length: $C_LEN aa" \
|
38
38
|
>> "${DATASET}.ct.t"
|
39
|
-
if [[ $C_LEN > $P_LEN ]] ; then
|
39
|
+
if [[ $C_LEN > $(($P_LEN * 11 / 10)) ]] ; then
|
40
40
|
for x in faa fna gff3 ; do
|
41
41
|
mv "${DATASET}.$x.$ct" "${DATASET}.$x"
|
42
42
|
done
|
data/scripts/miga.bash
CHANGED
@@ -10,11 +10,6 @@ SCRIPT=${SCRIPT:-$(basename "$0" .bash)}
|
|
10
10
|
function exists { [[ -e "$1" ]] ; }
|
11
11
|
function fx_exists { [[ $(type -t "$1") == "function" ]] ; }
|
12
12
|
|
13
|
-
for i in $(miga plugins -P "$PROJECT") ; do
|
14
|
-
# shellcheck source=/dev/null
|
15
|
-
. "$i/scripts-plugin.bash"
|
16
|
-
done
|
17
|
-
|
18
13
|
if [[ "$SCRIPT" != "d" && "$SCRIPT" != "p" ]] ; then
|
19
14
|
echo '############'
|
20
15
|
echo -n "Date: " ; miga date
|
data/scripts/stats.bash
CHANGED
@@ -14,7 +14,7 @@ miga date > "$DATASET.start"
|
|
14
14
|
# Calculate statistics
|
15
15
|
for i in raw_reads trimmed_fasta assembly cds essential_genes ssu distances taxonomy ; do
|
16
16
|
echo "# $i"
|
17
|
-
miga
|
17
|
+
miga stats --compute-and-save -P "$PROJECT" -D "$DATASET" -r $i
|
18
18
|
done
|
19
19
|
|
20
20
|
# Finalize
|
data/test/hook_test.rb
ADDED
@@ -0,0 +1,110 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'miga/project'
|
3
|
+
|
4
|
+
class HookTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
def setup
|
7
|
+
$tmp = Dir.mktmpdir
|
8
|
+
ENV['MIGA_HOME'] = $tmp
|
9
|
+
FileUtils.touch("#{ENV['MIGA_HOME']}/.miga_rc")
|
10
|
+
FileUtils.touch("#{ENV['MIGA_HOME']}/.miga_daemon.json")
|
11
|
+
$p1 = MiGA::Project.new(File.expand_path('project1', $tmp))
|
12
|
+
$d1 = $p1.add_dataset('dataset1')
|
13
|
+
end
|
14
|
+
|
15
|
+
def teardown
|
16
|
+
FileUtils.rm_rf $tmp
|
17
|
+
ENV['MIGA_HOME'] = nil
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_add_hook
|
21
|
+
assert_nil($d1.hooks[:on_save])
|
22
|
+
$d1.add_hook(:on_save, :run_lambda, Proc.new { $counter += 1 })
|
23
|
+
assert_equal(1, $d1.hooks[:on_save].size)
|
24
|
+
$counter = 1
|
25
|
+
$d1.save
|
26
|
+
assert_equal(2, $counter)
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_missing_action
|
30
|
+
$d1.add_hook(:on_save, :this_is_not_an_action)
|
31
|
+
assert_raise do
|
32
|
+
$d1.save
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
class MyHanger
|
37
|
+
include MiGA::Common::Hooks
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_empty_hooks
|
41
|
+
a = MyHanger.new
|
42
|
+
assert_equal({}, a.hooks)
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_dataset_result_hooks
|
46
|
+
$res = :test
|
47
|
+
$counter = 1
|
48
|
+
$d1.add_hook(:on_result_ready,
|
49
|
+
:run_lambda, Proc.new { |r| $res = r })
|
50
|
+
$d1.add_hook(:on_result_ready_trimmed_reads,
|
51
|
+
:run_lambda, Proc.new { $counter += 1 })
|
52
|
+
FileUtils.touch(File.expand_path(
|
53
|
+
"data/02.trimmed_reads/#{$d1.name}.1.clipped.fastq", $p1.path))
|
54
|
+
FileUtils.touch(File.expand_path(
|
55
|
+
"data/02.trimmed_reads/#{$d1.name}.done", $p1.path))
|
56
|
+
assert_equal(:test, $res)
|
57
|
+
$d1.add_result(:trimmed_reads)
|
58
|
+
assert_equal(:trimmed_reads, $res)
|
59
|
+
assert_equal(2, $counter)
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_dataset_clear_run_counts
|
63
|
+
$d1.metadata[:_try_something] = 1
|
64
|
+
$d1.metadata[:_not_a_counter] = 1
|
65
|
+
$d1.save
|
66
|
+
assert_equal(1, $d1.metadata[:_try_something])
|
67
|
+
$d1.add_hook(:on_remove, :clear_run_counts)
|
68
|
+
$d1.remove!
|
69
|
+
assert_nil($d1.metadata[:_try_something])
|
70
|
+
assert_equal(1, $d1.metadata[:_not_a_counter])
|
71
|
+
end
|
72
|
+
|
73
|
+
def test_dataset_run_cmd
|
74
|
+
f = File.expand_path('hook_ds_cmd', $tmp)
|
75
|
+
$d1.metadata[:on_remove] = [[:run_cmd, "echo {{dataset}} > '#{f}'"]]
|
76
|
+
assert(! File.exist?(f))
|
77
|
+
$d1.remove!
|
78
|
+
assert(File.exist? f)
|
79
|
+
assert_equal($d1.name, File.read(f).chomp)
|
80
|
+
end
|
81
|
+
|
82
|
+
def test_project_run_cmd
|
83
|
+
f = File.expand_path('hook_pr_cmd', $tmp)
|
84
|
+
$p1.add_hook(:on_save, :run_cmd, "echo {{project}} > '#{f}'")
|
85
|
+
assert(! File.exist?(f))
|
86
|
+
$p1.save
|
87
|
+
assert(File.exist? f)
|
88
|
+
assert_equal($p1.path, File.read(f).chomp)
|
89
|
+
end
|
90
|
+
|
91
|
+
def test_project_result_hooks
|
92
|
+
$res = :test
|
93
|
+
$counter = 1
|
94
|
+
$p1.add_hook(:on_result_ready,
|
95
|
+
:run_lambda, Proc.new { |r| $res = r })
|
96
|
+
$p1.add_hook(:on_result_ready_project_stats,
|
97
|
+
:run_lambda, Proc.new { $counter += 1 })
|
98
|
+
%w[taxonomy.json metadata.db done].each do |ext|
|
99
|
+
FileUtils.touch(File.expand_path(
|
100
|
+
"data/90.stats/miga-project.#{ext}", $p1.path))
|
101
|
+
end
|
102
|
+
assert_equal(:project_stats, $p1.next_task(nil, false))
|
103
|
+
assert_equal(:test, $res)
|
104
|
+
assert_equal(1, $counter)
|
105
|
+
assert_equal(:haai_distances, $p1.next_task)
|
106
|
+
assert_equal(:project_stats, $res)
|
107
|
+
assert_equal(2, $counter)
|
108
|
+
end
|
109
|
+
|
110
|
+
end
|
data/utils/subclades.R
CHANGED
@@ -133,7 +133,7 @@ subclade_clustering <- function(out_base, thr, ani.d, dist_rdata) {
|
|
133
133
|
|
134
134
|
# Classify genomes
|
135
135
|
say("Classify => k :", top.n, "| n :", length(labels(ani.d)))
|
136
|
-
ani.cl <- pam(ani.d, top.n
|
136
|
+
ani.cl <- pam(ani.d, top.n)
|
137
137
|
ani.types <- ani.cl$clustering
|
138
138
|
ani.medoids <- ani.cl$medoids
|
139
139
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: miga-base
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Luis M. Rodriguez-R
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-03-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: daemons
|
@@ -121,7 +121,6 @@ files:
|
|
121
121
|
- lib/miga/cli/action/ncbi_get.rb
|
122
122
|
- lib/miga/cli/action/new.rb
|
123
123
|
- lib/miga/cli/action/next_step.rb
|
124
|
-
- lib/miga/cli/action/plugins.rb
|
125
124
|
- lib/miga/cli/action/preproc_wf.rb
|
126
125
|
- lib/miga/cli/action/quality_wf.rb
|
127
126
|
- lib/miga/cli/action/rm.rb
|
@@ -139,18 +138,20 @@ files:
|
|
139
138
|
- lib/miga/common.rb
|
140
139
|
- lib/miga/common/base.rb
|
141
140
|
- lib/miga/common/format.rb
|
141
|
+
- lib/miga/common/hooks.rb
|
142
142
|
- lib/miga/common/path.rb
|
143
143
|
- lib/miga/daemon.rb
|
144
144
|
- lib/miga/daemon/base.rb
|
145
145
|
- lib/miga/dataset.rb
|
146
146
|
- lib/miga/dataset/base.rb
|
147
|
+
- lib/miga/dataset/hooks.rb
|
147
148
|
- lib/miga/dataset/result.rb
|
148
149
|
- lib/miga/json.rb
|
149
150
|
- lib/miga/metadata.rb
|
150
151
|
- lib/miga/project.rb
|
151
152
|
- lib/miga/project/base.rb
|
152
153
|
- lib/miga/project/dataset.rb
|
153
|
-
- lib/miga/project/
|
154
|
+
- lib/miga/project/hooks.rb
|
154
155
|
- lib/miga/project/result.rb
|
155
156
|
- lib/miga/remote_dataset.rb
|
156
157
|
- lib/miga/remote_dataset/base.rb
|
@@ -158,6 +159,8 @@ files:
|
|
158
159
|
- lib/miga/result.rb
|
159
160
|
- lib/miga/result/base.rb
|
160
161
|
- lib/miga/result/dates.rb
|
162
|
+
- lib/miga/result/source.rb
|
163
|
+
- lib/miga/result/stats.rb
|
161
164
|
- lib/miga/tax_dist.rb
|
162
165
|
- lib/miga/tax_index.rb
|
163
166
|
- lib/miga/taxonomy.rb
|
@@ -189,6 +192,7 @@ files:
|
|
189
192
|
- test/common_test.rb
|
190
193
|
- test/daemon_test.rb
|
191
194
|
- test/dataset_test.rb
|
195
|
+
- test/hook_test.rb
|
192
196
|
- test/json_test.rb
|
193
197
|
- test/metadata_test.rb
|
194
198
|
- test/project_test.rb
|
@@ -1,28 +0,0 @@
|
|
1
|
-
# @package MiGA
|
2
|
-
# @license Artistic-2.0
|
3
|
-
|
4
|
-
require 'miga/cli/action'
|
5
|
-
|
6
|
-
class MiGA::Cli::Action::Plugins < MiGA::Cli::Action
|
7
|
-
|
8
|
-
def parse_cli
|
9
|
-
cli.parse do |opt|
|
10
|
-
cli.opt_object(opt, [:project])
|
11
|
-
opt.on(
|
12
|
-
'--install PATH',
|
13
|
-
'Install the specified plugin in the project'
|
14
|
-
){ |v| cli[:install] = v }
|
15
|
-
opt.on(
|
16
|
-
'--uninstall PATH',
|
17
|
-
'Uninstall the specified plugin from the project'
|
18
|
-
){ |v| cli[:uninstall] = v }
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
def perform
|
23
|
-
p = cli.load_project
|
24
|
-
p.install_plugin(cli[:install]) unless cli[:install].nil?
|
25
|
-
p.uninstall_plugin(cli[:uninstall]) unless cli[:uninstall].nil?
|
26
|
-
p.plugins.each { |i| cli.puts i }
|
27
|
-
end
|
28
|
-
end
|
data/lib/miga/project/plugins.rb
DELETED
@@ -1,41 +0,0 @@
|
|
1
|
-
# @package MiGA
|
2
|
-
# @license Artistic-2.0
|
3
|
-
|
4
|
-
##
|
5
|
-
# Helper module including specific functions handle plugins.
|
6
|
-
module MiGA::Project::Plugins
|
7
|
-
|
8
|
-
##
|
9
|
-
# Installs the plugin in the specified path.
|
10
|
-
def install_plugin(path)
|
11
|
-
abs_path = File.absolute_path(path)
|
12
|
-
raise "Plugin already installed in project: #{abs_path}." unless
|
13
|
-
metadata[:plugins].nil? or not metadata[:plugins].include?(abs_path)
|
14
|
-
raise "Malformed MiGA plugin: #{abs_path}." unless
|
15
|
-
File.exist?(File.expand_path("miga-plugin.json", abs_path))
|
16
|
-
self.metadata[:plugins] ||= []
|
17
|
-
self.metadata[:plugins] << abs_path
|
18
|
-
save
|
19
|
-
end
|
20
|
-
|
21
|
-
##
|
22
|
-
# Uninstall the plugin in the specified path.
|
23
|
-
def uninstall_plugin(path)
|
24
|
-
abs_path = File.absolute_path(path)
|
25
|
-
raise "Plugin not currently installed: #{abs_path}." if
|
26
|
-
metadata[:plugins].nil? or not metadata[:plugins].include?(abs_path)
|
27
|
-
self.metadata[:plugins].delete(abs_path)
|
28
|
-
save
|
29
|
-
end
|
30
|
-
|
31
|
-
##
|
32
|
-
# List plugins installed in the project.
|
33
|
-
def plugins ; metadata[:plugins] ||= [] ; end
|
34
|
-
|
35
|
-
##
|
36
|
-
# Loads the plugins installed in the project.
|
37
|
-
def load_plugins
|
38
|
-
plugins.each { |pl| require File.expand_path("lib-plugin.rb", pl) }
|
39
|
-
end
|
40
|
-
|
41
|
-
end
|