Fix -max-tag filter.
[lightning.git] / exportnumpy.go
index c8e9f7cfc59a1743eeec83a56e0228303e6a49ac..27c86a32107a98faf1952eaffe5fae477faa7213 100644 (file)
@@ -112,7 +112,7 @@ func (cmd *exportNumpy) RunCommand(prog string, args []string, stdin io.Reader,
                retainTileSequences: true,
                compactGenomes:      map[string][]tileVariantID{},
        }
-       err = tilelib.LoadDir(context.Background(), *inputDir, nil)
+       err = tilelib.LoadDir(context.Background(), *inputDir)
        if err != nil {
                return 1
        }
@@ -251,19 +251,23 @@ func (cmd *exportNumpy) RunCommand(prog string, args []string, stdin io.Reader,
                                return
                        }
                        defer f.Close()
-                       npw, err := gonpy.NewWriter(f)
+                       // gonpy closes our writer and ignores errors. Give it a nopCloser so we can close f properly.
+                       npw, err := gonpy.NewWriter(nopCloser{f})
                        if err != nil {
                                lastErr.Store(err)
                                return
                        }
                        npw.Shape = []int{len(names), len(pdis) * 2}
-                       npw.WriteInt8(data)
-                       // gonpy closes f and ignores errors, doh.
-                       // err = f.Close()
-                       // if err != nil {
-                       //      lastErr.Store(err)
-                       //      return
-                       // }
+                       err = npw.WriteInt8(data)
+                       if err != nil {
+                               lastErr.Store(err)
+                               return
+                       }
+                       err = f.Close()
+                       if err != nil {
+                               lastErr.Store(err)
+                               return
+                       }
                }()
        }
        wg.Wait()
@@ -400,22 +404,20 @@ func cgs2array(tilelib *tileLibrary, names []string, lowqual []map[tileVariantID
        return
 }
 
-func chooseTiles(tilelib *tileLibrary, regionsFilename string, expandRegions int) (drop []bool, err error) {
-       if regionsFilename == "" {
-               return
-       }
+func makeMask(regionsFilename string, expandRegions int) (*mask, error) {
+       log.Printf("makeMask: reading %s", regionsFilename)
        rfile, err := zopen(regionsFilename)
        if err != nil {
-               return
+               return nil, err
        }
        defer rfile.Close()
-       regions, err := ioutil.ReadAll(rfile)
+       regions, err := io.ReadAll(rfile)
        if err != nil {
-               return
+               return nil, err
        }
 
-       log.Print("chooseTiles: building mask")
-       mask := &mask{}
+       log.Print("makeMask: building mask")
+       var mask mask
        for _, line := range bytes.Split(regions, []byte{'\n'}) {
                if bytes.HasPrefix(line, []byte{'#'}) {
                        continue
@@ -439,14 +441,24 @@ func chooseTiles(tilelib *tileLibrary, regionsFilename string, expandRegions int
                                // GFF/GTF
                                end++
                        } else {
-                               err = fmt.Errorf("cannot parse input line as BED or GFF/GTF: %q", line)
-                               return
+                               return nil, fmt.Errorf("cannot parse input line as BED or GFF/GTF: %q", line)
                        }
                }
                mask.Add(refseqname, start-expandRegions, end+expandRegions)
        }
-       log.Print("chooseTiles: mask.Freeze")
+       log.Print("makeMask: mask.Freeze")
        mask.Freeze()
+       return &mask, nil
+}
+
+func chooseTiles(tilelib *tileLibrary, regionsFilename string, expandRegions int) (drop []bool, err error) {
+       if regionsFilename == "" {
+               return
+       }
+       mask, err := makeMask(regionsFilename, expandRegions)
+       if err != nil {
+               return
+       }
 
        tagset := tilelib.taglib.Tags()
        if len(tagset) == 0 {