1 // Copyright (C) The Lightning Authors. All rights reserved.
3 // SPDX-License-Identifier: AGPL-3.0
12 "github.com/kshedden/gonpy"
16 type exportSuite struct{}
18 var _ = check.Suite(&exportSuite{})
20 func (s *exportSuite) TestFastaToHGVS(c *check.C) {
23 err := ioutil.WriteFile(tmpdir+"/chr1-12-100.bed", []byte("chr1\t12\t100\ttest.1\n"), 0644)
24 c.Check(err, check.IsNil)
26 exited := (&importer{}).RunCommand("import", []string{
28 "-tag-library", "testdata/tags",
30 "-save-incomplete-tiles",
31 "-o", tmpdir + "/library1.gob",
33 }, nil, os.Stderr, os.Stderr)
34 c.Assert(exited, check.Equals, 0)
36 exited = (&importer{}).RunCommand("import", []string{
38 "-tag-library", "testdata/tags",
40 // "-save-incomplete-tiles",
41 "-o", tmpdir + "/library2.gob",
43 }, nil, os.Stderr, os.Stderr)
44 c.Assert(exited, check.Equals, 0)
46 exited = (&merger{}).RunCommand("merge", []string{
48 "-o", tmpdir + "/library.gob",
49 tmpdir + "/library1.gob",
50 tmpdir + "/library2.gob",
51 }, nil, os.Stderr, os.Stderr)
52 c.Assert(exited, check.Equals, 0)
54 input := tmpdir + "/library.gob"
56 exited = (&exporter{}).RunCommand("export", []string{
58 "-input-dir=" + input,
59 "-output-dir=" + tmpdir,
60 "-output-format=hgvs-onehot",
61 "-output-labels=" + tmpdir + "/labels.csv",
62 "-ref=testdata/ref.fasta",
63 }, nil, os.Stderr, os.Stderr)
64 c.Check(exited, check.Equals, 0)
65 output, err := ioutil.ReadFile(tmpdir + "/out.chr1.tsv")
66 if !c.Check(err, check.IsNil) {
67 out, _ := exec.Command("find", tmpdir, "-ls").CombinedOutput()
70 c.Check(sortLines(string(output)), check.Equals, sortLines(`chr1.1_3delinsGGC 1 0
71 chr1.41_42delinsAA 1 0
75 chr1.302_305delinsAAAA 1 0
77 output, err = ioutil.ReadFile(tmpdir + "/out.chr2.tsv")
78 c.Check(err, check.IsNil)
79 c.Check(sortLines(string(output)), check.Equals, sortLines(`chr2.1_3delinsAAA 0 1
80 chr2.125_127delinsAAA 0 1
82 chr2.258_269delinsAA 1 0
85 chr2.471_472delinsAA 1 0
87 labels, err := ioutil.ReadFile(tmpdir + "/labels.csv")
88 c.Check(err, check.IsNil)
89 c.Check(string(labels), check.Equals, `0,"input1","out.tsv"
93 exited = (&exporter{}).RunCommand("export", []string{
95 "-input-dir=" + input,
96 "-output-dir=" + tmpdir,
97 "-output-format=pvcf",
98 "-ref=testdata/ref.fasta",
99 }, os.Stderr, os.Stderr, os.Stderr)
100 c.Check(exited, check.Equals, 0)
101 output, err = ioutil.ReadFile(tmpdir + "/out.chr1.vcf")
102 c.Check(err, check.IsNil)
103 c.Log(string(output))
104 c.Check(sortLines(string(output)), check.Equals, sortLines(`##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
105 #CHROM POS ID REF ALT QUAL FILTER INFO FORMAT testdata/pipeline1/input1.1.fasta testdata/pipeline1/input2.1.fasta
106 chr1 1 . NNN GGC . . . GT 1/1 0/0
107 chr1 41 . TT AA . . . GT 1/0 0/0
108 chr1 161 . A T . . . GT 0/1 0/0
109 chr1 178 . A T . . . GT 0/1 0/0
110 chr1 221 . TCCA T . . . GT 1/1 0/0
111 chr1 302 . TTTT AAAA . . . GT 0/1 0/0
113 output, err = ioutil.ReadFile(tmpdir + "/out.chr2.vcf")
114 c.Check(err, check.IsNil)
115 c.Log(string(output))
116 c.Check(sortLines(string(output)), check.Equals, sortLines(`##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
117 #CHROM POS ID REF ALT QUAL FILTER INFO FORMAT testdata/pipeline1/input1.1.fasta testdata/pipeline1/input2.1.fasta
118 chr2 1 . TTT AAA . . . GT 0/0 0/1
119 chr2 125 . CTT AAA . . . GT 0/0 1/1
120 chr2 240 . ATTTTTCTTGCTCTC A . . . GT 1/0 0/0
121 chr2 258 . CCTTGTATTTTT AA . . . GT 1/0 0/0
122 chr2 315 . C A . . . GT 1/0 0/0
123 chr2 469 . GTGG G . . . GT 1/0 0/0
124 chr2 471 . GG AA . . . GT 0/1 0/0
127 exited = (&exporter{}).RunCommand("export", []string{
129 "-input-dir=" + input,
130 "-output-dir=" + tmpdir,
131 "-output-format=vcf",
132 "-ref=testdata/ref.fasta",
133 }, nil, os.Stderr, os.Stderr)
134 c.Check(exited, check.Equals, 0)
135 output, err = ioutil.ReadFile(tmpdir + "/out.chr1.vcf")
136 c.Check(err, check.IsNil)
137 c.Log(string(output))
138 c.Check(sortLines(string(output)), check.Equals, sortLines(`#CHROM POS ID REF ALT QUAL FILTER INFO
139 chr1 1 . NNN GGC . . AC=2
140 chr1 41 . TT AA . . AC=1
141 chr1 161 . A T . . AC=1
142 chr1 178 . A T . . AC=1
143 chr1 221 . TCCA T . . AC=2
144 chr1 302 . TTTT AAAA . . AC=1
146 output, err = ioutil.ReadFile(tmpdir + "/out.chr2.vcf")
147 c.Check(err, check.IsNil)
148 c.Log(string(output))
149 c.Check(sortLines(string(output)), check.Equals, sortLines(`#CHROM POS ID REF ALT QUAL FILTER INFO
150 chr2 1 . TTT AAA . . AC=1
151 chr2 125 . CTT AAA . . AC=2
152 chr2 240 . ATTTTTCTTGCTCTC A . . AC=1
153 chr2 258 . CCTTGTATTTTT AA . . AC=1
154 chr2 315 . C A . . AC=1
155 chr2 469 . GTGG G . . AC=1
156 chr2 471 . GG AA . . AC=1
159 c.Logf("export hgvs-numpy")
161 exited = (&exporter{}).RunCommand("export", []string{
163 "-input-dir=" + input,
164 "-output-dir=" + outdir,
165 "-output-format=hgvs-numpy",
166 "-ref=testdata/ref.fasta",
167 "-match-genome=input[12]",
168 }, nil, os.Stderr, os.Stderr)
169 c.Check(exited, check.Equals, 0)
171 f, err := os.Open(outdir + "/matrix.chr1.npy")
172 c.Assert(err, check.IsNil)
174 npy, err := gonpy.NewReader(f)
175 c.Assert(err, check.IsNil)
176 variants, err := npy.GetInt8()
177 c.Assert(err, check.IsNil)
178 c.Check(variants, check.HasLen, 6*2*2) // 6 variants * 2 alleles * 2 genomes
179 c.Check(variants, check.DeepEquals, []int8{
180 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, // input1.1.fasta
181 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, // input2.1.fasta
184 f, err = os.Open(outdir + "/matrix.chr2.npy")
185 c.Assert(err, check.IsNil)
187 npy, err = gonpy.NewReader(f)
188 c.Assert(err, check.IsNil)
189 variants, err = npy.GetInt8()
190 c.Assert(err, check.IsNil)
191 c.Check(variants, check.HasLen, 7*2*2) // 6 variants * 2 alleles * 2 genomes
192 c.Check(variants, check.DeepEquals, []int8{
193 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, // input1.1.fasta
194 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // input2.1.fasta
197 annotations, err := ioutil.ReadFile(outdir + "/annotations.chr1.csv")
198 c.Check(err, check.IsNil)
199 c.Logf("%s", string(annotations))
200 c.Check(string(annotations), check.Equals, `0,"chr1.1_3delinsGGC"
201 1,"chr1.41_42delinsAA"
205 5,"chr1.302_305delinsAAAA"
207 annotations, err = ioutil.ReadFile(outdir + "/annotations.chr2.csv")
208 c.Check(err, check.IsNil)
209 c.Check(string(annotations), check.Equals, `0,"chr2.1_3delinsAAA"
210 1,"chr2.125_127delinsAAA"
212 3,"chr2.258_269delinsAA"
215 6,"chr2.471_472delinsAA"
218 c.Logf("export hgvs-numpy with p-value threshold")
220 err = ioutil.WriteFile(tmpdir+"/cases", []byte("input1\n"), 0777)
221 c.Assert(err, check.IsNil)
222 exited = (&exporter{}).RunCommand("export", []string{
224 "-input-dir=" + input,
226 "-cases=" + tmpdir + "/cases",
227 "-output-dir=" + outdir,
228 "-output-format=hgvs-numpy",
229 "-ref=testdata/ref.fasta",
230 "-match-genome=input[12]",
231 }, nil, os.Stderr, os.Stderr)
232 c.Check(exited, check.Equals, 0)