bio-gemma-wrapper 0.97.1 → 0.98
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/README.md +7 -2
- data/VERSION +1 -1
- data/bin/gemma-wrapper +31 -10
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d8f36b92e82dda9e1e592724204521f9f4f1a950
|
4
|
+
data.tar.gz: 077abf1c1a704ab93a27627d511aeba0dbf6b4c5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b49bb2c9362eb7babd2cf20f640fc7806719a8c82e31f93a97b4517d5c2777bd4ae55b9e5a1fd37df5f22e63e2673fa01ca4afbc4e07de6955391d77bd7f90fb
|
7
|
+
data.tar.gz: 863ef847e4ddff6b544a733e001bcd2291c73ab394573a299d54a8f2581066fb423b40be052ce6a440c1daffbd6ddb7500c5f01b7ce2de0e38e4277c8ae9e53e
|
data/README.md
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
[](https://badge.fury.io/rb/bio-gemma-wrapper)
|
2
|
+
|
1
3
|
# GEMMA wrapper caches K between runs with LOCO support
|
2
4
|
|
3
5
|
![Genetic associations identified in CFW mice using GEMMA (Parker et al,
|
@@ -39,10 +41,12 @@ Invoke the tool with
|
|
39
41
|
|
40
42
|
gemma-wrapper --help
|
41
43
|
|
42
|
-
and it will render
|
44
|
+
and it will render something like
|
43
45
|
|
44
46
|
```
|
45
47
|
Usage: gemma-wrapper [options] -- [gemma-options]
|
48
|
+
--permutate n Permutate # times by shuffling phenotypes
|
49
|
+
--permute-phenotypes filen Phenotypes to be shuffled in permutations
|
46
50
|
--loco [x,y,1,2,3...] Run full LOCO
|
47
51
|
--input filen JSON input variables (used for LOCO)
|
48
52
|
--cache-dir path Use a cache directory
|
@@ -95,7 +99,8 @@ Run it twice to see
|
|
95
99
|
|
96
100
|
gemma-wrapper computes the unique HASH value over the command
|
97
101
|
line switches passed into GEMMA as well as the contents of the files
|
98
|
-
passed in (here the genotype and phenotype files
|
102
|
+
passed in (here the genotype and phenotype files - actually it ignores the phenotype with K because
|
103
|
+
GEMMA always computes the same K).
|
99
104
|
|
100
105
|
You can also get JSON output on STDOUT by providing the --json switch
|
101
106
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.98
|
data/bin/gemma-wrapper
CHANGED
@@ -35,9 +35,13 @@ GEMMA wrapper example:
|
|
35
35
|
-lmm 2 -maf 0.1 \\
|
36
36
|
-debug > GWA.json
|
37
37
|
|
38
|
+
Gemma gets used from the path. You can override by setting
|
39
|
+
|
40
|
+
env GEMMA_COMMAND=path/bin/gemma gemma-wrapper ...
|
41
|
+
|
38
42
|
"
|
39
43
|
# These are used for testing compatibility
|
40
|
-
GEMMA_V_MAJOR =
|
44
|
+
GEMMA_V_MAJOR = 98
|
41
45
|
GEMMA_V_MINOR = 0
|
42
46
|
|
43
47
|
basepath = File.dirname(File.dirname(__FILE__))
|
@@ -61,6 +65,7 @@ if not gemma_command
|
|
61
65
|
end
|
62
66
|
end
|
63
67
|
|
68
|
+
|
64
69
|
require 'fileutils'
|
65
70
|
require 'optparse'
|
66
71
|
require 'tmpdir'
|
@@ -76,13 +81,13 @@ options = { show_help: false, source: 'https://github.com/genetics-statistics/ge
|
|
76
81
|
opts = OptionParser.new do |o|
|
77
82
|
o.banner = "\nUsage: #{File.basename($0)} [options] -- [gemma-options]"
|
78
83
|
|
79
|
-
o.on('--permutate n', Integer, 'Permutate by shuffling phenotypes') do |lst|
|
84
|
+
o.on('--permutate n', Integer, 'Permutate # times by shuffling phenotypes') do |lst|
|
80
85
|
options[:permutate] = lst
|
81
86
|
options[:force] = true
|
82
87
|
end
|
83
88
|
|
84
|
-
o.on('--phenotypes filen',String, 'Phenotypes to be shuffled in permutations') do |phenotypes|
|
85
|
-
options[:
|
89
|
+
o.on('--permute-phenotypes filen',String, 'Phenotypes to be shuffled in permutations') do |phenotypes|
|
90
|
+
options[:permute_phenotypes] = phenotypes
|
86
91
|
raise "Phenotype input file #{phenotypes} does not exist" if !File.exist?(phenotypes)
|
87
92
|
end
|
88
93
|
|
@@ -176,6 +181,7 @@ info.call GEMMA_K_BANNER
|
|
176
181
|
|
177
182
|
# Check gemma version
|
178
183
|
GEMMA_COMMAND=options[:gemma_command]
|
184
|
+
|
179
185
|
gemma_version_header = `#{GEMMA_COMMAND}`.split("\n").grep(/GEMMA|Version/)[0].strip
|
180
186
|
info.call "Using ",gemma_version_header,"\n"
|
181
187
|
gemma_version = gemma_version_header.split(/[,\s]+/)[1]
|
@@ -197,12 +203,26 @@ if RUBY_VERSION =~ /^1/
|
|
197
203
|
warning "runs on Ruby 2.x only\n"
|
198
204
|
end
|
199
205
|
|
206
|
+
DO_COMPUTE_KINSHIP = gemma_args.include?("-gk")
|
207
|
+
DO_COMPUTE_GWA = !DO_COMPUTE_KINSHIP
|
208
|
+
|
200
209
|
# ---- Compute HASH on inputs
|
201
210
|
hashme = []
|
202
211
|
geno_idx = gemma_args.index '-g'
|
203
|
-
raise "Expected GEMMA -g switch" if geno_idx == nil
|
204
|
-
|
205
|
-
hashme
|
212
|
+
raise "Expected GEMMA -g genotype file switch" if geno_idx == nil
|
213
|
+
pheno_idx = gemma_args.index '-p'
|
214
|
+
hashme =
|
215
|
+
if DO_COMPUTE_KINSHIP and pheno_idx != nil
|
216
|
+
p [pheno_idx,gemma_args[pheno_idx+2..-1]]
|
217
|
+
gemma_args[0..pheno_idx-1] + gemma_args[pheno_idx+2..-1]
|
218
|
+
else
|
219
|
+
gemma_args
|
220
|
+
end
|
221
|
+
|
222
|
+
if DO_COMPUTE_GWA
|
223
|
+
raise "Did not expect GEMMA -p phenotype file switch" if pheno_idx
|
224
|
+
hashme += ['-p', options[:permute_phenotypes]] if options[:permute_phenotypes]
|
225
|
+
end
|
206
226
|
|
207
227
|
require 'digest/sha1'
|
208
228
|
debug.call "Hashing on ",hashme,"\n"
|
@@ -302,7 +322,7 @@ end
|
|
302
322
|
# ---- Run GWA
|
303
323
|
gwas = lambda do | chr, kfn, pfn |
|
304
324
|
record[:type] = "GWA"
|
305
|
-
error.call "Do not use the GEMMA -k switch with gemma-wrapper!" if GEMMA_ARGS.include? '-k' # K is automatic
|
325
|
+
error.call "Do not use the GEMMA -k switch with gemma-wrapper - it is automatic!" if GEMMA_ARGS.include? '-k' # K is automatic
|
306
326
|
hashi, cache_hit = cache.call chr,".assoc.txt"
|
307
327
|
if not cache_hit
|
308
328
|
args = [ '-k', kfn, '-o', hashi ]
|
@@ -313,7 +333,8 @@ gwas = lambda do | chr, kfn, pfn |
|
|
313
333
|
end
|
314
334
|
|
315
335
|
LOCO = options[:loco]
|
316
|
-
if GEMMA_ARGS.include? '-gk'
|
336
|
+
# if GEMMA_ARGS.include? '-gk'
|
337
|
+
if DO_COMPUTE_KINSHIP
|
317
338
|
# compute K
|
318
339
|
info.call LOCO
|
319
340
|
if LOCO != nil
|
@@ -325,7 +346,7 @@ if GEMMA_ARGS.include? '-gk'
|
|
325
346
|
kinship.call # no LOCO
|
326
347
|
end
|
327
348
|
else
|
328
|
-
#
|
349
|
+
# DO_COMPUTE_GWA
|
329
350
|
json_in = JSON.parse(File.read(options[:input]))
|
330
351
|
raise "JSON problem, file #{options[:input]} is not -gk derived" if json_in["type"] != "K"
|
331
352
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bio-gemma-wrapper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: '0.98'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pjotr Prins
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-11-19 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: GEMMA wrapper adds LOCO and permutation support. Also caches K between
|
14
14
|
runs with LOCO support
|