miga-base 1.3.21.5 → 1.3.22.2
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.
- checksums.yaml +4 -4
- data/lib/miga/cli/action/wf.rb +8 -1
- data/lib/miga/daemon.rb +11 -5
- data/lib/miga/project/base.rb +9 -2
- data/lib/miga/project/result.rb +14 -11
- data/lib/miga/version.rb +2 -2
- data/utils/distance/commands.rb +36 -31
- data/utils/subclades.R +3 -2
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 5e4cafb2b821ae172aa9537d5c71c1cafddd6ed73adfa993da1267876dddaedf
         | 
| 4 | 
            +
              data.tar.gz: 9fe748cc53152b70fe03a3d85bcf56b517fdae772c7eb1a96329394253f5ca78
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 64c9508befc2bc9c7bf35041ab8ab2dc90aca74e38d80fc401dd6135e9a703135456a8cde5b88e61918007b6249b9e923b279ade15ade5c63ad2799d27b0350f
         | 
| 7 | 
            +
              data.tar.gz: 3a74e3c63ca8332c16d5d3583890f6f4e47d8b0afd4cd178046877164083a73d918b37c04a8a8086c6c31d1b55efdf5bc913aa890869220ae5f2e68f8a976a1d
         | 
    
        data/lib/miga/cli/action/wf.rb
    CHANGED
    
    | @@ -124,6 +124,13 @@ module MiGA::Cli::Action::Wf | |
| 124 124 | 
             
                  cli[:aai_p] = 'diamond'
         | 
| 125 125 | 
             
                  cli[:ani_p] = 'fastani'
         | 
| 126 126 | 
             
                end
         | 
| 127 | 
            +
                opt.on(
         | 
| 128 | 
            +
                  '--only-ani', 'Alias to: --haai-p no --aai-p no',
         | 
| 129 | 
            +
                  'Use only for collections with expected AAI around or above 85%'
         | 
| 130 | 
            +
                ) do
         | 
| 131 | 
            +
                  cli[:haai_p] = 'no'
         | 
| 132 | 
            +
                  cli[:aai_p] = 'no'
         | 
| 133 | 
            +
                end
         | 
| 127 134 | 
             
                opt.on(
         | 
| 128 135 | 
             
                  '--haai-p STRING',
         | 
| 129 136 | 
             
                  'hAAI search engine. One of: blast+, fastaai, blat, diamond, fastaai, no',
         | 
| @@ -131,7 +138,7 @@ module MiGA::Cli::Action::Wf | |
| 131 138 | 
             
                ) { |v| cli[:haai_p] = v }
         | 
| 132 139 | 
             
                opt.on(
         | 
| 133 140 | 
             
                  '--aai-p STRING',
         | 
| 134 | 
            -
                  'AAI search engine. One of: blast+, blat, diamond (default)'
         | 
| 141 | 
            +
                  'AAI search engine. One of: blast+, blat, diamond (default), no'
         | 
| 135 142 | 
             
                ) { |v| cli[:aai_p] = v }
         | 
