Renumber variants by allele count.
[lightning.git] / slice_test.go
1 // Copyright (C) The Lightning Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4
5 package lightning
6
7 import (
8         "io/ioutil"
9         "os"
10         "os/exec"
11
12         "github.com/kshedden/gonpy"
13         "gopkg.in/check.v1"
14 )
15
16 type sliceSuite struct{}
17
18 var _ = check.Suite(&sliceSuite{})
19
20 func (s *sliceSuite) TestImportAndSlice(c *check.C) {
21         tmpdir := c.MkDir()
22
23         err := ioutil.WriteFile(tmpdir+"/chr1-12-100.bed", []byte("chr1\t12\t100\ttest.1\n"), 0644)
24         c.Check(err, check.IsNil)
25
26         c.Log("=== import testdata/ref ===")
27         exited := (&importer{}).RunCommand("import", []string{
28                 "-local=true",
29                 "-tag-library", "testdata/tags",
30                 "-output-tiles",
31                 "-save-incomplete-tiles",
32                 "-o", tmpdir + "/library1.gob",
33                 "testdata/ref.fasta",
34         }, nil, os.Stderr, os.Stderr)
35         c.Assert(exited, check.Equals, 0)
36
37         c.Log("=== import testdata/pipeline1 ===")
38         exited = (&importer{}).RunCommand("import", []string{
39                 "-local=true",
40                 "-tag-library", "testdata/tags",
41                 "-output-tiles",
42                 "-o", tmpdir + "/library2.gob",
43                 "testdata/pipeline1",
44         }, nil, os.Stderr, os.Stderr)
45         c.Assert(exited, check.Equals, 0)
46
47         c.Log("=== merge ===")
48         exited = (&merger{}).RunCommand("merge", []string{
49                 "-local=true",
50                 "-o", tmpdir + "/library.gob",
51                 tmpdir + "/library1.gob",
52                 tmpdir + "/library2.gob",
53         }, nil, os.Stderr, os.Stderr)
54         c.Assert(exited, check.Equals, 0)
55
56         input := tmpdir + "/library.gob"
57         slicedir := c.MkDir()
58
59         c.Log("=== slice ===")
60         exited = (&slicecmd{}).RunCommand("slice", []string{
61                 "-local=true",
62                 "-input-dir=" + input,
63                 "-output-dir=" + slicedir,
64                 "-tags-per-file=2",
65         }, nil, os.Stderr, os.Stderr)
66         c.Check(exited, check.Equals, 0)
67         out, _ := exec.Command("find", slicedir, "-ls").CombinedOutput()
68         c.Logf("%s", out)
69
70         c.Log("=== slice-numpy ===")
71         npydir := c.MkDir()
72         exited = (&sliceNumpy{}).RunCommand("slice-numpy", []string{
73                 "-local=true",
74                 "-input-dir=" + slicedir,
75                 "-output-dir=" + npydir,
76         }, nil, os.Stderr, os.Stderr)
77         c.Check(exited, check.Equals, 0)
78         out, _ = exec.Command("find", npydir, "-ls").CombinedOutput()
79         c.Logf("%s", out)
80
81         f, err := os.Open(npydir + "/matrix.0000.npy")
82         c.Assert(err, check.IsNil)
83         defer f.Close()
84         npy, err := gonpy.NewReader(f)
85         c.Assert(err, check.IsNil)
86         c.Check(npy.Shape, check.DeepEquals, []int{2, 4})
87         variants, err := npy.GetInt16()
88         c.Check(variants, check.DeepEquals, []int16{3, 2, 1, 2, -1, -1, 1, 1})
89
90         annotations, err := ioutil.ReadFile(npydir + "/matrix.0000.annotations.csv")
91         c.Assert(err, check.IsNil)
92         c.Logf("%s", annotations)
93         for _, s := range []string{
94                 "chr1:g.161A>T",
95                 "chr1:g.178A>T",
96                 "chr1:g.1_3delinsGGC",
97                 "chr1:g.222_224del",
98         } {
99                 c.Check(string(annotations), check.Matches, "(?ms).*"+s+".*")
100         }
101 }