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:
Eric Coissac
2026-01-14 19:18:08 +01:00
parent 52244cdb64
commit b49aba9c09
4 changed files with 21 additions and 13 deletions

View File

@@ -78,6 +78,7 @@ func ISequenceChunkOnDisk(iterator obiiter.IBioSequence,
dereplicate bool,
na string,
statsOn obiseq.StatsOnDescriptions,
uniqueClassifier *obiseq.BioSequenceClassifier,
) (obiiter.IBioSequence, error) {
obiutils.RegisterAPipe()
dir, err := tempDir()
@@ -120,18 +121,21 @@ func ISequenceChunkOnDisk(iterator obiiter.IBioSequence,
if dereplicate {
u := make(map[string]*obiseq.BioSequence)
var source string
uniqueClassifier.Reset()
for iseq.Next() {
batch := iseq.Get()
source = batch.Source()
for _, seq := range batch.Slice() {
sstring := seq.String()
prev, ok := u[sstring]
// Use composite key: sequence + categories
code := uniqueClassifier.Code(seq)
key := uniqueClassifier.Value(code)
prev, ok := u[key]
if ok {
prev.Merge(seq, na, true, statsOn)
} else {
u[sstring] = seq
u[key] = seq
}
}
}