miga-base 0.2.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +351 -0
  3. data/actions/add_result +61 -0
  4. data/actions/add_taxonomy +86 -0
  5. data/actions/create_dataset +62 -0
  6. data/actions/create_project +70 -0
  7. data/actions/daemon +69 -0
  8. data/actions/download_dataset +77 -0
  9. data/actions/find_datasets +63 -0
  10. data/actions/import_datasets +86 -0
  11. data/actions/index_taxonomy +71 -0
  12. data/actions/list_datasets +83 -0
  13. data/actions/list_files +67 -0
  14. data/actions/unlink_dataset +52 -0
  15. data/bin/miga +48 -0
  16. data/lib/miga/daemon.rb +178 -0
  17. data/lib/miga/dataset.rb +286 -0
  18. data/lib/miga/gui.rb +289 -0
  19. data/lib/miga/metadata.rb +74 -0
  20. data/lib/miga/project.rb +268 -0
  21. data/lib/miga/remote_dataset.rb +154 -0
  22. data/lib/miga/result.rb +102 -0
  23. data/lib/miga/tax_index.rb +70 -0
  24. data/lib/miga/taxonomy.rb +107 -0
  25. data/lib/miga.rb +83 -0
  26. data/scripts/_distances_noref_nomulti.bash +86 -0
  27. data/scripts/_distances_ref_nomulti.bash +105 -0
  28. data/scripts/aai_distances.bash +40 -0
  29. data/scripts/ani_distances.bash +39 -0
  30. data/scripts/assembly.bash +38 -0
  31. data/scripts/cds.bash +45 -0
  32. data/scripts/clade_finding.bash +27 -0
  33. data/scripts/distances.bash +30 -0
  34. data/scripts/essential_genes.bash +29 -0
  35. data/scripts/haai_distances.bash +39 -0
  36. data/scripts/init.bash +211 -0
  37. data/scripts/miga.bash +12 -0
  38. data/scripts/mytaxa.bash +93 -0
  39. data/scripts/mytaxa_scan.bash +85 -0
  40. data/scripts/ogs.bash +36 -0
  41. data/scripts/read_quality.bash +37 -0
  42. data/scripts/ssu.bash +35 -0
  43. data/scripts/subclades.bash +26 -0
  44. data/scripts/trimmed_fasta.bash +47 -0
  45. data/scripts/trimmed_reads.bash +57 -0
  46. data/utils/adapters.fa +302 -0
  47. data/utils/mytaxa_scan.R +89 -0
  48. data/utils/mytaxa_scan.rb +58 -0
  49. data/utils/requirements.txt +19 -0
  50. data/utils/subclades-compile.rb +48 -0
  51. data/utils/subclades.R +171 -0
  52. metadata +185 -0
