segul_core/lib.rs
1//! # Utilities for alignment manipulation and summary statistics
2//! SEGUL provides fast and memory efficient utilities for alignment manipulation and summary statistics.
3//!
4//! ## Features:
5//! 1. Alignment concatenation
6//! 2. Alignment conversion
7//! 3. Alignment filtering
8//! 4. Alignment pairwise genetic distances
9//! 5. Alignment partition conversion
10//! 6. Alignment splitting
11//! 7. Alignment summary statistics
12//! 8. Unalign alignments
13//! 9. Contiguous sequence summary statistics
14//! 10. Raw read summary statistics
15//! 11. Sample distribution mapping
16//! 12. Sequence extraction
17//! 13. Sequence filtering
18//! 14. Sequence ID renaming
19//! 15. Sequence removal
20//! 16. Sequence translation
21//! 17. Sequence transposition
22//! 18. Sequence unique ID parsing
23//!
24//! ## Cargo features
25//!
26//! All features are enabled by default. Disable default features and pick
27//! the ones you need to reduce compile time and dependencies:
28//!
29//! | Feature | Provides |
30//! |------------|-----------------------------------------------------------|
31//! | `align` | Alignment concat, convert, distance, filter, split, summary, trim |
32//! | `sequence` | Sequence extract, filter, rename, remove, translate, transpose, ID |
33//! | `read` | Raw read (FASTQ) summary statistics |
34//! | `contig` | Contiguous sequence summary statistics |
35//! | `maf` | Multiple alignment format (MAF) conversion |
36//!
37//! ```toml
38//! segul-core = { version = "0.24", default-features = false, features = ["read"] }
39//! ```
40//!
41//! ## Example
42//!
43//! ### Convert fasta to philip alignment
44//! ```rust
45//! use std::path::Path;
46//!
47//! use tempfile::TempDir;
48//!
49//! use segul_core::helper::types::{DataType, Header, InputFmt, OutputFmt, SeqMatrix};
50//! use segul_core::helper::sequence::SeqParser;
51//! use segul_core::writer::sequences::SeqWriter;
52//!
53//! let input = Path::new("tests/files/simple.fas");
54//! let input_fmt = InputFmt::Fasta;
55//! let datatype = DataType::Dna;
56//! // Replace binding with your output directory, for example:
57//! // let output_path = Path::new("output").join("my_output_alignment");
58//! let binding = TempDir::with_prefix("temp").unwrap();
59//! let output_path = binding.path().join("my_output_alignment");
60//! let output_fmt = OutputFmt::Phylip;
61//! let (sequence_matrix, header) = SeqParser::new(input, &datatype).parse(&input_fmt);
62//! let mut writer = SeqWriter::new(&output_path, &sequence_matrix, &header);
63//! writer.write_sequence(&output_fmt).unwrap()
64//! ```
65#![cfg_attr(docsrs, feature(doc_cfg))]
66
67pub mod core;
68pub mod helper;
69pub mod parser;
70pub mod stats;
71pub mod writer;