miga-base 1.3.9.7 → 1.3.10.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 39f349118de256f22be42c19f16576b65e9f6836b54e2cab6cd999b93ffa19b6
4
- data.tar.gz: 2e44d103abb4156239e98a56287d7ce198c6277dc9eab25c4ed0921831112048
3
+ metadata.gz: '0239e39a0588b73d042da7d970925d2d93a5334c858453e032d51b0af760fa27'
4
+ data.tar.gz: 81e6903e1feba6571d76fe5d113a60414bd0d3b1b3090d6e26367a93cf8d0da7
5
5
  SHA512:
6
- metadata.gz: 6eba0f2cc60647f500f4f9d0c237e88b69de370c8fb95f481a36e85d3967993396a32361f88050b56719413bf0c850e9252275a85b8b067283f19bb38c959d1f
7
- data.tar.gz: 37407d26955546c95d9f6eb95b841273a7cb08c6a78d04aa4174d902cc2eaced33749a6d4b0a74b4462e715ce6986799e961c20708f7c8796977a324b2d1a687
6
+ metadata.gz: d68e55d5335f3da03eb9cea737aad5fa21a7a272e3958db6130e7260387844c1bed92b0b2f655a5a5133772797212b717559da9701723c9885cc9ee7cffc962f
7
+ data.tar.gz: 8d27c2f580106c0d1f74e6daaf1cb81ffd7c6fbabf86e7569342027ff9e09b1810c245ad560eff0179c3d06a88b2d1a087344c56e34a2d54c799004e2f6370c0
@@ -17,10 +17,7 @@ module MiGA::Cli::Action::Download::Ncbi
17
17
  cli.opt_flag(opt, 'chromosome', 'Download complete chromosomes')
18
18
  cli.opt_flag(opt, 'scaffold', 'Download genomes in scaffolds')
19
19
  cli.opt_flag(opt, 'contig', 'Download genomes in contigs')
20
- opt.on(
21
- '--all',
22
- 'Download all genomes (in any status)'
23
- ) do
20
+ opt.on('--all', 'Download all genomes (in any status)') do
24
21
  cli[:complete] = true
25
22
  cli[:chromosome] = true
26
23
  cli[:scaffold] = true
@@ -29,6 +26,10 @@ module MiGA::Cli::Action::Download::Ncbi
29
26
  opt.on('--ncbi-list-json STRING', '::HIDE::') do |v|
30
27
  cli[:ncbi_list_json] = v
31
28
  end
29
+ opt.on(
30
+ '--ncbi-taxonomy-dump STRING',
31
+ 'Path to an NCBI Taxonomy dump directory to query instead of API calls'
32
+ ) { |v| MiGA::RemoteDataset.use_ncbi_taxonomy_dump(v) }
32
33
  end
33
34
 
34
35
  def cli_name_modifiers(opt)
@@ -24,14 +24,13 @@ class MiGA::Cli::Action::NcbiGet < MiGA::Cli::Action
24
24
  cli_name_modifiers(opt)
25
25
  cli_filters(opt)
26
26
  cli_save_actions(opt)
27
- opt.on(
28
- '--api-key STRING',
29
- '::HIDE::' # For backwards compatibility
30
- ) { |v| ENV['NCBI_API_KEY'] = v }
31
- opt.on(
32
- '--ncbi-api-key STRING',
33
- 'NCBI API key'
34
- ) { |v| ENV['NCBI_API_KEY'] = v }
27
+ opt.on('--api-key STRING', '::HIDE::') do |v|
28
+ warn "The use of --api-key is deprecated, please use --ncbi-api-key"
29
+ ENV['NCBI_API_KEY'] = v
30
+ end
31
+ opt.on('--ncbi-api-key STRING', 'NCBI API key') do |v|
32
+ ENV['NCBI_API_KEY'] = v
33
+ end
35
34
  end
36
35
  end
37
36
 
@@ -12,6 +12,55 @@ class MiGA::RemoteDataset < MiGA::MiGA
12
12
  # Class-level
13
13
 
14
14
  class << self
