# gtdb_tree
A library for parsing Newick format files, especially GTDB tree files.
## Features
- Parse Newick formatted strings into a structured representation of trees.
- Handle various formats of Newick strings, including those with bootstrap values and distances.
## Installation
Add this crate to your `Cargo.toml`:
```toml
[dependencies]
gtdb_tree = "0.1.9"
```
## Usage
Here's a simple example of how to use the library:
```rust
use gtdb_tree::tree::parse_tree;
fn main() {
let newick_str = "((A:0.1,B:0.2):0.3,C:0.4);";
match parse_tree(newick_str) {
Ok(nodes) => println!("Parsed nodes: {:?}", nodes),
Err(e) => println!("Error parsing: {:?}", e),
}
}
```
## Python Usage
A Python package for parsing GTDB trees using Rust.
## Installation
```
pip install gtdb_tree
```
```python
import gtdb_tree
result = gtdb_tree.parse_tree("((A:0.1,B:0.2):0.3,C:0.4);")
print(result)
```
## Advanced Usage
### Custom Node Parser
You can provide a custom parser function to handle special node formats:
```python
import gtdb_tree
def custom_parser(node_str):
# Custom parsing logic
name, length = node_str.split(':')
return name, 100.0, float(length) # name, bootstrap, length
result = gtdb_tree.parse_tree("((A:0.1,B:0.2):0.3,C:0.4);", custom_parser=custom_parser)
print(result)
```
## Working with Node Objects
## Each Node object in the result has the following attributes:
* id: Unique identifier for the node
* name: Name of the node
* bootstrap: Bootstrap value (if available)
* length: Branch length
* parent: ID of the parent node