diff --git a/src/lib.rs b/src/lib.rs index 7a39c87..af86f2a 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -23,26 +23,6 @@ pub fn main() { let args = cli_args(); let start = Instant::now(); - // Trees initialise with a default rate matrix equal to this - // let q: na::Matrix4 = na::Matrix4::new( - // -1.0, - // 1.0 / 3.0, - // 1.0 / 3.0, - // 1.0 / 3.0, - // 1.0 / 3.0, - // -1.0, - // 1.0 / 3.0, - // 1.0 / 3.0, - // 1.0 / 3.0, - // 1.0 / 3.0, - // -1.0, - // 1.0 / 3.0, - // 1.0 / 3.0, - // 1.0 / 3.0, - // 1.0 / 3.0, - // -1.0, - // ); - // let mut tr = vector_to_tree(&random_vector(4)); // tr.add_genetic_data(&String::from("/Users/joel/Downloads/listeria0.aln")); let mut tr = vector_to_tree(&random_vector(27), >R::default()); @@ -55,7 +35,7 @@ pub fn main() { if !args.no_optimise { let start = Instant::now(); - tr.hillclimb(5); + tr.hillclimb(1); let end = Instant::now(); eprintln!("Done in {}s", end.duration_since(start).as_secs()); diff --git a/src/tree.rs b/src/tree.rs index ced199a..5c8d412 100644 --- a/src/tree.rs +++ b/src/tree.rs @@ -124,6 +124,11 @@ impl Tree { self.get_node(index).unwrap().branch_length } + pub fn get_branchlengths(&self) -> nalgebra::Vector1 { + let out: Vec = self.nodes.iter().map(|node| node.branch_length).collect(); + nalgebra::Vector1::from_vec(out) + } + // Find maximum node depth pub fn max_treedepth(&self) -> usize { self.nodes.iter().map(|node| node.depth).max().unwrap_or(0) diff --git a/src/tree_iterators.rs b/src/tree_iterators.rs index c6a3396..efe9a71 100644 --- a/src/tree_iterators.rs +++ b/src/tree_iterators.rs @@ -1,3 +1,5 @@ +use std::thread::current; + use clap::builder::NonEmptyStringValueParser; use ndarray::AssignElem; @@ -108,29 +110,28 @@ impl<'a, T: RateMatrix> Tree { // Changes iterator // #[derive(Debug)] -// pub struct ChangeOrder { -// nodevec: Option>, +// pub struct ChangeOrder<'a, T: RateMatrix> { +// tree: &'a mut Tree, +// current_vec: Vec, // } -// impl Iterator for ChangeOrder { +// impl<'a, T: RateMatrix> Iterator for ChangeOrder<'a, T> { // type Item = &'a Node; -// Will changes be faster and easier using -// Vec>> ? -// fn next(&mut self) -> Option { -// if self.tree.changes.is_empty() { -// return None; -// } - -// while !self.tree.changes.contains_key(&self.depth) { -// self.depth -= 1; +// fn next(&mut self) -> Option { +// if self.tree.changes.is_empty() { +// return None +// } else if self.current_vec.is_empty() { +// let k = *self.tree.changes.keys().max().unwrap(); +// self.current_vec = self.tree.changes.remove(&k).unwrap(); +// let x = self.current_vec.pop().unwrap(); +// let n: &'a Node = self.tree.get_node(x)?; +// return Some(n) +// } else { +// let x = self.current_vec.pop().unwrap(); +// let n: Self::Item = self.tree.get_node(x)?; +// return Some(n) +// }; // } - -// let x = self.tree.changes.remove(&self.depth).unwrap(); -// let ni = x.pop(); -// self.tree.changes.insert(self.depth, x); - -// next_node -// } // } // impl<'a> Tree {