15
+ ##
16
+ # Path to a directory with a recent NCBI Taxonomy dump to use instead of
17
+ # making API calls to NCBI servers, which can be obtained at:
18
+ # https://ftp.ncbi.nih.gov/pub/taxonomy/taxdump.tar.gz
19
+ def use_ncbi_taxonomy_dump(path)
20
+ raise "Directory doesn't exist: #{path}" unless File.directory?(path)
21
+
22
+ # Structure: { TaxID => ["name", "rank", parent TaxID] }
23
+ @ncbi_taxonomy_names = {}
24
+
25
+ # Read names.dmp
26
+ File.open(File.join(path, 'names.dmp')) do |fh|
27
+ fh.each do |ln|
28
+ row = ln.split(/\t\|\t?/)
29
+ next unless row[3] == 'scientific name'
30
+ @ncbi_taxonomy_names[row[0].to_i] = [row[1].strip]
31
+ end
32
+ end
33
+
34
+ # Read nodes.dmp
35
+ File.open(File.join(path, 'nodes.dmp')) do |fh|
36
+ fh.each do |ln|
37
+ row = ln.split(/\t\|\t?/)
38
+ child = row[0].to_i
39
+ parent = row[1].to_i
40
+ @ncbi_taxonomy_names[child][1] = row[2]
41
+ @ncbi_taxonomy_names[child][2] = parent unless parent == child
42
+ end
43
+ end
44
+ end
45
+
46
+ ##
47
+ # Is a local NCBI Taxonomy dump available?
48
+ def ncbi_taxonomy_dump?
49
+ (@ncbi_taxonomy_names ||= nil) ? true : false
50
+ end
51
+
52
+ ##
53
+ # Get the MiGA::Taxonomy object for the lineage of the taxon with TaxID
54
+ # +id+ using the local NCBI Taxonomy dump.
55
+ def taxonomy_from_ncbi_dump(id)
56
+ MiGA::Taxonomy.new(ns: 'ncbi').tap do |tax|
57
+ while @ncbi_taxonomy_names[id]
58
+ tax << { @ncbi_taxonomy_names[id][1] => @ncbi_taxonomy_names[id][0] }
59
+ id = @ncbi_taxonomy_names[id][2]
60
+ end
61
+ end
62
+ end
63
+
15
64
  ##
16
65
  # Translate an NCBI Assembly Accession (+acc+) to corresponding internal
17
66
  # NCBI ID, with up to +retrials+ retrials if the returned JSON document
@@ -173,6 +222,10 @@ class MiGA::RemoteDataset < MiGA::MiGA
173
222
  def get_ncbi_taxonomy
174
223
  tax_id = get_ncbi_taxid or return
175
224
 
225
+ if self.class.ncbi_taxonomy_dump?
226
+ return self.class.taxonomy_from_ncbi_dump(tax_id)
227
+ end
228
+
176
229
  lineage = { ns: 'ncbi' }
177
230
  doc = MiGA::RemoteDataset.download(:ncbi, :taxonomy, tax_id, :xml)
178
231
  doc.scan(%r{<Taxon>(.*?)</Taxon>}m).map(&:first).each do |i|
data/lib/miga/version.rb CHANGED
@@ -12,7 +12,7 @@ module MiGA
12
12
  # - String indicating release status:
13
13
  # - rc* release candidate, not released as gem
14
14
  # - [0-9]+ stable release, released as gem
15
- VERSION = [1.3, 9, 7].freeze
15
+ VERSION = [1.3, 10, 0].freeze
16
16
 
17
17
  ##
18
18
  # Nickname for the current major.minor version.
@@ -20,7 +20,7 @@ module MiGA
20
20
 
21
21
  ##
22
22
  # Date of the current gem relese.
23
- VERSION_DATE = Date.new(2024, 1, 29)
23
+ VERSION_DATE = Date.new(2024, 1, 31)
24
24
 
25
25
  ##
26
26
  # References of MiGA
@@ -6,9 +6,10 @@
6
6
  #= Load stuff
7
7
  suppressPackageStartupMessages(library(enveomics.R))
8
8
  args <- commandArgs(trailingOnly = FALSE)
