X-Git-Url: https://git.arvados.org/lightning.git/blobdiff_plain/d7b608c2d6ed061bd16e1a18db2638e951883681..dfbfdbd71f01074dedf087cbfee3faa774de3e59:/exportnumpy.go diff --git a/exportnumpy.go b/exportnumpy.go index eb15d6d561..27c86a3210 100644 --- a/exportnumpy.go +++ b/exportnumpy.go @@ -1,3 +1,7 @@ +// Copyright (C) The Lightning Authors. All rights reserved. +// +// SPDX-License-Identifier: AGPL-3.0 + package lightning import ( @@ -91,11 +95,9 @@ func (cmd *exportNumpy) RunCommand(prog string, args []string, stdin io.Reader, "-output-labels", "/mnt/output/labels.csv", "-regions", *regionsFilename, "-expand-regions", fmt.Sprintf("%d", *expandRegions), - "-max-variants", fmt.Sprintf("%d", cmd.filter.MaxVariants), - "-min-coverage", fmt.Sprintf("%f", cmd.filter.MinCoverage), - "-max-tag", fmt.Sprintf("%d", cmd.filter.MaxTag), "-chunks", fmt.Sprintf("%d", *chunks), } + runner.Args = append(runner.Args, cmd.filter.Args()...) var output string output, err = runner.Run() if err != nil { @@ -110,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 } @@ -249,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() @@ -357,7 +363,7 @@ func lowqual(tilelib *tileLibrary) (lowqual []map[tileVariantID]bool) { for tag, variants := range tilelib.variant { lq := lowqual[tag] for varidx, hash := range variants { - if len(tilelib.seq[hash]) == 0 { + if len(tilelib.hashSequence(hash)) == 0 { if lq == nil { lq = map[tileVariantID]bool{} lowqual[tag] = lq @@ -398,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 @@ -437,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 {