| 136 143 | 
             
                opt.on(
         | 
| 137 144 | 
             
                  '--ani-p STRING',
         | 
    
        data/lib/miga/daemon.rb
    CHANGED
    
    | @@ -183,7 +183,7 @@ class MiGA::Daemon < MiGA::MiGA | |
| 183 183 | 
             
              end
         | 
| 184 184 |  | 
| 185 185 | 
             
              ##
         | 
| 186 | 
            -
              # Traverse datasets, and returns boolean indicating if  | 
| 186 | 
            +
              # Traverse datasets, and returns boolean indicating if any reference
         | 
| 187 187 | 
             
              # datasets are incomplete
         | 
| 188 188 | 
             
              def check_datasets
         | 
| 189 189 | 
             
                l_say(2, 'Checking datasets')
         | 
| @@ -196,11 +196,17 @@ class MiGA::Daemon < MiGA::MiGA | |
| 196 196 | 
             
                  queue_job(:d, ds)
         | 
| 197 197 | 
             
                end
         | 
| 198 198 | 
             
                unless show_log?
         | 
| 199 | 
            +
                  @_check_datasets_reported_done ||= false
         | 
| 199 200 | 
             
                  n = project.dataset_names.count
         | 
| 200 | 
            -
                  k = jobs_to_run | 
| 201 | 
            -
                  k  | 
| 202 | 
            -
             | 
| 203 | 
            -
             | 
| 201 | 
            +
                  k = (jobs_to_run + jobs_running).select { |i| !i[:ds].nil? }.size
         | 
| 202 | 
            +
                  if k > 0
         | 
| 203 | 
            +
                    advance('Datasets:', n - k, n, false)
         | 
| 204 | 
            +
                    @_check_datasets_reported_done = false
         | 
| 205 | 
            +
                  elsif !@_check_datasets_reported_done
         | 
| 206 | 
            +
                    advance('Datasets:', n, n, false)
         | 
| 207 | 
            +
                    miga_say
         | 
| 208 | 
            +
                    @_check_datasets_reported_done = true
         | 
| 209 | 
            +
                  end
         | 
| 204 210 | 
             
                end
         | 
| 205 211 | 
             
                o
         | 
| 206 212 | 
             
              end
         | 
    
        data/lib/miga/project/base.rb
    CHANGED
    
    | @@ -142,7 +142,7 @@ module MiGA::Project::Base | |
| 142 142 | 
             
                },
         | 
| 143 143 | 
             
                aai_p: {
         | 
| 144 144 | 
             
                  desc: 'Value of aai.rb -p on AAI', default: 'diamond', type: String,
         | 
| 145 | 
            -
                  in: %w[blast+ blast blat diamond]
         | 
| 145 | 
            +
                  in: %w[blast+ blast blat diamond no]
         | 
| 146 146 | 
             
                },
         | 
| 147 147 | 
             
                ani_p: {
         | 
| 148 148 | 
             
                  desc: 'Value of ani.rb -p on ANI', default: 'fastani', type: String,
         | 
| @@ -154,7 +154,14 @@ module MiGA::Project::Base | |
| 154 154 | 
             
                },
         | 
| 155 155 | 
             
                aai_save_rbm: {
         | 
| 156 156 | 
             
                  desc: 'Should RBMs be saved for OGS analysis?',
         | 
| 157 | 
            -
                  default: proc  | 
| 157 | 
            +
                  default: proc do |project|
         | 
| 158 | 
            +
                    project.clade? && project.option(:aai_p) != 'no'
         | 
| 159 | 
            +
                  end,
         | 
| 160 | 
            +
                  in: [true, false]
         | 
| 161 | 
            +
                },
         | 
| 162 | 
            +
                run_ogs: {
         | 
| 163 | 
            +
                  desc: 'Should orthologous groups be estimated?',
         | 
| 164 | 
            +
                  default: proc { |project| project.option(:aai_save_rbm) },
         | 
| 158 165 | 
             
                  in: [true, false]
         | 
| 159 166 | 
             
                },
         | 
