Patch a bug for multiple amplicon per sequence.

Former-commit-id: b252d2de8e1a85d65c2951aa1958ee038e35741d
This commit is contained in:
2023-03-31 15:10:25 +02:00
parent 84b3e4d097
commit 3f69fa41d6
4 changed files with 42 additions and 33 deletions

View File

@ -11,7 +11,6 @@ func IFragments(minsize, length, overlap, size, nworkers int) Pipeable {
step := length - overlap
ifrg := func(iterator IBioSequence) IBioSequence {
order := obiutils.AtomicCounter()
newiter := MakeIBioSequence()
iterator = iterator.SortBatches()
@ -22,39 +21,45 @@ func IFragments(minsize, length, overlap, size, nworkers int) Pipeable {
}()
f := func(iterator IBioSequence, id int) {
news := obiseq.MakeBioSequenceSlice()
for iterator.Next() {
news := obiseq.MakeBioSequenceSlice()
sl := iterator.Get()
for _, s := range sl.Slice() {
if s.Len() <= minsize {
news = append(news, s)
} else {
for i := 0; i < s.Len(); i += step {
end := obiutils.MinInt(i+length, s.Len())
fusion:=false
if (s.Len() - end) < step {
end = s.Len()
fusion = true
}
frg, err := s.Subsequence(i, end, false)
if err != nil {
log.Panicln(err)
}
news = append(news, frg)
if len(news) >= size {
newiter.Push(MakeBioSequenceBatch(order(), news))
news = obiseq.MakeBioSequenceSlice()
// if len(news) >= size {
// newiter.Push(MakeBioSequenceBatch(order(), news))
// news = obiseq.MakeBioSequenceSlice()
// }
if fusion {
i = s.Len()
}
}
s.Recycle()
}
if len(news) >= size {
o := order()
newiter.Push(MakeBioSequenceBatch(o, news))
news = obiseq.MakeBioSequenceSlice()
}
} // End of the slice loop
newiter.Push(MakeBioSequenceBatch(sl.Order(), news))
sl.Recycle(false)
} // End of the iterator loop
if len(news) > 0 {
newiter.Push(MakeBioSequenceBatch(order(), news))
}
// if len(news) > 0 {
// newiter.Push(MakeBioSequenceBatch(order(), news))
// }
newiter.Done()
@ -65,7 +70,7 @@ func IFragments(minsize, length, overlap, size, nworkers int) Pipeable {
}
go f(iterator, 0)
return newiter
return newiter.SortBatches().Rebatch(size)
}
return ifrg