miga-base 0.2.0.6

Sign up to get free protection for your applications and to get access to all the features.
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
+