+ annow := bufio.NewWriterSize(annof, 1<<20)
+ for tag, variants := range seq {
+ rt, ok := reftile[tag]
+ if !ok {
+ // Reference does not use any
+ // variant of this tile.
+ // TODO: log this? mention it
+ // in annotations?
+ continue
+ }
+ outcol := tag - tagID(tagstart)
+ reftilestr := strings.ToUpper(string(rt.tiledata))
+ for v, seq := range variants {
+ if len(seq) == 0 || !bytes.HasSuffix(rt.tiledata, seq[len(seq)-taglen:]) {
+ continue
+ }
+ if lendiff := len(rt.tiledata) - len(seq); lendiff < -1000 || lendiff > 1000 {
+ continue
+ }
+ diffs, _ := hgvs.Diff(reftilestr, strings.ToUpper(string(seq)), 0)
+ for _, diff := range diffs {
+ diff.Position += rt.pos
+ fmt.Fprintf(annow, "%d,%d,%d,%s:g.%s\n", tag, outcol, v, rt.seqname, diff.String())
+ }
+ }
+ }
+ err = annow.Flush()
+ if err != nil {
+ return err
+ }
+ err = annof.Close()