}
func (m *mask) Add(seqname string, start, end int) {
+ if m.frozen {
+ panic("bug: (*mask)Add() called after Freeze()")
+ }
if m.intervals == nil {
m.intervals = map[string][]interval{}
}
return m.itrees[seqname].check(0, interval{start, end})
}
+func (m *mask) Len() int {
+ if !m.frozen {
+ return 0
+ }
+ n := 0
+ for _, intervals := range m.intervals {
+ n += len(intervals)
+ }
+ return n
+}
+
func (m *mask) freeze(in []interval) intervalTree {
if len(in) == 0 {
return nil
for seqname, cseq := range refseq {
seqname, cseq := seqname, cseq
throttleCPU.Go(func() error {
- defer log.Printf("... %s done", seqname)
pos := 0
for _, libref := range cseq {
rt := reftile[libref.Tag]
}
pos += len(rt.tiledata) - taglen
}
+ log.Printf("... %s done, len %d", seqname, pos)
return nil
})
}
- throttleCPU.Wait()
+ err = throttleCPU.Wait()
+ if err != nil {
+ return 1
+ }
var mask *mask
if *regionsFilename != "" {
+ log.Printf("loading regions from %s", *regionsFilename)
mask, err = makeMask(*regionsFilename, *expandRegions)
if err != nil {
return 1
}
- // Delete reftile entries for masked-out regions.
+ log.Printf("before applying mask, len(reftile) == %d", len(reftile))
+ log.Printf("deleting reftile entries for regions outside %d intervals", mask.Len())
for tag, rt := range reftile {
if !mask.Check(strings.TrimPrefix(rt.seqname, "chr"), rt.pos, rt.pos+len(rt.tiledata)) {
delete(reftile, tag)
}
}
+ log.Printf("after applying mask, len(reftile) == %d", len(reftile))
}
var toMerge [][]int16