mirror of
https://github.com/metabarcoding/obitools4.git
synced 2026-02-03 06:40:33 +00:00
Implémentation du filtrage unique basé sur séquence et catégories
Ajout d'une fonctionnalité pour le filtrage unique qui prend en compte à la fois la séquence et les catégories. - Modification de la fonction ISequenceChunk pour accepter un classifieur unique optionnel - Implémentation du traitement unique sur disque en utilisant un classifieur composite - Mise à jour du classifieur utilisé pour le tri sur disque - Correction de la gestion des clés de unicité en utilisant le code et la valeur du classifieur - Mise à jour du numéro de commit
This commit is contained in:
@@ -28,29 +28,32 @@ func IUniqueSequence(iterator obiiter.IBioSequence,
|
||||
cat := opts.Categories()
|
||||
na := opts.NAValue()
|
||||
|
||||
var classifier *obiseq.BioSequenceClassifier
|
||||
// Classifier for bucketing: Hash only to control number of chunks
|
||||
bucketClassifier := obiseq.HashClassifier(opts.BatchCount())
|
||||
|
||||
// Classifier for uniqueness: Sequence + categories
|
||||
var uniqueClassifier *obiseq.BioSequenceClassifier
|
||||
if len(cat) > 0 {
|
||||
cls := make([]*obiseq.BioSequenceClassifier, len(cat)+1)
|
||||
cls[0] = obiseq.SequenceClassifier()
|
||||
for i, c := range cat {
|
||||
cls[i+1] = obiseq.AnnotationClassifier(c, na)
|
||||
}
|
||||
cls[0] = obiseq.HashClassifier(opts.BatchCount())
|
||||
classifier = obiseq.CompositeClassifier(cls...)
|
||||
uniqueClassifier = obiseq.CompositeClassifier(cls...)
|
||||
} else {
|
||||
classifier = obiseq.HashClassifier(opts.BatchCount())
|
||||
uniqueClassifier = obiseq.SequenceClassifier()
|
||||
}
|
||||
|
||||
if opts.SortOnDisk() {
|
||||
nworkers = 1
|
||||
iterator, err = ISequenceChunkOnDisk(iterator, classifier, true, na, opts.StatsOn())
|
||||
iterator, err = ISequenceChunkOnDisk(iterator, bucketClassifier, true, na, opts.StatsOn(), uniqueClassifier)
|
||||
|
||||
if err != nil {
|
||||
return obiiter.NilIBioSequence, err
|
||||
}
|
||||
|
||||
} else {
|
||||
iterator, err = ISequenceChunkOnMemory(iterator, classifier)
|
||||
iterator, err = ISequenceChunkOnMemory(iterator, bucketClassifier)
|
||||
|
||||
if err != nil {
|
||||
return obiiter.NilIBioSequence, err
|
||||
@@ -93,9 +96,9 @@ func IUniqueSequence(iterator obiiter.IBioSequence,
|
||||
}
|
||||
|
||||
for i := 0; i < nworkers-1; i++ {
|
||||
go ff(iterator.Split(), obiseq.SequenceClassifier())
|
||||
go ff(iterator.Split(), uniqueClassifier.Clone())
|
||||
}
|
||||
go ff(iterator, obiseq.SequenceClassifier())
|
||||
go ff(iterator, uniqueClassifier)
|
||||
|
||||
iMerged := iUnique.IMergeSequenceBatch(opts.NAValue(),
|
||||
opts.StatsOn(),
|
||||
|
||||
Reference in New Issue
Block a user