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
//! # Utilities for alignment manipulation and summary statistics
//! SEGUL provides fast and memory efficient utilities for alignment manipulation and summary statistics.
//!
//! ## Features:
//! 1. Alignment concatenation
//! 2. Alignment conversion
//! 3. Alignment filtering
//! 4. Alignment pairwise genetic distances
//! 5. Alignment partition conversion
//! 6. Alignment splitting
//! 7. Alignment summary statistics
//! 8. Unalign alignments
//! 9. Contiguous sequence summary statistics
//! 10. Raw read summary statistics
//! 11. Sample distribution mapping
//! 12. Sequence extraction
//! 13. Sequence filtering
//! 14. Sequence ID renaming
//! 15. Sequence removal
//! 16. Sequence translation
//! 17. Sequence transposition
//! 18. Sequence unique ID parsing
//!
//! ## Cargo features
//!
//! All features are enabled by default. Disable default features and pick
//! the ones you need to reduce compile time and dependencies:
//!
//! | Feature | Provides |
//! |------------|-----------------------------------------------------------|
//! | `align` | Alignment concat, convert, distance, filter, split, summary, trim |
//! | `sequence` | Sequence extract, filter, rename, remove, translate, transpose, ID |
//! | `read` | Raw read (FASTQ) summary statistics |
//! | `contig` | Contiguous sequence summary statistics |
//! | `maf` | Multiple alignment format (MAF) conversion |
//!
//! ```toml
//! segul-core = { version = "0.24", default-features = false, features = ["read"] }
//! ```
//!
//! ## Example
//!
//! ### Convert fasta to philip alignment
//! ```rust
//! use std::path::Path;
//!
//! use tempfile::TempDir;
//!
//! use segul_core::helper::types::{DataType, Header, InputFmt, OutputFmt, SeqMatrix};
//! use segul_core::helper::sequence::SeqParser;
//! use segul_core::writer::sequences::SeqWriter;
//!
//! let input = Path::new("tests/files/simple.fas");
//! let input_fmt = InputFmt::Fasta;
//! let datatype = DataType::Dna;
//! // Replace binding with your output directory, for example:
//! // let output_path = Path::new("output").join("my_output_alignment");
//! let binding = TempDir::with_prefix("temp").unwrap();
//! let output_path = binding.path().join("my_output_alignment");
//! let output_fmt = OutputFmt::Phylip;
//! let (sequence_matrix, header) = SeqParser::new(input, &datatype).parse(&input_fmt);
//! let mut writer = SeqWriter::new(&output_path, &sequence_matrix, &header);
//! writer.write_sequence(&output_fmt).unwrap()
//! ```