From ae0b26aadcd0c72e6ba3dac63610af64b72d86ea Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Thu, 24 Aug 2023 13:28:25 -0700 Subject: [PATCH] MRG: add jaccard similarity and intersect bp output to `manysearch`; adjust column names (#52) * add jaccard output * fix signature names * add a test for jaccard and containment values --- src/lib.rs | 19 ++++++++---- src/python/tests/test-data/1.combined.sig.gz | Bin 37266 -> 37346 bytes src/python/tests/test_search.py | 29 +++++++++++++++++++ 3 files changed, 42 insertions(+), 6 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 28a0314a..8e5af543 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -208,10 +208,10 @@ fn manysearch>( }; let thrd = std::thread::spawn(move || { let mut writer = BufWriter::new(out); - writeln!(&mut writer, "query,query_md5,match,match_md5,containment").unwrap(); - for (query, query_md5, m, m_md5, overlap) in recv.into_iter() { - writeln!(&mut writer, "\"{}\",{},\"{}\",{},{}", - query, query_md5, m, m_md5, overlap).ok(); + writeln!(&mut writer, "query_name,query_md5,match_name,match_md5,containment,jaccard,intersect_hashes").unwrap(); + for (query, query_md5, m, m_md5, cont, jaccard, overlap) in recv.into_iter() { + writeln!(&mut writer, "\"{}\",{},\"{}\",{},{},{},{}", + query, query_md5, m, m_md5, cont, jaccard, overlap).ok(); } }); @@ -241,14 +241,21 @@ fn manysearch>( // search for matches & save containment. for q in queries.iter() { let overlap = q.minhash.count_common(&search_sm.minhash, false).unwrap() as f64; - let size = q.minhash.size() as f64; + let query_size = q.minhash.size() as f64; - let containment = overlap / size; + let mut merged = q.minhash.clone(); + merged.merge(&search_sm.minhash).ok(); + let total_size = merged.size() as f64; + + let containment = overlap / query_size; + let jaccard = overlap / total_size; if containment > threshold { results.push((q.name.clone(), q.md5sum.clone(), search_sm.name.clone(), search_sm.md5sum.clone(), + containment, + jaccard, overlap)) } } diff --git a/src/python/tests/test-data/1.combined.sig.gz b/src/python/tests/test-data/1.combined.sig.gz index 0d039fa7c36c0519a4a2f024e0c129a2291bb6df..97d0e1cdaa3c30246682b82f5efa7253fbcb966d 100644 GIT binary patch delta 32668 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 delta 32564 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 b{o~*N^FRLZ$M_fi@1On;vu4qiQY`@h^`8sg diff --git a/src/python/tests/test_search.py b/src/python/tests/test_search.py index 6526948a..17fe36e7 100644 --- a/src/python/tests/test_search.py +++ b/src/python/tests/test_search.py @@ -45,6 +45,35 @@ def test_simple(runtmp): df = pandas.read_csv(output) assert len(df) == 5 + dd = df.to_dict(orient='index') + print(dd) + + for idx, row in dd.items(): + # identical? + if row['query_md5'] == row['match_md5']: + assert row['match_name'] == row['query_name'] + assert float(row['containment'] == 1.0) + assert float(row['jaccard'] == 1.0) + else: + # confirm hand-checked numbers + q = row['query_name'].split()[0] + m = row['match_name'].split()[0] + jaccard = float(row['jaccard']) + cont = float(row['containment']) + intersect_hashes = int(row['intersect_hashes']) + + jaccard = round(jaccard, 4) + cont = round(cont, 4) + print(q, m, f"{jaccard:.04}", f"{cont:.04}") + + if q == 'NC_011665.1' and m == 'NC_009661.1': + assert jaccard == 0.3207 + assert cont == 0.4828 + + if q == 'NC_009661.1' and m == 'NC_011665.1': + assert jaccard == 0.3207 + assert cont == 0.4885 + def test_simple_threshold(runtmp): # test with a simple threshold => only 3 results