Darker colors.
[lightning.git] / anno2vcf.go
index a1a320ff34e2e2f592e4f385769c8b46cc917821..582254099b464a0f42390877e51bb19aa9418e4a 100644 (file)
@@ -10,7 +10,6 @@ import (
        "flag"
        "fmt"
        "io"
-       "io/ioutil"
        "net/http"
        _ "net/http/pprof"
        "os"
@@ -48,6 +47,9 @@ func (cmd *anno2vcf) RunCommand(prog string, args []string, stdin io.Reader, std
                return 0
        } else if err != nil {
                return 2
+       } else if flags.NArg() > 0 {
+               err = fmt.Errorf("errant command line arguments after parsed flags: %v", flags.Args())
+               return 2
        }
 
        if *pprof != "" {
@@ -105,6 +107,7 @@ func (cmd *anno2vcf) RunCommand(prog string, args []string, stdin io.Reader, std
                position  int
                deletion  []byte
                insertion []byte
+               hgvsID    []byte
        }
        allcalls := map[string][]*call{}
        var mtx sync.Mutex
@@ -117,23 +120,35 @@ func (cmd *anno2vcf) RunCommand(prog string, args []string, stdin io.Reader, std
                filename := *inputDir + "/" + fi.Name()
                thr.Go(func() error {
                        log.Printf("reading %s", filename)
-                       buf, err := ioutil.ReadFile(filename)
+                       f, err := open(filename)
+                       if err != nil {
+                               return err
+                       }
+                       defer f.Close()
+                       buf, err := io.ReadAll(f)
                        if err != nil {
                                return fmt.Errorf("%s: %s", filename, err)
                        }
+                       f.Close()
                        lines := bytes.Split(buf, []byte{'\n'})
                        calls := map[string][]*call{}
                        for lineIdx, line := range lines {
                                if len(line) == 0 {
                                        continue
                                }
-                               if lineIdx & ^0xfff == 0 && thr.Err() != nil {
+                               if lineIdx&0xff == 0 && thr.Err() != nil {
                                        return nil
                                }
                                fields := bytes.Split(line, []byte{','})
                                if len(fields) < 8 {
                                        return fmt.Errorf("%s line %d: wrong number of fields (%d < %d): %q", fi.Name(), lineIdx+1, len(fields), 8, line)
                                }
+                               hgvsID := fields[3]
+                               if len(hgvsID) < 2 {
+                                       // "=" reference or ""
+                                       // non-diffable tile variant
+                                       continue
+                               }
                                tile, _ := strconv.ParseInt(string(fields[0]), 10, 64)
                                variant, _ := strconv.ParseInt(string(fields[2]), 10, 64)
                                position, _ := strconv.ParseInt(string(fields[5]), 10, 64)
@@ -165,6 +180,7 @@ func (cmd *anno2vcf) RunCommand(prog string, args []string, stdin io.Reader, std
                                        position:  int(position),
                                        deletion:  del,
                                        insertion: ins,
+                                       hgvsID:    hgvsID,
                                })
                        }
                        mtx.Lock()
@@ -238,7 +254,7 @@ func (cmd *anno2vcf) RunCommand(prog string, args []string, stdin io.Reader, std
                                if len(insertion) == 0 {
                                        insertion = placeholder
                                }
-                               _, err = fmt.Fprintf(bufw, "%s\t%d\t.\t%s\t%s\t.\t.\t%s\n", seq, call.position, deletion, insertion, info)
+                               _, err = fmt.Fprintf(bufw, "%s\t%d\t%s\t%s\t%s\t.\t.\t%s\n", seq, call.position, call.hgvsID, deletion, insertion, info)
                                if err != nil {
                                        return err
                                }