1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
//! # disambiseq
//!
//! ## Background
//!
//! I've rewritten this functionality a few times for different use cases
//! and put it into a standalone crate since it might be useful to others.
//!
//! This is used to generate unambiguous one-off mismatch libraries for
//! a set of DNA sequences.
//!
//! ## Usage
//!
//! ### Creating a new unambiguous set
//!
//! ```rust
//! use disambiseq::Disambiseq;
//!
//! let sequences = vec![
//!     "ACT".to_string(),
//!     "AGT".to_string()
//! ];
//! let dsq = Disambiseq::from_slice(&sequences);
//! println!("{:#?}", dsq);
//! ```
//!
//! ### Visualizing the set
//!
//! ```text
//! Disambiseq {
//!     unambiguous: {
//!         "TCT": "ACT",
//!         "ACA": "ACT",
//!         "CCT": "ACT",
//!         "ACC": "ACT",
//!         "CGT": "AGT",
//!         "GGT": "AGT",
//!         "AGA": "AGT",
//!         "GCT": "ACT",
//!         "ACG": "ACT",
//!         "TGT": "AGT",
//!         "AGC": "AGT",
//!         "AGT": "ACT",
//!         "AGG": "AGT",
//!     },
//!     parents: {
//!         "AGT",
//!         "ACT",
//!     },
//!     ambiguous: {
//!         "ATT",
//!         "AAT",
//!     },
//! }
//! ```
//!
//! ### Querying the Set
//!
//! ```rust
//! use disambiseq::Disambiseq;
//!
//! let sequences = vec![
//!     "ACT".to_string(),
//!     "AGT".to_string()
//! ];
//! let dsq = Disambiseq::from_slice(&sequences);
//!
//! // retrieve a parental sequence
//! assert_eq!(dsq.get_parent("ACT").unwrap().sequence(), "ACT");
//!
//! // retrieve a mutation sequence's parent
//! assert_eq!(dsq.get_parent("TCT").unwrap().sequence(), "ACT");
//!
//! // exclude sequences with ambiguous parents
//! assert_eq!(dsq.get_parent("AAT"), None);
//! assert_eq!(dsq.get_parent("ATT"), None);
//! ```

mod disambibyte;
mod disambiseq;
mod sequence;
mod utils;
pub use crate::{
    disambibyte::{ByteWrapper, Disambibyte},
    disambiseq::{Disambiseq, SeqWrapper},
    sequence::Sequence,
};