9
- enveomics_R <- file.path(dirname(
10
- sub("^--file=", "", args[grep("^--file=", args)])),
11
- "lib", "enveomics.R")
9
+ enveomics_R <- file.path(
10
+ dirname(sub("^--file=", "", args[grep("^--file=", args)])),
11
+ "..", "enveomics.R"
12
+ )
12
13
 
13
14
  #= Generate interface
14
15
  opt <- enve.cliopts(enve.recplot2,
@@ -7,9 +7,10 @@
7
7
 
8
8
  #= Load stuff
9
9
  args <- commandArgs(trailingOnly = F)
10
- enveomics_R <- file.path(dirname(
11
- sub("^--file=", "", args[grep("^--file=", args)])),
12
- "lib", "enveomics.R")
10
+ enveomics_R <- file.path(
11
+ dirname(sub("^--file=", "", args[grep("^--file=", args)])),
12
+ "..", "enveomics.R"
13
+ )
13
14
  source(file.path(enveomics_R, "R", "cliopts.R"))
14
15
  source(file.path(enveomics_R, "R", "autoprune.R"))
15
16
 
@@ -7,20 +7,34 @@
7
7
 
8
8
  #= Load stuff
9
9
  args <- commandArgs(trailingOnly = F)
10
- enveomics_R <- file.path(dirname(
11
- sub("^--file=", "", args[grep("^--file=", args)])),
12
- "lib", "enveomics.R")
10
+ enveomics_R <- file.path(
11
+ dirname(sub("^--file=", "", args[grep("^--file=", args)])),
12
+ "..", "enveomics.R"
13
+ )
13
14
  library(methods)
14
15
  source(file.path(enveomics_R, "R", "cliopts.R"))
15
16
  source(file.path(enveomics_R, "R", "recplot2.R"))
16
17
 
17
18
  #= Generate interface
18
- opt <- enve.cliopts(enve.recplot2.compareIdentities,
19
- file.path(enveomics_R, "man", "enve.recplot2.compareIdentities.Rd"),
20
- positional_arguments=2,
21
- usage="usage: %prog [options] recplot-A.Rdata recplot-B.Rdata",
22
- number=c("pseudocounts", "max.deviation"), ignore=c("x", "y"),
23
- p_desc="Calculates the difference between identity distributions of two recruitment plots.")
19
+ opt <- enve.cliopts(
20
+ enve.recplot2.compareIdentities,
21
+ file.path(enveomics_R, "man", "enve.recplot2.compareIdentities.Rd"),
22
+ positional_arguments = 2,
23
+ usage = "usage: %prog [options] recplot-A.Rdata recplot-B.Rdata",
24
+ number = c("pseudocounts", "max.deviation"),
25
+ ignore = c("x", "y"),
26
+ p_desc = "Calculates the difference between identity distributions of two recruitment plots.",
27
+ o_desc = list(
28
+ method = paste(
29
+ "Distance method to use. This should be (an unambiguous abbreviation of)",
30
+ "one of: \"hellinger\" (Hellinger, 1090, doi:10.1515/crll.1909.136.210),",
31
+ "\"bhattacharyya\" (Bhattacharyya, 1943, Bull. Calcutta Math. Soc. 35),",
32
+ "\"kl\" or \"kullback-leibler\" (Kullback & Leibler, 1951,",
33
+ "doi:10.1214/aoms/1177729694), \"euclidean\"",
34
+ sep = "\n "
35
+ )
36
+ )
37
+ )
24
38
 
25
39
  #= Run it!
26
40
  load(opt$args[1])
@@ -8,9 +8,10 @@
8
8
  #= Load stuff
9
9
  suppressPackageStartupMessages(library(enveomics.R))
10
10
  args <- commandArgs(trailingOnly = F)
11
- enveomics_R <- file.path(dirname(
12
- sub("^--file=", "", args[grep("^--file=", args)])),
13
- "lib", "enveomics.R")
11
+ enveomics_R <- file.path(
12
+ dirname(sub("^--file=", "", args[grep("^--file=", args)])),
13
+ "..", "enveomics.R"
14
+ )
14
15
 
15
16
  #= Generate interface
16
17
  opt <- enve.cliopts(plot.enve.TRIBStest,
@@ -8,9 +8,10 @@
8
8
  #= Load stuff
9
9
  suppressPackageStartupMessages(library(enveomics.R))
10
10
  args <- commandArgs(trailingOnly = F)
11
- enveomics_R <- file.path(dirname(
12
- sub("^--file=", "", args[grep("^--file=", args)])),
13
- "lib", "enveomics.R")
11
+ enveomics_R <- file.path(
12
+ dirname(sub("^--file=", "", args[grep("^--file=", args)])),
13
+ "..", "enveomics.R"
14
+ )
14
15
 
15
16
  #= Generate interface
16
17
  opt <- suppressWarnings(enve.cliopts(enve.tribs,
@@ -7,21 +7,31 @@
7
7
 
8
8
  #= Load stuff
9
9
  args <- commandArgs(trailingOnly = F)
10
- enveomics_R <- file.path(dirname(
11
- sub("^--file=", "", args[grep("^--file=", args)])),
12
- "lib", "enveomics.R")
10
+ enveomics_R <- file.path(
11
+ dirname(sub("^--file=", "", args[grep("^--file=", args)])),
12
+ "..", "enveomics.R"
13
+ )
13
14
  source(file.path(enveomics_R, "R", "cliopts.R"))
14
15
  source(file.path(enveomics_R, "R", "utils.R"))
15
16
  source(file.path(enveomics_R, "R", "barplot.R"))
16
17
 
17
18
  #= Generate interface
18
- opt <- enve.cliopts(enve.barplot,
19
- file.path(enveomics_R, "man", "enve.barplot.Rd"),
20
- positional_arguments=c(1,3),
21
- usage="usage: %prog [options] output.pdf [width height]",
22
- mandatory=c("x"), vectorize=c("sizes","order","col"),
23
- number=c("sizes","order"),
24
- o_desc=list(x="A tab-delimited file containing header (first row) and row names (first column)."))
19
+ opt <- enve.cliopts(
20
+ enve.barplot,
21
+ file.path(enveomics_R, "man", "enve.barplot.Rd"),
22
+ positional_arguments = c(1, 3),
23
+ usage = "usage: %prog [options] output.pdf [width height]",
24
+ mandatory = c("x"),
25
+ vectorize = c("sizes", "order", "col"),
26
+ number = c("sizes", "order"),
27
+ o_desc = list(
28
+ x = paste(
29
+ "A tab-delimited file containing header (first row) and row names",
30
+ "(first column)."
31
+ ),
32
+ order = "If passed, the custom order to be used (as row indexes)"
33
+ )
34
+ )
25
35
 
26
36
  #= Run it!
27
37
  args = as.list(opt$args)
@@ -7,9 +7,10 @@
7
7
 
8
8
  #= Load stuff
9
9
  args <- commandArgs(trailingOnly = F)
10
- enveomics_R <- file.path(dirname(
11
- sub("^--file=", "", args[grep("^--file=", args)])),
12
- "lib", "enveomics.R")
10
+ enveomics_R <- file.path(
11
+ dirname(sub("^--file=", "", args[grep("^--file=", args)])),
12
+ "..", "enveomics.R"
13
+ )
13
14
  source(file.path(enveomics_R, "R", "cliopts.R"))
14
15
  source(file.path(enveomics_R, "R", "df2dist.R"))
15
16
 
@@ -3,26 +3,26 @@
3
3
  #= Load stuff
4
4
  args <- commandArgs(trailingOnly = FALSE)
5
5
  enveomics_R <- file.path(
6
- dirname(sub('^--file=', '', args[grep('^--file=', args)])),
7
- 'lib',
8
- 'enveomics.R'
6
+ dirname(sub("^--file=", "", args[grep("^--file=", args)])),
7
+ "..", "enveomics.R"
9
8
  )
10
- for(file in c('cliopts.R','utils.R','prefscore.R'))
11
- source(file.path(enveomics_R, 'R', file))
9
+ for(file in c("cliopts.R", "utils.R", "prefscore.R")) {
10
+ source(file.path(enveomics_R, "R", file))
11
+ }
12
12
 
13
13
  #= Generate interface
14
14
  opt <- enve.cliopts(
15
15
  enve.prefscore,
16
- file.path(enveomics_R, 'man', 'enve.prefscore.Rd'),
16
+ file.path(enveomics_R, "man", "enve.prefscore.Rd"),
17
17
  positional_arguments = c(1, 4),
18
- usage = 'usage: %prog [options] output.tsv [output.pdf [width height]]',
19
- mandatory = c('x', 'set'),
20
- number = c('signif.thr'),
21
- ignore = c('plot'),
18
+ usage = "usage: %prog [options] output.tsv [output.pdf [width height]]",
19
+ mandatory = c("x", "set"),
20
+ number = c("signif.thr"),
21
+ ignore = c("plot"),
22
22
  o_desc = list(
23
- x = 'A tab-delimited table of presence/absence (1/0) with species as rows and samples as columns.',
24
- set = 'A list of sample names that constitute the test set, one per line',
25
- ignore = 'A list of species to exclude from the analysis, one per line'
23
+ x = "A tab-delimited table of presence/absence (1/0) with species as rows and samples as columns.",
24
+ set = "A list of sample names that constitute the test set, one per line",
25
+ ignore = "A list of species to exclude from the analysis, one per line"
26
26
  )
27
27
  )
28
28
 
@@ -1,127 +1,138 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- #
4
- # @author: Luis M. Rodriguez-R
5
- # @license: Artistic-2.0
6
- #
3
+ $:.push File.expand_path('../lib', __FILE__)
7
4
 
8
- $:.push File.expand_path(File.dirname(__FILE__) + '/lib')
5
+ require 'enveomics_rb/enveomics'
9
6
  require 'enveomics_rb/og'
10
- require 'optparse'
11
7
  require 'json'
8
+ $VERSION = 1.1
12
9
 
13
- o = {q:false, a:false}
14
- ARGV << '-h' if ARGV.size==0
10
+ o = { q: false, a: false }
15
11
  OptionParser.new do |opts|
16
- opts.banner = "
17
- Estimates some descriptive statistics on a set of Orthology Groups (OGs).
12
+ opts.version = $VERSION
13
+ cmd = File.basename($0)
14
+ Enveomics.opt_banner(
15
+ opts,
16
+ 'Estimates some descriptive statistics on a set of Orthology Groups (OGs)',
17
+ "#{cmd} -o file.ogs [options]"
18
+ )
18
19
 
19
- Usage: #{$0} [options]"
20
- opts.separator ""
21
- opts.separator "Mandatory"
22
- opts.on("-o", "--ogs FILE",
23
- "Input file containing the precomputed OGs."){ |v| o[:ogs]=v }
24
- opts.separator ""
25
- opts.separator "Other Options"
26
- opts.on("-j", "--json FILE", "Output file in JSON format."){ |v| o[:json]=v }
27
- opts.on("-t", "--tab FILE","Output file in tabular format."){ |v| o[:tab]=v }
28
- opts.on("-T", "--transposed-tab FILE",
29
- "Output file in transposed tabular format."){ |v| o[:ttab]=v }
30
- opts.on("-a", "--auto", "Run completely quietly (no STDERR or STDOUT)") do
20
+ opts.separator 'Mandatory'
21
+ opts.on(
22
+ '-o', '--ogs FILE',
23
+ 'Input file containing the precomputed OGs',
24
+ 'Supports compression with .gz extension, use - for STDIN'
25
+ ) { |v| o[:ogs] = v }
26
+ opts.separator ''
27
+ opts.separator 'Other Options'
28
+ opts.on(
29
+ '-j', '--json FILE', 'Output file in JSON format',
30
+ 'Supports compression with .gz extension, use - for STDOUT'
31
+ ) { |v| o[:json] = v }
32
+ opts.on(
33
+ '-t', '--tab FILE', 'Output file in tabular format',
34
+ 'Supports compression with .gz extension, use - for STDOUT'
35
+ ) { |v| o[:tab] = v }
36
+ opts.on(
37
+ '-T', '--transposed-tab FILE',
38
+ 'Output file in transposed tabular format',
39
+ 'Supports compression with .gz extension, use - for STDOUT'
40
+ ){ |v| o[:ttab] = v }
41
+ opts.on('-a', '--auto', 'Run completely quietly (no STDERR or STDOUT)') do
31
42
  o[:q] = true
32
43
  o[:a] = true
33
44
  end
34
- opts.on("-q", "--quiet", "Run quietly (no STDERR output)."){ o[:q] = true }
35
- opts.on("-h", "--help", "Display this screen.") do
45
+ opts.on('-q', '--quiet', 'Run quietly (no STDERR output)') { o[:q] = true }
46
+ opts.on('-h', '--help', 'Display this screen') do
36
47
  puts opts
37
48
  exit
38
49
  end
39
- opts.separator ""
50
+ opts.separator ''
40
51
  end.parse!
41
- abort "-o is mandatory" if o[:ogs].nil?
42
52
 
43
- ##### MAIN:
53
+ raise Enveomics::OptionError.new('-i is mandatory') if o[:ogs].nil?
54
+
44
55
  begin
45
56
  # Initialize the collection of OGs.
46
57
  collection = OGCollection.new
47
-
58
+
48
59
  # Read the pre-computed OGs
49
60
  $stderr.puts "Reading pre-computed OGs in '#{o[:ogs]}'." unless o[:q]
50
- f = File.open(o[:ogs], "r")
61
+ f = reader(o[:ogs])
51
62
  h = f.gets.chomp.split /\t/
52
63
  while ln = f.gets
53
64
  collection << OG.new(h, ln.chomp.split(/\t/))
54
65
  end
55
66
  f.close
56
67
  $stderr.puts " Loaded OGs: #{collection.ogs.length}." unless o[:q]
57
-
68
+
58
69
  # Estimate descriptive stats
59
70
  stat_name = {
60
- genomes: "Number of genomes",
61
- pan: "Pangenome (OGs)",
62
- core: "Core genome (OGs)",
63
- core90pc: "OGs in 90% of the genomes",
64
- core80pc: "OGs in 80% of the genomes",
65
- unus: "Unus genome, core genome discarding paralogs (OGs)",
66
- avg: "Average number of OGs in a genome",
67
- avg_pan: "Average genome (OGs) / Pangenome (OGs)",
68
- core_avg: "Core genome (OGs) / Average genome (OGs)",
69
- core_pan: "Core genome (OGs) / Pangenome (OGs)",
70
- ogs_shannon: "Entropy of the OG frequencies (bits)"
71
+ genomes: 'Number of genomes',
72
+ pan: 'Pangenome (OGs)',
73
+ core: 'Core genome (OGs)',
74
+ core90pc: 'OGs in 90% of the genomes',
75
+ core80pc: 'OGs in 80% of the genomes',
76
+ unus: 'Unus genome, core genome discarding paralogs (OGs)',
77
+ avg: 'Average number of OGs in a genome',
78
+ avg_pan: 'Average genome (OGs) / Pangenome (OGs)',
79
+ core_avg: 'Core genome (OGs) / Average genome (OGs)',
80
+ core_pan: 'Core genome (OGs) / Pangenome (OGs)',
81
+ ogs_shannon: 'Entropy of the OG frequencies (bits)'
71
82
  }
72
83
  stats = {}
73
84
  stats[:genomes] = Gene.genomes.length
74
85
  stats[:pan] = collection.ogs.length
75
86
  stats[:core] = collection.ogs.map do |og|
76
87
  (og.genomes.length == Gene.genomes.length) ? 1 : 0
77
- end.inject(0,:+)
88
+ end.inject(0, :+)
78
89
  stats[:core90pc] = collection.ogs.map do |og|
79
- (og.genomes.length >= 0.9*Gene.genomes.length) ? 1 : 0
80
- end.inject(0,:+)
90
+ (og.genomes.length >= 0.9 * Gene.genomes.length) ? 1 : 0
91
+ end.inject(0, :+)
81
92
  stats[:core80pc] = collection.ogs.map do |og|
82
- (og.genomes.length >= 0.8*Gene.genomes.length) ? 1 : 0
83
- end.inject(0,:+)
93
+ (og.genomes.length >= 0.8 * Gene.genomes.length) ? 1 : 0
94
+ end.inject(0, :+)
84
95
  stats[:unus] = collection.ogs.map do |og|
85
96
  (og.genomes.length != Gene.genomes.length) ? 0 :
86
- (og.genes.all?{ |i| i.size==1 }) ? 1 : 0
87
- end.inject(0,:+)
88
- og_genomes = collection.ogs.map{ |og| og.genomes.length }.inject(0,:+)
89
- stats[:avg] = og_genomes.to_f/Gene.genomes.length
90
- stats[:avg_pan] = stats[:avg]/stats[:pan]
91
- stats[:core_avg] = stats[:core].to_f/stats[:avg]
92
- stats[:core_pan] = stats[:core].to_f/stats[:pan]
97
+ (og.genes.all? { |i| i.size == 1 }) ? 1 : 0
98
+ end.inject(0, :+)
99
+ og_genomes = collection.ogs.map { |og| og.genomes.length }.inject(0, :+)
100
+ stats[:avg] = og_genomes.to_f / Gene.genomes.length
101
+ stats[:avg_pan] = stats[:avg] / stats[:pan]
102
+ stats[:core_avg] = stats[:core].to_f / stats[:avg]
103
+ stats[:core_pan] = stats[:core].to_f / stats[:pan]
93
104
  stats[:ogs_shannon] = -1 * collection.ogs.map do |og|
94
- pi = og.genomes.length.to_f/Gene.genomes.length
105
+ pi = og.genomes.length.to_f / Gene.genomes.length
95
106
  pi * Math.log(pi)
96
- end.inject(0.0,:+)
107
+ end.inject(0.0, :+)
97
108
 
98
109
  # Show result
99
- $stderr.puts "Generating reports." unless o[:q]
100
- stats.each_pair{ |k,v| puts " #{stat_name[k]}: #{v}" } unless o[:a]
110
+ $stderr.puts 'Generating reports' unless o[:q]
111
+ stats.each_pair { |k, v| puts " #{stat_name[k]}: #{v}" } unless o[:a]
101
112
 
102
113
  # Save results in JSON
103
114
  unless o[:json].nil?
104
- ohf = File.open(o[:json], "w")
105
- ohf.puts JSON.pretty_generate(stats)
115
+ ohf = writer(o[:json])
116
+ ohf.puts(JSON.pretty_generate(stats))
106
117
  ohf.close
107
118
  end
108
119
 
109
120
  # Save results in tab
110
121
  unless o[:tab].nil?
111
- ohf = File.open(o[:tab], "w")
112
- stats.each_pair{ |k,v| ohf.puts "#{k}\t#{v}" }
122
+ ohf = writer(o[:tab])
123
+ stats.each_pair { |k, v| ohf.puts "#{k}\t#{v}" }
113
124
  ohf.close
114
125
  end
115
126
 
116
127
  # Save results in T(tab)
117
128
  unless o[:ttab].nil?
118
- ohf = File.open(o[:ttab], "w")
129
+ ohf = writer(o[:ttab])
119
130
  ohf.puts stats.keys.join("\t")
120
131
  ohf.puts stats.values.join("\t")
121
132
  ohf.close
122
133
  end
123
134
 
124
- $stderr.puts "Done.\n" unless o[:q]
135
+ $stderr.puts 'Done' unless o[:q]
125
136
  rescue => err
126
137
  $stderr.puts "Exception: #{err}\n\n"
127
138
  err.backtrace.each { |l| $stderr.puts l + "\n" }
@@ -1,5 +1,5 @@
1
1
  Package: enveomics.R
2
- Version: 1.9.0
2
+ Version: 1.9.1
3
3
  Authors@R: c(person("Luis M.", "Rodriguez-R", role = c("aut", "cre"),
4
4
  email = "lmrodriguezr@gmail.com"))
5
5
  Title: Various Utilities for Microbial Genomics and Metagenomics
@@ -28,4 +28,4 @@ Suggests:
28
28
  License: Artistic-2.0
29
29
  LazyData: yes
30
30
  Encoding: UTF-8
31
- RoxygenNote: 7.1.2
31
+ RoxygenNote: 7.3.1
@@ -90,8 +90,8 @@ enve.cliopts <- function(
90
90
 
91
91
  optopt <- list(help = "")
92
92
  if (length(o_desc[[i]]) == 1) optopt$help <- o_desc[[i]]
93
- if (!is.null(f[[i]]) && !suppressWarnings(is.na(f[[i]])) &&
94
- is.logical(f[[i]])){
93
+ if (!is.null(f[[i]])[1] && !suppressWarnings(is.na(f[[i]]))[1] &&
94
+ is.logical(f[[i]])[1]){
95
95
  optopt$opt_str <- paste(ifelse(f[[i]], "--no-", "--"), flag, sep = "")
96
96
  optopt$action <- ifelse(f[[i]], "store_false", "store_true")
97
97
  } else {
@@ -9,8 +9,8 @@ enve.recplot2.findPeaks.mower(
9
9
  min.points = 10,
10
10
  quant.est = c(0.002, 0.998),
11
11
  mlv.opts = list(method = "parzen"),
12
- fitdist.opts.sn = list(distr = "sn", method = "qme", probs = c(0.1, 0.5, 0.8), start
13
- = list(omega = 1, alpha = -1), lower = c(0, -Inf, -Inf)),
12
+ fitdist.opts.sn = list(distr = "sn", method = "qme", probs = c(0.1, 0.5, 0.8), start =
13
+ list(omega = 1, alpha = -1), lower = c(0, -Inf, -Inf)),
14
14
  fitdist.opts.norm = list(distr = "norm", method = "qme", probs = c(0.4, 0.6), start =
15
15
  list(sd = 1), lower = c(0, -Inf)),
16
16
  rm.top = 0.05,
@@ -17,8 +17,8 @@
17
17
  id.lim = range(x$id.breaks),
18
18
  pos.lim = range(x$pos.breaks),
19
19
  pos.units = c("Mbp", "Kbp", "bp"),
20
- mar = list(`1` = c(5, 4, 1, 1) + 0.1, `2` = c(ifelse(any(layout == 1), 1, 5), 4, 4,
21
- 1) + 0.1, `3` = c(5, ifelse(any(layout == 1), 1, 4), 1, 2) + 0.1, `4` =
20
+ mar = list(`1` = c(5, 4, 1, 1) + 0.1, `2` = c(ifelse(any(layout == 1), 1, 5), 4, 4, 1)
21
+ + 0.1, `3` = c(5, ifelse(any(layout == 1), 1, 4), 1, 2) + 0.1, `4` =
22
22
  c(ifelse(any(layout == 1), 1, 5), ifelse(any(layout == 2), 1, 4), 4, 2) + 0.1, `5` =
23
23
  c(5, 3, 4, 1) + 0.1, `6` = c(5, 4, 4, 2) + 0.1),
24
24
  pos.splines = 0,
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: 1.3.9.7
4
+ version: 1.3.10.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: 2024-01-29 00:00:00.000000000 Z
11
+ date: 2024-01-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: daemons
@@ -472,7 +472,6 @@ files:
472
472
  - utils/enveomics/Scripts/in_silico_GA_GI.pl
473
473
  - utils/enveomics/Scripts/lib/data/dupont_2012_essential.hmm.gz
474
474
  - utils/enveomics/Scripts/lib/data/lee_2019_essential.hmm.gz
475
- - utils/enveomics/Scripts/lib/enveomics.R
476
475
  - utils/enveomics/Scripts/lib/enveomics_rb/anir.rb
477
476
  - utils/enveomics/Scripts/lib/enveomics_rb/bm_set.rb
478
477
  - utils/enveomics/Scripts/lib/enveomics_rb/enveomics.rb
@@ -1 +0,0 @@
1
- ../../enveomics.R