func (FASTQread *FASTQread) ReverseComplement() {
	for i, j := 0, len(FASTQread.Seq); i < j; i++ {
		FASTQread.Seq[i] = complementBases[FASTQread.Seq[i]]
	}
	for i, j := 0, len(FASTQread.Seq)-1; i <= j; i, j = i+1, j-1 {
		FASTQread.Seq[i], FASTQread.Seq[j] = FASTQread.Seq[j], FASTQread.Seq[i]
		FASTQread.Qual[i], FASTQread.Qual[j] = FASTQread.Qual[j], FASTQread.Qual[i]
	}
	if FASTQread.RC == true {
		FASTQread.RC = false
	} else {
		FASTQread.RC = true
	}
}
ReverseComplement is a method to reverse complement a sequence held by a FASTQread
package seqio
import (
	"fmt"
	"unicode"
)
const FASTQ_ENCODING = 33
var complementBases = []byte{
	'A': 'T',
	'T': 'A',
	'C': 'G',
	'G': 'C',
	'N': 'N',
}
type Sequence struct {
	ID  []byte
	Seq []byte
}
type FASTQread struct {
	Sequence
	Misc []byte
	Qual []byte
	RC   bool
}
func NewFASTQread(l1 []byte, l2 []byte, l3 []byte, l4 []byte) (*FASTQread, error) {
	if l1[0] != 64 {
		return nil, fmt.Errorf("read ID in fastq file does not begin with @: %v", string(l1))
	}
	return &FASTQread{
		Sequence: Sequence{ID: l1, Seq: l2},
		Misc:     l3,
		Qual:     l4,
	}, nil
}
func (Sequence *Sequence) BaseCheck() error {
	for i, j := 0, len(Sequence.Seq); i < j; i++ {
		switch base := unicode.ToUpper(rune(Sequence.Seq[i])); base {
		case 'A':
			Sequence.Seq[i] = byte(base)
		case 'C':
			Sequence.Seq[i] = byte(base)
		case 'T':
			Sequence.Seq[i] = byte(base)
		case 'G':
			Sequence.Seq[i] = byte(base)
		case 'N':
			Sequence.Seq[i] = byte(base)
		default:
			Sequence.Seq[i] = byte('N')
		}
	}
	return nil
}