mirror of
https://github.com/metabarcoding/obitools4.git
synced 2025-06-29 16:20:46 +00:00
Patch a bug for multiple amplicon per sequence.
Former-commit-id: b252d2de8e1a85d65c2951aa1958ee038e35741d
This commit is contained in:
@ -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
|
||||
|
Reference in New Issue
Block a user