diff --git a/pkg/obiiter/workers.go b/pkg/obiiter/workers.go index bf5bb5e..3aa1400 100644 --- a/pkg/obiiter/workers.go +++ b/pkg/obiiter/workers.go @@ -196,3 +196,11 @@ func SliceWorkerPipe(worker SeqSliceWorker, sizes ...int) Pipeable { return f } + +func ReverseComplementWorker(inplace bool) SeqWorker { + f := func(input *obiseq.BioSequence) *obiseq.BioSequence { + return input.ReverseComplement(inplace) + } + + return f +} diff --git a/pkg/obiseq/revcomp.go b/pkg/obiseq/revcomp.go index 2277d87..e44b987 100644 --- a/pkg/obiseq/revcomp.go +++ b/pkg/obiseq/revcomp.go @@ -1,6 +1,6 @@ package obiseq -// ".ABCDEFGHIJKLMNOPQRSTUVWXYZ#![]" +// ".ABCDEFGHIJKLMNOPQRSTUVWXYZ#![]" var __revcmp_dna__ = []byte(".TVGHEFCDIJMLKNOPQYSAABWXRZ#!][") // Reverse complements a DNA sequence. @@ -20,5 +20,13 @@ func (sequence *BioSequence) ReverseComplement(inplace bool) *BioSequence { j++ } + if sequence.HasQualities() { + s := sequence.qualities + for i, j := sequence.Length()-1, 0; i >= j; i-- { + s[j], s[i] = s[i], s[j] + j++ + } + } + return sequence }