@@ -8,46 +8,18 @@ nextflow_process {
88 tag "modules_nfcore"
99 tag "gcta"
1010 tag "gcta/removerelatedsubjects"
11- tag "gcta/makegrmpart"
12-
13- setup {
14- run("GCTA_MAKEGRMPART", alias: "GCTA_MAKEGRMPART_DENSE") {
15- script "../../makegrmpart/main.nf"
16- process {
17- """
18- file('plink_simulated.mbfile').text = 'plink_simulated\\n'
19-
20- input[0] = [
21- [ id:'plink_simulated_dense', part_gcta_job:1, nparts_gcta:1 ],
22- file('plink_simulated.mbfile'),
23- [
24- file(params.modules_testdata_base_path + 'genomics/homo_sapiens/popgen/plink_simulated.bed', checkIfExists: true)
25- ],
26- [
27- file(params.modules_testdata_base_path + 'genomics/homo_sapiens/popgen/plink_simulated.bim', checkIfExists: true)
28- ],
29- [
30- file(params.modules_testdata_base_path + 'genomics/homo_sapiens/popgen/plink_simulated.fam', checkIfExists: true)
31- ]
32- ]
33- input[1] = [[ id:'all_variants' ], []]
34- """
35- }
36- }
37- }
3811
3912 test("homo_sapiens popgen - remove related individuals from dense GRM") {
4013 config "./nextflow.config"
4114
4215 when {
4316 process {
4417 """
45- dense_grm = GCTA_MAKEGRMPART_DENSE.out.grm_files.map { meta, grm_id, grm_bin, grm_n_bin ->
46- def prefix = meta.id + '.part_' + meta.nparts_gcta + '_' + meta.part_gcta_job
47- [[ id:prefix ], grm_id, grm_bin, grm_n_bin]
48- }
18+ file('tiny_dense.grm.id').text = 'sample1 sample1\\n'
19+ file('tiny_dense.grm.bin').bytes = java.nio.ByteBuffer.allocate(4).order(java.nio.ByteOrder.LITTLE_ENDIAN).putFloat(1.0f).array()
20+ file('tiny_dense.grm.N.bin').bytes = java.nio.ByteBuffer.allocate(4).order(java.nio.ByteOrder.LITTLE_ENDIAN).putFloat(100.0f).array()
4921
50- input[0] = dense_grm
22+ input[0] = [[ id:'tiny_dense' ], file('tiny_dense.grm.id'), file('tiny_dense.grm.bin'), file('tiny_dense.grm.N.bin')]
5123 """
5224 }
5325 }
@@ -57,7 +29,15 @@ nextflow_process {
5729 { assert process.success },
5830 { assert process.out.grm_files.size() == 1 },
5931 { assert process.out.keep_file.size() == 1 },
60- { assert process.out.grm_files.get(0).get(0).id == "plink_simulated_dense.part_1_1" },
32+ { assert process.out.grm_files.get(0).get(0).id == "tiny_dense" },
33+ {
34+ def grm_row = process.out.grm_files.get(0)
35+ def expected_prefix = "${grm_row.get(0).id}_unrel05"
36+ assert file(grm_row.get(1)).name == "${expected_prefix}.grm.id"
37+ assert file(grm_row.get(2)).name == "${expected_prefix}.grm.bin"
38+ assert file(grm_row.get(3)).name == "${expected_prefix}.grm.N.bin"
39+ assert file(process.out.keep_file.get(0).get(1)).name == "${expected_prefix}.grm.id"
40+ },
6141 {
6242 assert snapshot(
6343 process.out.grm_files,
@@ -69,27 +49,83 @@ nextflow_process {
6949 }
7050 }
7151
52+ test("homo_sapiens popgen - remove related individuals fails when meta.id is not GRM basename") {
53+ config "./nextflow.config"
54+
55+ when {
56+ process {
57+ """
58+ file('tiny_dense.grm.id').text = 'sample1 sample1\\n'
59+ file('tiny_dense.grm.bin').bytes = java.nio.ByteBuffer.allocate(4).order(java.nio.ByteOrder.LITTLE_ENDIAN).putFloat(1.0f).array()
60+ file('tiny_dense.grm.N.bin').bytes = java.nio.ByteBuffer.allocate(4).order(java.nio.ByteOrder.LITTLE_ENDIAN).putFloat(100.0f).array()
61+
62+ input[0] = [[ id:'tiny_dense_mismatched' ], file('tiny_dense.grm.id'), file('tiny_dense.grm.bin'), file('tiny_dense.grm.N.bin')]
63+ """
64+ }
65+ }
66+
67+ then {
68+ assertAll(
69+ { assert !process.success },
70+ { assert process.exitStatus != 0 }
71+ )
72+ }
73+ }
74+
75+ test("homo_sapiens popgen - remove related individuals fails for malformed GRM tuple") {
76+ config "./nextflow.config"
77+
78+ when {
79+ process {
80+ """
81+ file('tiny_dense.grm.id').text = 'sample1 sample1\\n'
82+ file('tiny_dense.grm.bin').bytes = java.nio.ByteBuffer.allocate(4).order(java.nio.ByteOrder.LITTLE_ENDIAN).putFloat(1.0f).array()
83+
84+ input[0] = [[ id:'tiny_dense' ], file('tiny_dense.grm.id'), file('tiny_dense.grm.bin')]
85+ """
86+ }
87+ }
88+
89+ then {
90+ assert !process.success
91+ }
92+ }
93+
7294 test("homo_sapiens popgen - remove related individuals from dense GRM - stub") {
7395 options "-stub"
7496 config "./nextflow.config"
7597
7698 when {
7799 process {
78100 """
79- dense_grm = GCTA_MAKEGRMPART_DENSE.out.grm_files.map { meta, grm_id, grm_bin, grm_n_bin ->
80- def prefix = meta.id + '.part_' + meta.nparts_gcta + '_' + meta.part_gcta_job
81- [[ id:prefix ], grm_id, grm_bin, grm_n_bin]
82- }
101+ file('tiny_dense.grm.id').text = 'sample1 sample1\\n'
102+ file('tiny_dense.grm.bin').bytes = java.nio.ByteBuffer.allocate(4).order(java.nio.ByteOrder.LITTLE_ENDIAN).putFloat(1.0f).array()
103+ file('tiny_dense.grm.N.bin').bytes = java.nio.ByteBuffer.allocate(4).order(java.nio.ByteOrder.LITTLE_ENDIAN).putFloat(100.0f).array()
83104
84- input[0] = dense_grm
105+ input[0] = [[ id:'tiny_dense' ], file('tiny_dense.grm.id'), file('tiny_dense.grm.bin'), file('tiny_dense.grm.N.bin')]
85106 """
86107 }
87108 }
88109
89110 then {
90111 assertAll(
91112 { assert process.success },
92- { assert snapshot(process.out).match() }
113+ { assert process.out.grm_files.get(0).get(0).id == "tiny_dense" },
114+ {
115+ def grm_row = process.out.grm_files.get(0)
116+ def expected_prefix = "${grm_row.get(0).id}_unrel05"
117+ assert file(grm_row.get(1)).name == "${expected_prefix}.grm.id"
118+ assert file(grm_row.get(2)).name == "${expected_prefix}.grm.bin"
119+ assert file(grm_row.get(3)).name == "${expected_prefix}.grm.N.bin"
120+ assert file(process.out.keep_file.get(0).get(1)).name == "${expected_prefix}.grm.id"
121+ },
122+ {
123+ assert snapshot(
124+ process.out.grm_files,
125+ process.out.keep_file,
126+ process.out.findAll { key, val -> key.startsWith('versions') }
127+ ).match()
128+ }
93129 )
94130 }
95131 }
0 commit comments