func convert(fa_ain, ref_ain *simplestream.SimpleStream, aout *os.File, start_pos int64) error { var e error var fa_bp byte allele_num := 0 bufout := bufio.NewWriter(aout) defer bufout.Flush() for { if fa_ain.Pos >= fa_ain.N { if e := fa_ain.Refresh(); e != nil { return e } } if ref_ain.Pos >= ref_ain.N { if e := ref_ain.Refresh(); e != nil { return e } } fa_bp = fa_ain.Buf[fa_ain.Pos] fa_ain.Pos++ ref_bp = ref_ain.Buf[ref_ain.Pos] ref_ain.Pos++ if fa_bp != 'n' && fa_bp != 'N' && fa_bp == ref_bp { switch fa_bp { case 'A': aout.WriteByte('a') case 'C': aout.WriteByte('c') case 'G': aout.WriteByte('g') case 'T': aout.WriteByte('t') default: aout.WriteByte(fa_bp) } } else if fa_bp == 'N' || fa_bp == 'n' { switch ref_bp { case 'A', 'a': aout.WriteByte('!') case 'C', 'c': aout.WriteByte('#') case 'G', 'g': aout.WriteByte('\'') case 'T', 't': aout.WriteByte('4') default: aout.WriteByte(ref_bp) } } else if fa_bp != ref_bp { switch fa_bp { case 'a', 'A': aout.WriteByte('A') case 'c', 'C': aout.WriteByte('C') case 'g', 'G': aout.WriteByte('G') case 't', 'T': aout.WriteByte('T') default: aout.WriteByte(fa_bp) } } else { aout.WriteByte('-') } } return nil }