miga-base 0.7.15.2 → 0.7.16.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: 7fa6d4c21b92b81654b146b7f6a25cbe945cadd5a84bd5ff5e2833f90d45a403
4
- data.tar.gz: e2ec20139cf6ad565fbdb7419abc84f4083cc0b2f0867c70baeee2adaaaca488
3
+ metadata.gz: 2ee2f247a9f26ddbf2fcf0fc85bb0ed51d0d4980e2e40297449665a0befca102
4
+ data.tar.gz: 9d2ea26b71d226f0cbddebb214912a82b432886efb72e8bb6523b4b2f5aa588c
5
5
  SHA512:
6
- metadata.gz: 07f5dac2c90e9c9273730c441d3ce9167e02be66d29a144457efd99e30c3010d8509d2f74171694addad1c5b83db40877a51ac2befbd77961dcbfe5b0a9e9491
7
- data.tar.gz: 0e4c33eb179934a09b37cfcb0323996675e9c46762d765442fc551cefb005a771ed3a82c8895302bb82d454ffc09927670b84ab7d669c1de5b0ee3f0774c09d7
6
+ metadata.gz: 673a1f46b1e34e14b58a434be79ec92c2ed31e7225004bd3fe08daebdf1362603353b5dd8473de8923583ed9819b6fe54578a3e18ea33dd51a54e2fad0bb0755
7
+ data.tar.gz: 23e44862a13fa293ea72d2260fc9676e2438b4c0c1725c64863a23c144d9b8a27dfefa62da6234fc0e86a8e59ada90498801a5609baaf07357293807801ccf60
@@ -37,6 +37,7 @@ class MiGA::Cli::Action::Doctor < MiGA::Cli::Action
37
37
  @@OPERATIONS = {
38
38
  status: ['status', 'Update metadata status of all datasets'],
39
39
  db: ['databases', 'Check integrity of database files'],
40
+ bidir: ['bidirectional', 'Check distances are bidirectional'],
40
41
  dist: ['distances', 'Check distance summary tables'],
41
42
  files: ['files', 'Check for outdated files'],
42
43
  cds: ['cds', 'Check for gzipped genes and proteins'],
@@ -85,6 +86,24 @@ class MiGA::Cli::Action::Doctor < MiGA::Cli::Action
85
86
  cli.say
86
87
  end
87
88
 
89
+ ##
90
+ # Perform bidirectional operation with MiGA::Cli +cli+
91
+ def check_bidir(cli)
92
+ cli.say 'Checking that reference distances are bidirectional'
93
+ ref_ds = cli.load_project.each_dataset.select(&:ref?)
94
+ ref_names = ref_ds.map(&:name)
95
+ n, k = ref_ds.size, 0
96
+ ref_ds.each do |d|
97
+ cli.advance('Datasets:', k += 1, n, false)
98
+ saved = saved_targets(d)
99
+ next if saved.nil?
100
+
101
+ to_save = ref_names - saved
102
+ to_save.each { |k| save_bidirectional(cli.load_project.dataset(k), d) }
103
+ end
104
+ cli.say
105
+ end
106
+
88
107
  ##
89
108
  # Perform distances operation with MiGA::Cli +cli+
90
109
  def check_dist(cli)
@@ -99,4 +99,46 @@ module MiGA::Cli::Action::Doctor::Base
99
99
  cli.say '- Removing tables, recompute'
100
100
  res.remove!
101
101
  end
102
+
103
+ ##
104
+ # Returns all targets identified by AAI
105
+ def saved_targets(dataset)
106
+ # Return nil if distance or database are not retrievable
107
+ dist = dataset.result(:distances) or return
108
+ path = dist.file_path(:aai_db) or return
109
+
110
+ o = []
111
+ SQLite3::Database.new(path) do |conn|
112
+ o = conn.execute('select seq2 from aai').map(&:first)
113
+ end
114
+ o
115
+ end
116
+
117
+ ##
118
+ # Saves all the distance estimates in +a+ -> +b+ into the +b+ databases
119
+ # (as +b+ -> +a+), where both +a+ and +b+ are MiGA::Dataset objects
120
+ def save_bidirectional(a, b)
121
+ each_database_file(a) do |db_file, metric, result|
122
+ data = nil
123
+ SQLite3::Database.new(db_file) do |conn|
124
+ data =
125
+ conn.execute(
126
+ "select seq1, seq2, #{metric}, sd, n, omega " +
127
+ "from #{metric} where seq2 = ? limit 1", b.name
128
+ ).first
129
+ end
130
+ next if data.nil? || data.empty?
131
+
132
+ db_file_b = File.join(File.dirname(db_file), "#{b.name}.db")
133
+ next unless File.exist?(db_file_b)
134
+
135
+ data[0], data[1] = data[1], data[0]
136
+ SQLite3::Database.new(db_file_b) do |conn|
137
+ conn.execute(
138
+ "insert into #{metric} (seq1, seq2, #{metric}, sd, n, omega) " +
139
+ "values(?, ?, ?, ?, ?, ?)", data
140
+ )
141
+ end
142
+ end
143
+ end
102
144
  end
@@ -8,7 +8,7 @@ module MiGA
8
8
  # - Float representing the major.minor version.
9
9
  # - Integer representing gem releases of the current version.
10
10
  # - Integer representing minor changes that require new version number.
11
- VERSION = [0.7, 15, 2]
11
+ VERSION = [0.7, 16, 0]
12
12
 
13
13
  ##
14
14
  # Nickname for the current major.minor version.
@@ -16,7 +16,7 @@ module MiGA
16
16
 
17
17
  ##
18
18
  # Date of the current gem release.
19
- VERSION_DATE = Date.new(2020, 8, 12)
19
+ VERSION_DATE = Date.new(2020, 10, 13)
20
20
 
21
21
  ##
22
22
  # Reference of MiGA.
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.7.15.2
4
+ version: 0.7.16.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-08-12 00:00:00.000000000 Z
11
+ date: 2020-10-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: daemons