2022-01-13 23:27:39 +01:00
|
|
|
package obiseq
|
|
|
|
|
|
|
|
// ".ABCDEFGHIJKLMNOPQRSTUVWXYZ#![]"
|
|
|
|
var __revcmp_dna__ = []byte(".TVGHEFCDIJMLKNOPQYSAABWXRZ#!][")
|
|
|
|
|
|
|
|
// Reverse complements a DNA sequence.
|
|
|
|
// If the inplace parametter is true, that operation is done in place.
|
2022-02-21 19:00:23 +01:00
|
|
|
func (sequence *BioSequence) ReverseComplement(inplace bool) *BioSequence {
|
2022-01-13 23:27:39 +01:00
|
|
|
|
|
|
|
if !inplace {
|
|
|
|
sequence = sequence.Copy()
|
|
|
|
}
|
|
|
|
|
2022-02-21 19:00:23 +01:00
|
|
|
s := sequence.sequence
|
2022-01-13 23:27:39 +01:00
|
|
|
|
|
|
|
for i, j := sequence.Length()-1, 0; i >= j; i-- {
|
|
|
|
|
|
|
|
s[j], s[i] = __revcmp_dna__[s[i]&31]|(s[i]&0x20),
|
|
|
|
__revcmp_dna__[s[j]&31]|(s[j]&0x20)
|
|
|
|
j++
|
|
|
|
}
|
|
|
|
|
|
|
|
return sequence
|
|
|
|
}
|