-package main
+package lightning
import (
"bufio"
}
log.Infof("assembling %d sequences concurrently", len(seqnames))
- var wg sync.WaitGroup
+ throttle := throttle{Max: 8}
outbuf := make([]bytes.Buffer, len(seqnames))
bedbuf := make([]bytes.Buffer, len(seqnames))
for seqidx, seqname := range seqnames {
if bedout == nil {
bedbuf = nil
}
- // TODO: limit number of goroutines and unflushed bufs to ncpus
- wg.Add(1)
+ throttle.Acquire()
go func() {
- defer wg.Done()
+ defer throttle.Release()
cmd.exportSeq(outbuf, bedbuf, taglen, seqname, refseq[seqname], tileVariant, cgs)
log.Infof("assembled %q to outbuf %d bedbuf %d", seqname, outbuf.Len(), bedbuf.Len())
}()
}
- wg.Wait()
+ throttle.Wait()
- wg.Add(1)
+ throttle.Acquire()
go func() {
- defer wg.Done()
+ defer throttle.Release()
for i, seqname := range seqnames {
log.Infof("writing outbuf %s", seqname)
io.Copy(out, &outbuf[i])
}
}()
if bedout != nil {
- wg.Add(1)
+ throttle.Acquire()
go func() {
- defer wg.Done()
+ defer throttle.Release()
for i, seqname := range seqnames {
log.Infof("writing bedbuf %s", seqname)
io.Copy(bedout, &bedbuf[i])
}
}()
}
- wg.Wait()
+ throttle.Wait()
return nil
}
thickstart = 0
}
thickend := refpos
+
// coverage score, 0 to 1000
- score := 1000 * tagcoverage / len(cgs) / 2
+ score := 1000
+ if len(cgs) > 0 {
+ score = 1000 * tagcoverage / len(cgs) / 2
+ }
+
fmt.Fprintf(bedw, "%s %d %d %d %d . %d %d\n",
seqname, tilestart, tileend,
libref.Tag,