| 160 167 | 
             
                ogs_identity: {
         | 
    
        data/lib/miga/project/result.rb
    CHANGED
    
    | @@ -31,9 +31,11 @@ module MiGA::Project::Result | |
| 31 31 | 
             
              ##
         | 
| 32 32 | 
             
              # Is this +task+ to be bypassed?
         | 
| 33 33 | 
             
              def ignore_task?(task)
         | 
| 34 | 
            -
                 | 
| 34 | 
            +
                opt = "run_#{task}"
         | 
| 35 | 
            +
                return true if metadata[opt] == false
         | 
| 36 | 
            +
                return true if option?(opt) && option(opt) == false
         | 
| 35 37 |  | 
| 36 | 
            -
                !clade? && @@INCLADE_TASKS.include?(task) && metadata[ | 
| 38 | 
            +
                !clade? && @@INCLADE_TASKS.include?(task) && metadata[opt] != true
         | 
| 37 39 | 
             
              end
         | 
| 38 40 |  | 
| 39 41 | 
             
              ##
         | 
| @@ -72,20 +74,21 @@ module MiGA::Project::Result | |
| 72 74 | 
             
              ##
         | 
| 73 75 | 
             
              # Add result type +:clade_finding+ at +base+ (no +_opts+ supported).
         | 
| 74 76 | 
             
              def add_result_clade_finding(base, _opts)
         | 
| 77 | 
            +
                r = nil
         | 
| 75 78 | 
             
                if result_files_exist?(base, %w[.empty])
         | 
| 76 79 | 
             
                  r = MiGA::Result.new("#{base}.json")
         | 
| 77 80 | 
             
                  r.add_file(:empty, 'miga-project.empty')
         | 
| 78 | 
            -
             | 
| 79 | 
            -
             | 
| 80 | 
            -
             | 
| 81 | 
            -
             | 
| 82 | 
            -
             | 
| 83 | 
            -
                          | 
| 84 | 
            -
             | 
| 85 | 
            -
                   | 
| 81 | 
            +
                else
         | 
| 82 | 
            +
                  return nil unless result_files_exist?(base, %w[.proposed-clades])
         | 
| 83 | 
            +
                  unless clade? ||
         | 
| 84 | 
            +
                         result_files_exist?(
         | 
| 85 | 
            +
                           base, %w[.pdf .classif .medoids .class.tsv .class.nwk]
         | 
| 86 | 
            +
                         )
         | 
| 87 | 
            +
                    return nil
         | 
| 88 | 
            +
                  end
         | 
| 89 | 
            +
                  r = add_result_iter_clades(base)
         | 
| 86 90 | 
             
                end
         | 
| 87 91 |  | 
| 88 | 
            -
                r = add_result_iter_clades(base)
         | 
| 89 92 | 
             
                r.add_file(:aai_dist_rds, 'miga-project.dist.rds')
         | 
| 90 93 | 
             
                r.add_file(:aai_dist_rda, 'miga-project.dist.rda')
         | 
| 91 94 | 
             
                r.add_file(:aai_tree,     'miga-project.aai.nwk')
         | 
    
        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,  | 
| 15 | 
            +
              VERSION = [1.3, 22, 2].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(2025,  | 
| 23 | 
            +
              VERSION_DATE = Date.new(2025, 2, 20)
         | 
| 24 24 |  | 
| 25 25 | 
             
              ##
         | 
| 26 26 | 
             
              # References of MiGA
         | 
    
        data/utils/distance/commands.rb
    CHANGED
    
    | @@ -60,10 +60,15 @@ module MiGA::DistanceRunner::Commands | |
| 60 60 | 
             
              # Note that ANI values may be returned for lower (or failing) AAIs if the
         | 
| 61 61 | 
             
              # value is already stored in the database
         | 
| 62 62 | 
             
              def ani_after_aai(targets, aai_limit = 85.0)
         | 
| 63 | 
            -
                 | 
| 64 | 
            -
             | 
| 65 | 
            -
             | 
| 66 | 
            -
             | 
| 63 | 
            +
                sbj =
         | 
| 64 | 
            +
                  if opts[:aai_p] == 'no'
         | 
| 65 | 
            +
                    # If we skip AAI, run ANI for all targets
         | 
| 66 | 
            +
                    targets
         | 
| 67 | 
            +
                  else
         | 
| 68 | 
            +
                    # Otherwise, run AAI and select targets with AAI ≥ aai_limit
         | 
| 69 | 
            +
                    aai = aai(targets)
         | 
| 70 | 
            +
                    aai.each_with_index.map { |i, k| targets[k] if i&.> aai_limit }.compact
         | 
| 71 | 
            +
                  end
         | 
| 67 72 |  | 
| 68 73 | 
             
                # Run ANI
         | 
| 69 74 | 
             
                ani(sbj) unless sbj.empty?
         | 
| @@ -110,37 +115,37 @@ module MiGA::DistanceRunner::Commands | |
| 110 115 | 
             
                f1 = tmp_file('largecontigs.fa')
         | 
| 111 116 | 
             
                return unless File.size?(f1)
         | 
| 112 117 |  | 
| 113 | 
            -
                #  | 
| 114 | 
            -
                 | 
| 115 | 
            -
             | 
| 116 | 
            -
             | 
| 117 | 
            -
             | 
| 118 | 
            -
             | 
| 119 | 
            -
             | 
| 120 | 
            -
             | 
| 121 | 
            -
             | 
| 118 | 
            +
                # Select targets with assemblies
         | 
| 119 | 
            +
                target_asm =
         | 
| 120 | 
            +
                  targets.map do |target|
         | 
| 121 | 
            +
                    target&.result(:assembly)&.file_path(:largecontigs)
         | 
| 122 | 
            +
                  end.compact
         | 
| 123 | 
            +
             | 
| 124 | 
            +
                # Run FastANI in batches of up to 100 genomes
         | 
| 125 | 
            +
                until target_asm.empty?
         | 
| 126 | 
            +
                  File.open(f2 = tmp_file, 'w') do |fh|
         | 
| 127 | 
            +
                    target_asm.shift(100).each { |i| fh.puts i }
         | 
| 122 128 | 
             
                  end
         | 
| 123 | 
            -
             | 
| 124 | 
            -
             | 
| 125 | 
            -
             | 
| 126 | 
            -
                           | 
| 127 | 
            -
                          -o "#{f3 = tmp_file}"
         | 
| 128 | 
            -
                        CMD
         | 
| 129 | 
            +
                  run_cmd <<~CMD
         | 
| 130 | 
            +
                            fastANI -q "#{f1}" --rl "#{f2}" -t #{opts[:thr]} \
         | 
| 131 | 
            +
                            -o "#{f3 = tmp_file}"
         | 
| 132 | 
            +
                          CMD
         | 
| 129 133 |  | 
| 130 | 
            -
             | 
| 131 | 
            -
             | 
| 132 | 
            -
             | 
| 133 | 
            -
             | 
| 134 | 
            -
             | 
| 135 | 
            -
             | 
| 136 | 
            -
             | 
| 137 | 
            -
             | 
| 134 | 
            +
                  # Retrieve resulting data and save to DB
         | 
| 135 | 
            +
                  data = {}
         | 
| 136 | 
            +
                  File.open(f3, 'r') do |fh|
         | 
| 137 | 
            +
                    fh.each do |ln|
         | 
| 138 | 
            +
                      row = ln.chomp.split("\t")
         | 
| 139 | 
            +
                      n2 = File.basename(row[1], '.gz')
         | 
| 140 | 
            +
                      n2 = File.basename(n2, '.LargeContigs.fna')
         | 
| 141 | 
            +
                      data[n2] = [row[2].to_f, 0.0, row[3].to_i, row[4].to_i]
         | 
| 142 | 
            +
                    end
         | 
| 138 143 | 
             
                  end
         | 
| 139 | 
            -
             | 
| 140 | 
            -
                batch_data_to_db(:ani, data)
         | 
| 144 | 
            +
                  batch_data_to_db(:ani, data)
         | 
| 141 145 |  | 
| 142 | 
            -
             | 
| 143 | 
            -
             | 
| 146 | 
            +
                  # Cleanup
         | 
| 147 | 
            +
                  [f2, f3].each { |i| File.unlink(i) }
         | 
| 148 | 
            +
                end
         | 
| 144 149 | 
             
              end
         | 
| 145 150 |  | 
| 146 151 | 
             
              ##
         | 
    
        data/utils/subclades.R
    CHANGED
    
    | @@ -226,8 +226,9 @@ generate_empty_files <- function (out_base) { | |
| 226 226 | 
             
              plot(1, t = "n", axes = F)
         | 
| 227 227 | 
             
              legend("center", "No data", bty = "n")
         | 
| 228 228 | 
             
              dev.off()
         | 
| 229 | 
            -
              file.create( | 
| 230 | 
            -
              file.create( | 
| 229 | 
            +
              file.create(paste0(out_base, ".1.classif"))
         | 
| 230 | 
            +
              file.create(paste0(out_base, ".1.medoids"))
         | 
| 231 | 
            +
              file.create(paste0(out_base, ".empty"))
         | 
| 231 232 | 
             
            }
         | 
| 232 233 |  | 
| 233 234 | 
             
            write_text_report <- function (out_base, ani.d, ani.medoids, ani.types) {
         | 
    
        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. | 
| 4 | 
            +
              version: 1.3.22.2
         | 
| 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: 2025- | 
| 11 | 
            +
            date: 2025-02-20 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: daemons
         |