Skip to content

Commit 6398bd1

Browse files
committed
test(gcta/removerelatedsubjects): generate GRM inputs in setup
1 parent ed1f6ee commit 6398bd1

3 files changed

Lines changed: 85 additions & 32 deletions

File tree

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
process GCTA_TEST_DENSE_GRM {
2+
tag "${meta.id}"
3+
label "process_medium"
4+
conda "${projectDir}/modules/nf-core/gcta/removerelatedsubjects/environment.yml"
5+
container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
6+
'docker://community.wave.seqera.io/library/gcta:1.94.1--9bc35dc424fcf6e9' :
7+
'community.wave.seqera.io/library/gcta:1.94.1--9bc35dc424fcf6e9'}"
8+
9+
input:
10+
tuple val(meta), path(bed), path(bim), path(fam)
11+
12+
output:
13+
tuple val(meta), path("${meta.id}.grm.id"), path("${meta.id}.grm.bin"), path("${meta.id}.grm.N.bin"), emit: dense_grm
14+
15+
script:
16+
def bfile_prefix = bed.baseName
17+
"""
18+
set -euo pipefail
19+
20+
gcta \\
21+
--bfile "${bfile_prefix}" \\
22+
--make-grm \\
23+
--out "${meta.id}" \\
24+
--thread-num ${task.cpus}
25+
"""
26+
27+
stub:
28+
"""
29+
touch "${meta.id}.grm.id"
30+
touch "${meta.id}.grm.bin"
31+
touch "${meta.id}.grm.N.bin"
32+
"""
33+
}

modules/nf-core/gcta/removerelatedsubjects/tests/main.nf.test