data/actions/daemon ADDED
@@ -0,0 +1,69 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # @package MiGA
4
+ # @author Luis M. Rodriguez-R <lmrodriguezr at gmail dot com>
5
+ # @license artistic license 2.0
6
+ # @update Oct-01-2015
7
+ #
8
+
9
+ require "miga/daemon"
10
+
11
+ task = ARGV.shift unless ["-h","--help"].include? ARGV.first
12
+ ARGV << "-h" if ARGV.empty?
13
+ o = {q:true, update:false, daemon_opts:[]}
14
+ OptionParser.new do |opt|
15
+ opt.banner = <<BAN
16
+ Controls the daemon of a MiGA project.
17
+
18
+ Usage: #{$0} #{File.basename(__FILE__)} {task} [options]
19
+ BAN
20
+ opt.separator "task:"
21
+ { start: "Start an instance of the application.",
22
+ stop: "Start an instance of the application.",
23
+ restart: "Stop all instances and restart them afterwards.",
24
+ reload: "Send a SIGHUP to all instances of the application.",
25
+ run: "Start the application and stay on top.",
26
+ zap: "Set the application to a stopped state.",
27
+ status: "Show status (PID) of application instances."
28
+ }.each{ |k,v| opt.separator sprintf " %*s%s", -33, k, v }
29
+ opt.separator ""
30
+ opt.separator "MiGA options:"
31
+ opt.on("-P", "--project PATH",
32
+ "(Mandatory) Path to the project to use."){ |v| o[:project]=v }
33
+ opt.on("--latency INT",
34
+ "Number of seconds the daemon will be sleeping."
35
+ ){ |v| o[:latency]=v.to_i }
36
+ opt.on("--max-jobs INT",
37
+ "Maximum number of jobs to use simultaneously."){ |v| o[:maxjobs]=v.to_i }
38
+ opt.on("--ppn INT",
39
+ "Maximum number of cores to use in a single job."){ |v| o[:ppn]=v.to_i }
40
+ opt.on("-v", "--verbose",
41
+ "Print additional information to STDERR."){ o[:q]=false }
42
+ opt.on("-d", "--debug INT", "Print debugging information to STDERR.") do |v|
43
+ v.to_i>1 ? MiGA::MiGA.DEBUG_TRACE_ON : MiGA::MiGA.DEBUG_ON
44
+ end
45
+ opt.on("-h", "--help", "Display this screen.") do
46
+ puts opt
47
+ exit
48
+ end
49
+ opt.separator ""
50
+ opt.separator "Daemon options:"
51
+ opt.on("-t", "--ontop",
52
+ "Stay on top (does not daemonize)"){ o[:daemon_opts] << '-t' }
53
+ opt.on("-f", "--force", "Force operation"){ o[:daemon_opts] << '-f' }
54
+ opt.on("-n", "--no_wait",
55
+ "Do not wait for processes to stop"){ o[:daemon_opts] << '-n' }
56
+ end.parse!
57
+
58
+ ### MAIN
59
+ raise "Project is mandatory." if o[:project].nil?
60
+
61
+ raise "Project doesn't exist, aborting." unless
62
+ MiGA::Project.exist? o[:project]
63
+ p = MiGA::Project.new(o[:project])
64
+ d = MiGA::Daemon.new(p)
65
+ [:latency, :maxjobs, :ppn].each do |k|
66
+ d.runopts(k, o[k]) unless o[k].nil?
67
+ end
68
+ d.daemon(task, o[:daemon_opts])
69
+
@@ -0,0 +1,77 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # @package MiGA
4
+ # @author Luis M. Rodriguez-R <lmrodriguezr at gmail dot com>
5
+ # @license artistic license 2.0
6
+ # @update Oct-01-2015
7
+ #
8
+
9
+ require "miga/remote_dataset"
10
+
11
+ o = {q:true, ref:true, universe: :ebi, db: :embl}
12
+ OptionParser.new do |opt|
13
+ opt.banner = <<BAN
14
+ Creates an empty dataset in a pre-existing MiGA project.
15
+
16
+ Usage: #{$0} #{File.basename(__FILE__)} [options]
17
+ BAN
18
+ opt.separator ""
19
+ opt.on("-P", "--project PATH",
20
+ "(Mandatory) Path to the project to use."){ |v| o[:project]=v }
21
+ opt.on("-D", "--dataset STRING",
22
+ "(Mandatory) ID of the dataset to create."){ |v| o[:dataset]=v }
23
+ opt.on("-I", "--ids ID1,ID2,...",
24
+ "(Mandatory) IDs in the remote database separated by commas."
25
+ ){ |v| o[:ids]=v }
26
+ opt.on("-U", "--universe STRING",
27
+ "Universe where the remote database lives. By default: #{o[:universe]}."
28
+ ){ |v| o[:universe]=v.to_sym }
29
+ opt.on("--db STRING",
30
+ "Name of the remote database. By default: #{o[:db]}."
31
+ ){ |v| o[:db]=v.to_sym }
32
+ opt.on("-t", "--type STRING",
33
+ "Type of dataset. Recognized types include:",
34
+ *MiGA::Dataset.KNOWN_TYPES.map{ |k,v| "~ #{k}: #{v[:description]}"}
35
+ ){ |v| o[:type]=v.to_sym }
36
+ opt.on("-q", "--query",
37
+ "If set, the dataset is registered as a query, not a reference dataset."
38
+ ){ |v| o[:ref]=!v }
39
+ opt.on("-d", "--description STRING",
40
+ "Description of the dataset."){ |v| o[:description]=v }
41
+ opt.on("-u", "--user STRING",
42
+ "Owner of the dataset."){ |v| o[:user]=v }
43
+ opt.on("-c", "--comments STRING",
44
+ "Comments on the dataset."){ |v| o[:comments]=v }
45
+ opt.on("-v", "--verbose",
46
+ "Print additional information to STDERR."){ o[:q]=false }
47
+ opt.on("-d", "--debug INT", "Print debugging information to STDERR.") do |v|
48
+ v.to_i>1 ? MiGA::MiGA.DEBUG_TRACE_ON : MiGA::MiGA.DEBUG_ON
49
+ end
50
+ opt.on("-h", "--help", "Display this screen.") do
51
+ puts opt
52
+ exit
53
+ end
54
+ opt.separator ""
55
+ end.parse!
56
+
57
+
58
+ ### MAIN
59
+ raise "-P is mandatory." if o[:project].nil?
60
+ raise "-D is mandatory." if o[:dataset].nil?
61
+ raise "-I is mandatory." if o[:ids].nil?
62
+
63
+ $stderr.puts "Locating remote dataset." unless o[:q]
64
+ rd = MiGA::RemoteDataset.new(o[:ids], o[:db], o[:universe])
65
+
66
+ $stderr.puts "Loading project." unless o[:q]
67
+ p = MiGA::Project.load(o[:project])
68
+ raise "Impossible to load project: #{o[:project]}" if p.nil?
69
+
70
+ $stderr.puts "Creating dataset." unless o[:q]
71
+ md = {}
72
+ [:type, :description, :user, :comments].each{ |k| md[k]=o[k] unless o[k].nil? }
73
+ d = rd.save_to(p, o[:dataset], o[:ref], md)
74
+ p.add_dataset(o[:dataset])
75
+
76
+ $stderr.puts "Done." unless o[:q]
77
+
@@ -0,0 +1,63 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # @package MiGA
4
+ # @author Luis M. Rodriguez-R <lmrodriguezr at gmail dot com>
5
+ # @license artistic license 2.0
6
+ # @update Oct-01-2015
7
+ #
8
+
9
+ o = {q:true, add:false, ref:false}
10
+ OptionParser.new do |opt|
11
+ opt.banner = <<BAN
12
+ Finds unregistered datasets based on result files.
13
+
14
+ Usage: #{$0} #{File.basename(__FILE__)} [options]
15
+ BAN
16
+ opt.separator ""
17
+ opt.on("-P", "--project PATH",
18
+ "(Mandatory) Path to the project to use."){ |v| o[:project]=v }
19
+ opt.on("-a", "--add",
20
+ "Register the datasets found. By default, only lists them (dry run)."
21
+ ){ |v| o[:add]=v }
22
+ opt.on("-t", "--type STRING",
23
+ "Type of datasets. Recognized types include:",
24
+ *MiGA::Dataset.KNOWN_TYPES.map{ |k,v| "~ #{k}: #{v[:description]}"}
25
+ ){ |v| o[:type]=v.to_sym }
26
+ opt.on("-r", "--ref",
27
+ "If set, all datasets are registered as reference datasets."
28
+ ){ |v| o[:ref]=v }
29
+ opt.on("-u", "--user STRING", "Owner of the dataset."){ |v| o[:user]=v }
30
+ opt.on("-v", "--verbose",
31
+ "Print additional information to STDERR."){ o[:q]=false }
32
+ opt.on("-d", "--debug INT", "Print debugging information to STDERR.") do |v|
33
+ v.to_i>1 ? MiGA::MiGA.DEBUG_TRACE_ON : MiGA::MiGA.DEBUG_ON
34
+ end
35
+ opt.on("-h", "--help", "Display this screen.") do
36
+ puts opt
37
+ exit
38
+ end
39
+ opt.separator ""
40
+ end.parse!
41
+
42
+
43
+ ### MAIN
44
+ raise "-P is mandatory." if o[:project].nil?
45
+
46
+ $stderr.puts "Loading project." unless o[:q]
47
+ p = MiGA::Project.load(o[:project])
48
+ raise "Impossible to load project: #{o[:project]}" if p.nil?
49
+
50
+ $stderr.puts "Finding datasets." unless o[:q]
51
+ ud = p.unregistered_datasets
52
+ ud.each do |dn|
53
+ puts dn
54
+ if o[:add]
55
+ md = {}
56
+ [:type, :user].each{ |k| md[k]=o[k] unless o[k].nil? }
57
+ d = MiGA::Dataset.new(p, dn, o[:ref], md)
58
+ p.add_dataset(dn)
59
+ end
60
+ end
61
+
62
+ $stderr.puts "Done." unless o[:q]
63
+
@@ -0,0 +1,86 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # @package MiGA
4
+ # @author Luis M. Rodriguez-R <lmrodriguezr at gmail dot com>
5
+ # @license artistic license 2.0
6
+ # @update Oct-01-2015
7
+ #
8
+
9
+ o = {q:true, info:false, force:false, method: :hardlink }
10
+ OptionParser.new do |opt|
11
+ opt.banner = <<BAN
12
+ Link datasets (including results) from one project to another.
13
+
14
+ Usage: #{$0} #{File.basename(__FILE__)} [options]
15
+ BAN
16
+ opt.separator ""
17
+ opt.on("-P", "--project-source PATH",
18
+ "(Mandatory) Path to the project that contains the dataset."
19
+ ){ |v| o[:project1]=v }
20
+ opt.on("-Q", "--project-target PATH",
21
+ "(Mandatory) Path to the project where to link the dataset."
22
+ ){ |v| o[:project2]=v }
23
+ opt.on("-D", "--dataset STRING",
24
+ "ID of the dataset to link."){ |v| o[:dataset]=v.miga_name }
25
+ opt.on("-f", "--force",
26
+ "Forces linking, even if dataset's preprocessing is incomplete."
27
+ ){ |v| o[:force]=v }
28
+ opt.on("-s", "--symlink",
29
+ "Creates symlinks instead of the default hard links."
30
+ ){ o[:method] = :symlink }
31
+ opt.on("-c", "--copy",
32
+ "Creates copies instead of the default hard links."){ o[:method] = :copy }
33
+ opt.on("--[no-]ref",
34
+ "If set, links only reference (or only non-reference) datasets."
35
+ ){ |v| o[:ref]=v }
36
+ opt.on("--[no-]multi",
37
+ "If set, links only multi-species (or only single-species) datasets."
38
+ ){ |v| o[:multi]=v }
39
+ opt.on("-t", "--taxonomy RANK:TAXON",
40
+ "Filter by taxonomy."){ |v| o[:taxonomy]=MiGA::Taxonomy.new v }
41
+ opt.on("-v", "--verbose",
42
+ "Print additional information to STDERR."){ o[:q]=false }
43
+ opt.on("-d", "--debug INT", "Print debugging information to STDERR.") do |v|
44
+ v.to_i>1 ? MiGA::MiGA.DEBUG_TRACE_ON : MiGA::MiGA.DEBUG_ON
45
+ end
46
+ opt.on("-h", "--help", "Display this screen.") do
47
+ puts opt
48
+ exit
49
+ end
50
+ opt.separator ""
51
+ end.parse!
52
+
53
+
54
+ ### MAIN
55
+ raise "-P is mandatory." if o[:project1].nil?
56
+ raise "-Q is mandatory." if o[:project2].nil?
57
+
58
+ $stderr.puts "Loading project." unless o[:q]
59
+ p = MiGA::Project.load(o[:project1])
60
+ raise "Impossible to load project: #{o[:project1]}" if p.nil?
61
+ q = MiGA::Project.load(o[:project2])
62
+ raise "Impossible to load project: #{o[:project2]}" if q.nil?
63
+
64
+ $stderr.puts "Listing dataset." unless o[:q]
65
+ if o[:dataset].nil?
66
+ ds = p.datasets
67
+ else
68
+ ds = [p.dataset(o[:dataset])]
69
+ end
70
+ ds.select!{|d| d.name == o[:dataset]} unless o[:dataset].nil?
71
+ ds.select!{|d| d.is_ref? == o[:ref] } unless o[:ref].nil?
72
+ ds.select! do |d|
73
+ (not d.metadata[:type].nil?) and
74
+ (MiGA::Dataset.KNOWN_TYPES[d.metadata[:type]][:multi] == o[:multi])
75
+ end unless o[:multi].nil?
76
+ ds.select! do |d|
77
+ (not d.metadata[:tax].nil?) and d.metadata[:tax].is_in?(o[:taxonomy])
78
+ end unless o[:taxonomy].nil?
79
+ ds.each do |d|
80
+ next unless o[:force] or d.done_preprocessing?
81
+ puts d.name
82
+ q.import_dataset(d, o[:method])
83
+ end
84
+
85
+ $stderr.puts "Done." unless o[:q]
86
+
@@ -0,0 +1,71 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # @package MiGA
4
+ # @author Luis M. Rodriguez-R <lmrodriguezr at gmail dot com>
5
+ # @license artistic license 2.0
6
+ # @update Oct-01-2015
7
+ #
8
+
9
+ require "miga/tax_index"
10
+
11
+ o = {q:true, format: :json}
12
+ OptionParser.new do |opt|
13
+ opt.banner = <<BAN
14
+ Creates a taxonomy-indexed list of the datasets.
15
+
16
+ Usage: #{$0} #{File.basename(__FILE__)} [options]
17
+ BAN
18
+ opt.separator ""
19
+ opt.on("-P", "--project PATH",
20
+ "(Mandatory) Path to the project to read."){ |v| o[:project]=v }
21
+ opt.on("-i", "--index PATH",
22
+ "(Mandatory) File to create with the index."){ |v| o[:index]=v }
23
+ opt.on("-f", "--format STRING",
24
+ "Format of the index file. By default: #{o[:format]}. Supported: " +
25
+ "json, tab."){ |v| o[:format]=v.to_sym }
26
+ opt.on("--[no-]multi",
27
+ "If set, lists only multi-species (or only single-species) datasets."
28
+ ){ |v| o[:multi]=v }
29
+ opt.on("-v", "--verbose",
30
+ "Print additional information to STDERR."){ o[:q]=false }
31
+ opt.on("-d", "--debug INT", "Print debugging information to STDERR.") do |v|
32
+ v.to_i>1 ? MiGA::MiGA.DEBUG_TRACE_ON : MiGA::MiGA.DEBUG_ON
33
+ end
34
+ opt.on("-h", "--help", "Display this screen.") do
35
+ puts opt
36
+ exit
37
+ end
38
+ opt.separator ""
39
+ end.parse!
40
+
41
+ ### MAIN
42
+ raise "-P is mandatory." if o[:project].nil?
43
+ raise "-i is mandatory." if o[:index].nil?
44
+
45
+ $stderr.puts "Loading project." unless o[:q]
46
+ p = MiGA::Project.load(o[:project])
47
+ raise "Impossible to load project: #{o[:project]}" if p.nil?
48
+
49
+ $stderr.puts "Loading datasets." unless o[:q]
50
+ ds = p.datasets
51
+ ds.select!{|d| not d.metadata[:tax].nil? }
52
+ ds.select! do |d|
53
+ (not d.metadata[:type].nil?) and
54
+ (MiGA::Dataset.KNOWN_TYPES[d.metadata[:type]][:multi] == o[:multi])
55
+ end unless o[:multi].nil?
56
+
57
+ $stderr.puts "Indexing taxonomy." unless o[:q]
58
+ tax_index = MiGA::TaxIndex.new
59
+ ds.each { |d| tax_index << d }
60
+
61
+ $stderr.puts "Saving index." unless o[:q]
62
+ fh = File.open(o[:index], "w")
63
+ if o[:format]==:json
64
+ fh.print tax_index.to_json
65
+ elsif o[:format]==:tab
66
+ fh.print tax_index.to_tab
67
+ end
68
+ fh.close
69
+
70
+ $stderr.puts "Done." unless o[:q]
71
+
@@ -0,0 +1,83 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # @package MiGA
4
+ # @author Luis M. Rodriguez-R <lmrodriguezr at gmail dot com>
5
+ # @license artistic license 2.0
6
+ # @update Oct-01-2015
7
+ #
8
+
9
+ o = {q:true, info:false}
10
+ OptionParser.new do |opt|
11
+ opt.banner = <<BAN
12
+ Lists all registered datasets in an MiGA project.
13
+
14
+ Usage: #{$0} #{File.basename(__FILE__)} [options]
15
+ BAN
16
+ opt.separator ""
17
+ opt.on("-P", "--project PATH",
18
+ "(Mandatory) Path to the project to read."){ |v| o[:project]=v }
19
+ opt.on("-D", "--dataset STRING",
20
+ "ID of the dataset to read."){ |v| o[:dataset]=v.miga_name }
21
+ opt.on("--[no-]ref",
22
+ "If set, lists only reference (or only non-reference) datasets."
23
+ ){ |v| o[:ref]=v }
24
+ opt.on("--[no-]multi",
25
+ "If set, lists only multi-species (or only single-species) datasets."
26
+ ){ |v| o[:multi]=v }
27
+ opt.on("-i", "--info",
28
+ "Print additional information on each dataset."){ o[:info]=true }
29
+ opt.on("-t", "--taxonomy RANK:TAXON",
30
+ "Filter by taxonomy."){ |v| o[:taxonomy]=MiGA::Taxonomy.new v }
31
+ opt.on("-m", "--metadata STRING",
32
+ "Print name and metadata field only. If set, ignores -i."
33
+ ){ |v| o[:datum]=v }
34
+ opt.on("-v", "--verbose",
35
+ "Print additional information to STDERR."){ o[:q]=false }
36
+ opt.on("-d", "--debug INT", "Print debugging information to STDERR.") do |v|
37
+ v.to_i>1 ? MiGA::MiGA.DEBUG_TRACE_ON : MiGA::MiGA.DEBUG_ON
38
+ end
39
+ opt.on("-h", "--help", "Display this screen.") do
40
+ puts opt
41
+ exit
42
+ end
43
+ opt.separator ""
44
+ end.parse!
45
+
46
+
47
+ ### MAIN
48
+ raise "-P is mandatory." if o[:project].nil?
49
+
50
+ $stderr.puts "Loading project." unless o[:q]
51
+ p = MiGA::Project.load(o[:project])
52
+ raise "Impossible to load project: #{o[:project]}" if p.nil?
53
+
54
+ $stderr.puts "Listing datasets." unless o[:q]
55
+ if o[:dataset].nil?
56
+ ds = p.datasets
57
+ elsif MiGA::Dataset.exist? p, o[:dataset]
58
+ ds = [p.dataset(o[:dataset])]
59
+ else
60
+ ds = []
61
+ end
62
+ ds.select!{|d| d.is_ref? == o[:ref] } unless o[:ref].nil?
63
+ ds.select! do |d|
64
+ (not d.metadata[:type].nil?) and
65
+ (MiGA::Dataset.KNOWN_TYPES[d.metadata[:type]][:multi] == o[:multi])
66
+ end unless o[:multi].nil?
67
+ ds.select! do |d|
68
+ (not d.metadata[:tax].nil?) and d.metadata[:tax].is_in?(o[:taxonomy])
69
+ end unless o[:taxonomy].nil?
70
+ if not o[:datum].nil?
71
+ ds.each{|d| puts "#{d.name}\t#{(d.metadata[ o[:datum] ] || "?").to_s}"}
72
+ elsif o[:info]
73
+ header = MiGA::Dataset.INFO_FIELDS.map{|i| i.ljust(25)}.join(" ")
74
+ puts header, header.gsub(/\S/,"-")
75
+ ds.each do |d|
76
+ puts d.info.map{|i| i.nil? ? "?" : i.to_s}.map{|i| i.ljust(25)}.join(" ")
77
+ end
78
+ else
79
+ ds.each{|d| puts d.name}
80
+ end
81
+
82
+ $stderr.puts "Done." unless o[:q]
83
+
@@ -0,0 +1,67 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # @package MiGA
4
+ # @author Luis M. Rodriguez-R <lmrodriguezr at gmail dot com>
5
+ # @license artistic license 2.0
6
+ # @update Oct-01-2015
7
+ #
8
+
9
+ o = {q:true, details:false, json:true}
10
+ OptionParser.new do |opt|
11
+ opt.banner = <<BAN
12
+ Lists all registered files from the results of a dataset or a project.
13
+
14
+ Usage: #{$0} #{File.basename(__FILE__)} [options]
15
+ BAN
16
+ opt.separator ""
17
+ opt.on("-P", "--project PATH",
18
+ "(Mandatory) Path to the project to read."){ |v| o[:project]=v }
19
+ opt.on("-D", "--dataset STRING",
20
+ "ID of the dataset to read. If not set, project-wide results are shown."
21
+ ){ |v| o[:dataset]=v.miga_name }
22
+ opt.on("-i", "--info",
23
+ "If set, it prints additional details for each file."
24
+ ){ |v| o[:details]=v }
25
+ opt.on("--exclude-json",
26
+ "If set, excludes json files containing results metadata."
27
+ ){ |v| o[:json]=!v }
28
+ opt.on("-v", "--verbose",
29
+ "Print additional information to STDERR."){ o[:q]=false }
30
+ opt.on("-d", "--debug INT", "Print debugging information to STDERR.") do |v|
31
+ v.to_i>1 ? MiGA::MiGA.DEBUG_TRACE_ON : MiGA::MiGA.DEBUG_ON
32
+ end
33
+ opt.on("-h", "--help", "Display this screen.") do
34
+ puts opt
35
+ exit
36
+ end
37
+ opt.separator ""
38
+ end.parse!
39
+
40
+
41
+ ### MAIN
42
+ raise "-P is mandatory." if o[:project].nil?
43
+
44
+ $stderr.puts "Loading project." unless o[:q]
45
+ p = MiGA::Project.load(o[:project])
46
+ raise "Impossible to load project: #{o[:project]}" if p.nil?
47
+
48
+ if o[:dataset].nil?
49
+ results = p.results
50
+ else
51
+ $stderr.puts "Loading dataset." unless o[:q]
52
+ ds = p.dataset(o[:dataset])
53
+ raise "Impossible to load dataset: #{o[:dataset]}" if ds.nil?
54
+ results = ds.results
55
+ end
56
+
57
+ $stderr.puts "Listing files." unless o[:q]
58
+ results.each do |result|
59
+ puts (o[:details] ? result.path + "\t" + "\t" : "") + result.path if o[:json]
60
+ result.each_file do |k,f|
61
+ puts (o[:details] ? result.path + "\t" + k.to_s + "\t" : "") +
62
+ File.dirname(result.path) + "/" + f.to_s
63
+ end
64
+ end
65
+
66
+ $stderr.puts "Done." unless o[:q]
67
+
@@ -0,0 +1,52 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # @package MiGA
4
+ # @author Luis M. Rodriguez-R <lmrodriguezr at gmail dot com>
5
+ # @license artistic license 2.0
6
+ # @update Oct-01-2015
7
+ #
8
+
9
+ o = {q:true, remove:false}
10
+ OptionParser.new do |opt|
11
+ opt.banner = <<BAN
12
+ Removes a dataset from an MiGA project.
13
+
14
+ Usage: #{$0} #{File.basename(__FILE__)} [options]
15
+ BAN
16
+ opt.separator ""
17
+ opt.on("-P", "--project PATH",
18
+ "(Mandatory) Path to the project to use."){ |v| o[:project]=v }
19
+ opt.on("-D", "--dataset PATH",
20
+ "(Mandatory) ID of the dataset to create."){ |v| o[:dataset]=v }
21
+ opt.on("-r", "--remove",
22
+ "Also remove all associated files.",
23
+ "By default, only unlinks from metadata."){ o[:remove]=true }
24
+ opt.on("-v", "--verbose",
25
+ "Print additional information to STDERR."){ o[:q]=false }
26
+ opt.on("-d", "--debug INT", "Print debugging information to STDERR.") do |v|
27
+ v.to_i>1 ? MiGA::MiGA.DEBUG_TRACE_ON : MiGA::MiGA.DEBUG_ON
28
+ end
29
+ opt.on("-h", "--help", "Display this screen.") do
30
+ puts opt
31
+ exit
32
+ end
33
+ opt.separator ""
34
+ end.parse!
35
+
36
+
37
+ ### MAIN
38
+ raise "-P is mandatory." if o[:project].nil?
39
+ raise "-D is mandatory." if o[:dataset].nil?
40
+
41
+ $stderr.puts "Loading project." unless o[:q]
42
+ p = MiGA::Project.load(o[:project])
43
+ raise "Impossible to load project: #{o[:project]}" if p.nil?
44
+
45
+ $stderr.puts "Unlinking dataset." unless o[:q]
46
+ raise "Dataset doesn't exist, aborting." unless
47
+ MiGA::Dataset.exist?(p, o[:dataset])
48
+ d = p.unlink_dataset(o[:dataset])
49
+ d.remove! if o[:remove]
50
+
51
+ $stderr.puts "Done." unless o[:q]
52
+
data/bin/miga ADDED
@@ -0,0 +1,48 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # @package MiGA
4
+ # @author Luis M. Rodriguez-R <lmrodriguezr at gmail dot com>
5
+ # @license artistic license 2.0
6
+ # @update Oct-01-2015
7
+ #
8
+
9
+ $:.push File.expand_path("../lib", File.dirname(__FILE__))
10
+
11
+ require "optparse"
12
+ require "miga"
13
+
14
+ execs = Dir[File.expand_path("../actions/*",
15
+ File.dirname(__FILE__))].map{ |b| File.basename b }
16
+
17
+ if %w{-v --version}.include? ARGV[0]
18
+ puts MiGA::MiGA.VERSION
19
+ elsif %w{-V --long-version}.include? ARGV[0]
20
+ puts MiGA::MiGA.LONG_VERSION
21
+ elsif %w{-C --citation}.include? ARGV[0]
22
+ puts MiGA::MiGA.CITATION
23
+ elsif execs.include? ARGV[0]
24
+ task = ARGV.shift
25
+ ARGV << "-h" if ARGV.empty?
26
+ begin
27
+ load File.expand_path("../actions/" + task, File.dirname(__FILE__))
28
+ rescue => err
29
+ $stderr.puts "Exception: #{err}\n\n"
30
+ err.backtrace.each { |l| $stderr.puts l + "\n" }
31
+ err
32
+ end
33
+ else
34
+ print <<HELP.gsub /^ /,""
35
+ Microbial Genomes Atlas.
36
+
37
+ Usage: #{$0} {action} [options]
38
+
39
+ actions:#{ execs.map{ |e| "\n #{e}"}.join }
40
+
41
+ generic options:
42
+ -h, --help Display this screen.
43
+ -v, --version Show MiGA version.
44
+ -V, --long-version Show complete MiGA version.
45
+ -C, --citation How to cite MiGA.
46
+ HELP
47
+ end
48
+