func (t *Trimmer) SetVerbosity(level int) {
	t.verbosity = level
}
SetVerbosity alters the level of logging output. 0=no output, 1=default, 2=additional output.
package trim
import (
	"fmt"
	"github.com/jteutenberg/downpore/seeds"
	"github.com/jteutenberg/downpore/sequence"
	"github.com/jteutenberg/downpore/util"
	"log"
	"strings"
	"sync"
)
type Trimmer struct {
	originalFront []sequence.Sequence
	originalBack  []sequence.Sequence
	frontAdapters    []*seeds.SeedSequence
	backAdapters     []*seeds.SeedSequence
	frontAdapterSets []*util.IntSet
	backAdapterSets  []*util.IntSet
	pairsFront       []int
	pairsBack        []int
	index            *seeds.SeedIndex
	k                int
	chunkSize        int
	lock        *sync.Mutex
	frontCounts []int
	backCounts  []int
	noCount     int
	seenCount   int
	midThreshold  int
	extraEdgeTrim int
	extraMidTrim  int
	keepSplits    bool
	tagAdapters   bool
	requirePairs  bool
	verbosity     int
}
type sequenceSplit struct {
	id     int
	aEnd   int
	bStart int
}
func NewTrimmer(frontAdapters, backAdapters []sequence.Sequence, k int) *Trimmer {
	var lock sync.Mutex
	t := Trimmer{originalFront: frontAdapters, originalBack: backAdapters, frontAdapters: make([]*seeds.SeedSequence, 0, len(frontAdapters)), backAdapters: make([]*seeds.SeedSequence, 0, len(backAdapters)), frontAdapterSets: make([]*util.IntSet, 0, len(frontAdapters)), backAdapterSets: make([]*util.IntSet, 0, len(backAdapters)), index: nil, k: k, frontCounts: nil, backCounts: nil, noCount: 0, lock: &lock, verbosity: 1}
	(&t).setupIndex()
	t.SetTrimParams(85, 5, 50, 1000, false, true, false)
	return &t
}
func (t *Trimmer) setupIndex() {
	t.frontAdapters = t.frontAdapters[:0]
	t.frontAdapterSets = t.frontAdapterSets[:0]
	t.backAdapters = t.backAdapters[:0]
	t.backAdapterSets = t.backAdapterSets[:0]
	t.index = seeds.NewSeedIndex(uint(t.k))
	for _, s := range t.originalFront {
		t.frontAdapters = append(t.frontAdapters, t.index.NewAllSeedSequence(s))
		set := util.NewIntSet()
		kmers := s.ShortKmers(t.k, true)
		t.index.GetSeedsFromKmers(kmers, set)
		t.frontAdapterSets = append(t.frontAdapterSets, set)
	}
	for _, s := range t.originalBack {
		t.backAdapters = append(t.backAdapters, t.index.NewAllSeedSequence(s))
		set := util.NewIntSet()
		kmers := s.ShortKmers(t.k, true)
		t.index.GetSeedsFromKmers(kmers, set)
		t.backAdapterSets = append(t.backAdapterSets, set)
	}
	t.frontCounts = make([]int, len(t.originalFront))
	t.backCounts = make([]int, len(t.originalBack))
	pairID := 1
	t.pairsFront = make([]int, len(t.originalFront))
	t.pairsBack = make([]int, len(t.originalBack))
	for i, _ := range t.originalBack {
		t.pairsBack[i] = -1
	}
	for i, a := range t.originalFront {
		name := a.GetName()
		t.pairsFront[i] = -1
		for j, b := range t.originalBack {
			if b.GetName() == name {
				t.pairsFront[i] = pairID
				t.pairsBack[j] = pairID
				pairID++
				break
			}
		}
	}
}
func LoadTrimmer(frontAdapters, backAdapters string, k int) *Trimmer {
	fronts := make([]sequence.Sequence, 0, 100)
	backs := make([]sequence.Sequence, 0, 100)
	seqSet := sequence.NewFastaSequenceSet(frontAdapters, 0, 1, false, false)
	seqs := seqSet.GetSequences()
	for seq := range seqs {
		fronts = append(fronts, seq)
	}
	seqSet = sequence.NewFastaSequenceSet(backAdapters, 0, 1, false, false)
	seqs = seqSet.GetSequences()
	for seq := range seqs {
		backs = append(backs, seq)
	}
	return NewTrimmer(fronts, backs, k)
}