Files
obitools4/pkg/obitools/obiuniq/unique.go

51 lines
1.2 KiB
Go

package obiuniq
import (
"log"
"git.metabarcoding.org/lecasofts/go/obitools/pkg/obichunk"
"git.metabarcoding.org/lecasofts/go/obitools/pkg/obiiter"
"git.metabarcoding.org/lecasofts/go/obitools/pkg/obioptions"
)
func Unique(sequences obiiter.IBioSequenceBatch) obiiter.IBioSequenceBatch {
options := make([]obichunk.WithOption, 0, 30)
options = append(options,
obichunk.OptionBatchCount(CLINumberOfChunks()),
)
if CLIUniqueInMemory() {
log.Printf("Running dereplication in memory on %d chunks", CLINumberOfChunks())
options = append(options, obichunk.OptionSortOnMemory())
} else {
log.Printf("Running dereplication on disk with %d chunks", CLINumberOfChunks())
options = append(options, obichunk.OptionSortOnDisk())
}
options = append(options,
obichunk.OptionStatOn(CLIStatsOn()...))
options = append(options,
obichunk.OptionSubCategory(CLIKeys()...))
options = append(options,
obichunk.OptionsParallelWorkers(
obioptions.CLIParallelWorkers()),
obichunk.OptionsBufferSize(
obioptions.CLIBufferSize()),
obichunk.OptionsBatchSize(
obioptions.CLIBatchSize()),
obichunk.OptionNAValue(CLINAValue()),
)
iUnique, err := obichunk.IUniqueSequence(sequences, options...)
if err != nil {
log.Fatal(err)
}
return iUnique
}