mirror of
https://github.com/metabarcoding/obitools4.git
synced 2026-04-30 03:50:39 +00:00
[obiseq] Add length validation for qualities in SetQualities, Take Qualites and Subsequence
[obiseq] Add length validation for qualities in SetQualities, Take Qualites and Subsequence - Panic if sequence/qualities length mismatch when setting or taking qualities in BioSequence. - Add same check before slicing Qualities() for Subsequence to ensure consistency.
This commit is contained in:
@@ -499,6 +499,9 @@ func (s *BioSequence) SetQualities(qualities Quality) {
|
|||||||
if s.qualities != nil {
|
if s.qualities != nil {
|
||||||
RecycleSlice(&s.qualities)
|
RecycleSlice(&s.qualities)
|
||||||
}
|
}
|
||||||
|
if len(qualities) > 0 && len(qualities) != len(s.sequence) {
|
||||||
|
log.Panicf("[BioSequence.SetQualities] Sequence %s has a length of %d and qualities a length of %d", s.id, len(s.sequence), len(qualities))
|
||||||
|
}
|
||||||
s.qualities = CopySlice(qualities)
|
s.qualities = CopySlice(qualities)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -508,6 +511,9 @@ func (s *BioSequence) TakeQualities(qualities Quality) {
|
|||||||
if s.qualities != nil {
|
if s.qualities != nil {
|
||||||
RecycleSlice(&s.qualities)
|
RecycleSlice(&s.qualities)
|
||||||
}
|
}
|
||||||
|
if len(qualities) > 0 && len(qualities) != len(s.sequence) {
|
||||||
|
log.Panicf("[BioSequence.TakeQualities] Sequence %s has a length of %d and qualities a length of %d", s.id, len(s.sequence), len(qualities))
|
||||||
|
}
|
||||||
s.qualities = qualities
|
s.qualities = qualities
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+20
-2
@@ -48,7 +48,16 @@ func (sequence *BioSequence) Subsequence(from, to int, circular bool) (*BioSeque
|
|||||||
newSeq.sequence = CopySlice(sequence.Sequence()[from:to])
|
newSeq.sequence = CopySlice(sequence.Sequence()[from:to])
|
||||||
|
|
||||||
if sequence.HasQualities() {
|
if sequence.HasQualities() {
|
||||||
newSeq.qualities = CopySlice(sequence.Qualities()[from:to])
|
qual := sequence.Qualities()
|
||||||
|
if len(qual) != sequence.Len() {
|
||||||
|
log.Panicf(
|
||||||
|
"[BioSequence.Subsequence] Sequence %s has a length of %d and qualities a length of %d",
|
||||||
|
sequence.Id(),
|
||||||
|
sequence.Len(),
|
||||||
|
len(qual),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
newSeq.qualities = CopySlice(qual[from:to])
|
||||||
}
|
}
|
||||||
|
|
||||||
newSeq.id = fmt.Sprintf("%s_sub[%d..%d]", sequence.Id(), from+1, to)
|
newSeq.id = fmt.Sprintf("%s_sub[%d..%d]", sequence.Id(), from+1, to)
|
||||||
@@ -58,7 +67,16 @@ func (sequence *BioSequence) Subsequence(from, to int, circular bool) (*BioSeque
|
|||||||
newSeq.Write(sequence.Sequence()[0:to])
|
newSeq.Write(sequence.Sequence()[0:to])
|
||||||
|
|
||||||
if sequence.HasQualities() {
|
if sequence.HasQualities() {
|
||||||
newSeq.WriteQualities(sequence.Qualities()[0:to])
|
qual := sequence.Qualities()
|
||||||
|
if len(qual) != sequence.Len() {
|
||||||
|
log.Panicf(
|
||||||
|
"[BioSequence.Subsequence] Sequence %s has a length of %d and qualities a length of %d",
|
||||||
|
sequence.Id(),
|
||||||
|
sequence.Len(),
|
||||||
|
len(qual),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
newSeq.WriteQualities(qual[0:to])
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user