Lines changed: 40 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,45 @@ nextflow_process {
88
tag "modules_nfcore"
99
tag "gcta"
1010
tag "gcta/removerelatedsubjects"
11+
tag "tests/helpers/dense_grm"
12+
13+
setup {
14+
run("GCTA_TEST_DENSE_GRM", alias: "GCTA_TEST_DENSE_GRM_CONTRACT") {
15+
script "../tests/helpers/dense_grm/main.nf"
16+
process {
17+
"""
18+
input[0] = [
19+
[ id:'tiny_dense' ],
20+
file(params.modules_testdata_base_path + 'genomics/homo_sapiens/popgen/plink_simulated.bed', checkIfExists: true),
21+
file(params.modules_testdata_base_path + 'genomics/homo_sapiens/popgen/plink_simulated.bim', checkIfExists: true),
22+
file(params.modules_testdata_base_path + 'genomics/homo_sapiens/popgen/plink_simulated.fam', checkIfExists: true)
23+
]
24+
"""
25+
}
26+
}
27+
28+
run("GCTA_TEST_DENSE_GRM", alias: "GCTA_TEST_DENSE_GRM_STUB") {
29+
script "../tests/helpers/dense_grm/main.nf"
30+
process {
31+
"""
32+
input[0] = [
33+
[ id:'stub_dense' ],
34+
file(params.modules_testdata_base_path + 'genomics/homo_sapiens/popgen/plink_simulated.bed', checkIfExists: true),
35+
file(params.modules_testdata_base_path + 'genomics/homo_sapiens/popgen/plink_simulated.bim', checkIfExists: true),
36+
file(params.modules_testdata_base_path + 'genomics/homo_sapiens/popgen/plink_simulated.fam', checkIfExists: true)
37+
]
38+
"""
39+
}
40+
}
41+
}
1142

1243
test("homo_sapiens popgen - remove related individuals from dense GRM") {
1344
config "./nextflow.config"
1445

1546
when {
1647
process {
1748
"""
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()
21-
22-
input[0] = [[ id:'tiny_dense' ], file('tiny_dense.grm.id'), file('tiny_dense.grm.bin'), file('tiny_dense.grm.N.bin')]
49+
input[0] = GCTA_TEST_DENSE_GRM_CONTRACT.out.dense_grm
2350
"""
2451
}
2552
}
@@ -55,11 +82,9 @@ nextflow_process {
5582
when {
5683
process {
5784
"""
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')]
85+
input[0] = GCTA_TEST_DENSE_GRM_CONTRACT.out.dense_grm.map { meta, grm_id, grm_bin, grm_n_bin ->
86+
[[ id:'tiny_dense_mismatched' ], grm_id, grm_bin, grm_n_bin]
87+
}
6388
"""
6489
}
6590
}
@@ -78,10 +103,9 @@ nextflow_process {
78103
when {
79104
process {
80105
"""
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')]
106+
input[0] = GCTA_TEST_DENSE_GRM_CONTRACT.out.dense_grm.map { meta, grm_id, grm_bin, grm_n_bin ->
107+
[[ id:meta.id ], grm_id, grm_bin]
108+
}
85109
"""
86110
}
87111
}
@@ -98,19 +122,15 @@ nextflow_process {
98122
when {
99123
process {
100124
"""
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()
104-
105-
input[0] = [[ id:'tiny_dense' ], file('tiny_dense.grm.id'), file('tiny_dense.grm.bin'), file('tiny_dense.grm.N.bin')]
125+
input[0] = GCTA_TEST_DENSE_GRM_STUB.out.dense_grm
106126
"""
107127
}
108128
}
109129

110130
then {
111131
assertAll(
112132
{ assert process.success },
113-
{ assert process.out.grm_files.get(0).get(0).id == "tiny_dense" },
133+
{ assert process.out.grm_files.get(0).get(0).id == "stub_dense" },
114134
{
115135
def grm_row = process.out.grm_files.get(0)
116136
def expected_prefix = "${grm_row.get(0).id}_unrel05"

modules/nf-core/gcta/removerelatedsubjects/tests/main.nf.test.snap

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,17 @@
66
{
77
"id": "tiny_dense"
88
},
9-
"tiny_dense_unrel05.grm.id:md5,822e827e7c1bf900290ef807f514b94d",
10-
"tiny_dense_unrel05.grm.bin:md5,429d81ed2795e3c586906c6c335aa136",
11-
"tiny_dense_unrel05.grm.N.bin:md5,a5d1e9463fae706307f90b05e9e6db9a"
9+
"tiny_dense_unrel05.grm.id:md5,ca8c0bded6951fdd3bf0dddc97b6df6b",
10+
"tiny_dense_unrel05.grm.bin:md5,b1f124463eecbae86840a6651eec372d",
11+
"tiny_dense_unrel05.grm.N.bin:md5,06b73ea8bae8f1e5f5d4de33dbd2c75e"
1212
]
1313
],
1414
[
1515
[
1616
{
1717
"id": "tiny_dense"
1818
},
19-
"tiny_dense_unrel05.grm.id:md5,822e827e7c1bf900290ef807f514b94d"
19+
"tiny_dense_unrel05.grm.id:md5,ca8c0bded6951fdd3bf0dddc97b6df6b"
2020
]
2121
],
2222
{
@@ -33,26 +33,26 @@
3333
"nf-test": "0.9.3",
3434
"nextflow": "25.10.4"
3535
},
36-
"timestamp": "2026-03-21T00:36:33.212296305"
36+
"timestamp": "2026-03-21T18:41:51.827057425"
3737
},
3838
"homo_sapiens popgen - remove related individuals from dense GRM - stub": {
3939
"content": [
4040
[
4141
[
4242
{
43-
"id": "tiny_dense"
43+
"id": "stub_dense"
4444
},
45-
"tiny_dense_unrel05.grm.id:md5,d41d8cd98f00b204e9800998ecf8427e",
46-
"tiny_dense_unrel05.grm.bin:md5,d41d8cd98f00b204e9800998ecf8427e",
47-
"tiny_dense_unrel05.grm.N.bin:md5,d41d8cd98f00b204e9800998ecf8427e"
45+
"stub_dense_unrel05.grm.id:md5,d41d8cd98f00b204e9800998ecf8427e",
46+
"stub_dense_unrel05.grm.bin:md5,d41d8cd98f00b204e9800998ecf8427e",
47+
"stub_dense_unrel05.grm.N.bin:md5,d41d8cd98f00b204e9800998ecf8427e"
4848
]
4949
],
5050
[
5151
[
5252
{
53-
"id": "tiny_dense"
53+
"id": "stub_dense"
5454
},
55-
"tiny_dense_unrel05.grm.id:md5,d41d8cd98f00b204e9800998ecf8427e"
55+
"stub_dense_unrel05.grm.id:md5,d41d8cd98f00b204e9800998ecf8427e"
5656
]
5757
],
5858
{
@@ -69,6 +69,6 @@
6969
"nf-test": "0.9.3",
7070
"nextflow": "25.10.4"
7171
},
72-
"timestamp": "2026-03-21T00:37:24.069976205"
72+
"timestamp": "2026-03-21T18:42:16.0502909"
7373
}
7474
}

0 commit comments

Comments
 (0)