From 4f2a9b9ae7d73cfc45aae280bff93b38f700e78f Mon Sep 17 00:00:00 2001 From: "Thomas A. Poulsen" Date: Sat, 31 Oct 2020 14:50:51 +0100 Subject: [PATCH 1/2] Allow hamming circle around N --- src/demultiplexer.jl | 2 +- test/demultiplexer.jl | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/demultiplexer.jl b/src/demultiplexer.jl index 38990a010..92b9168e3 100644 --- a/src/demultiplexer.jl +++ b/src/demultiplexer.jl @@ -237,7 +237,7 @@ function hamming_circle(seq, m) for rs in Iterators.product(fill(1:4, m)...) seq′ = copy(seq) for (p, r) in zip(ps, rs) - if findfirst(isequal(seq[p]), ACGT) ≤ r + if findfirst(isequal(seq[p]), ACGTN) ≤ r r += 1 end seq′[p] = ACGTN[r] diff --git a/test/demultiplexer.jl b/test/demultiplexer.jl index fd9ab72d5..ca33aefdb 100644 --- a/test/demultiplexer.jl +++ b/test/demultiplexer.jl @@ -118,4 +118,13 @@ @test n_ok / 10_000 > 0.99 @test n_ok < n_ok_with_fallback end + + @testset "Hamming circle" begin + @test sort(BioSequences.hamming_circle(dna"A",1)) == [dna"C",dna"G",dna"T",dna"N"] + @test sort(BioSequences.hamming_circle(dna"N",1)) == [dna"A",dna"C",dna"G",dna"T"] + end + @testset "Levenshtein circle" begin + @test sort(BioSequences.levenshtein_circle(dna"A",1)) == [dna"", dna"C", dna"CA", dna"G", dna"GA", dna"T", dna"TA", dna"N", dna"NA"] + @test sort(BioSequences.levenshtein_circle(dna"N",1)) == [dna"", dna"A", dna"AN", dna"C", dna"CN", dna"G", dna"GN", dna"T", dna"TN"] + end end From 4e1bda1f496a47b1a1b13ffb0f3ef25dfe91a0b5 Mon Sep 17 00:00:00 2001 From: "Thomas A. Poulsen" Date: Tue, 10 Nov 2020 20:54:44 +0100 Subject: [PATCH 2/2] add more tests --- test/demultiplexer.jl | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/test/demultiplexer.jl b/test/demultiplexer.jl index ca33aefdb..aa22bd340 100644 --- a/test/demultiplexer.jl +++ b/test/demultiplexer.jl @@ -127,4 +127,13 @@ @test sort(BioSequences.levenshtein_circle(dna"A",1)) == [dna"", dna"C", dna"CA", dna"G", dna"GA", dna"T", dna"TA", dna"N", dna"NA"] @test sort(BioSequences.levenshtein_circle(dna"N",1)) == [dna"", dna"A", dna"AN", dna"C", dna"CN", dna"G", dna"GN", dna"T", dna"TN"] end + @testset "Levenshtein distance 2" begin + barcodes = [dna"ATGGC", dna"GGAAG"] + dplxr2 = Demultiplexer(barcodes, n_max_errors=2, distance=:levenshtein) + + @test demultiplex(dplxr2, dna"ATGGC") === (1, 0) + @test demultiplex(dplxr2, dna"ATGG") === (1, 1) + @test demultiplex(dplxr2, dna"ATG") === (1, 2) + @test demultiplex(dplxr2, dna"TACG") === (0, -1) + end end