From 1d1100e81a31477bce9e5eb95bd5c63427ba6fbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20=C3=81lvarez=20Herrera?= Date: Sat, 2 May 2026 13:35:46 +0200 Subject: [PATCH] fix: apply negative branch length correction while there are negative lengths --- workflow/scripts/report/allele_freq_tree_data.R | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/workflow/scripts/report/allele_freq_tree_data.R b/workflow/scripts/report/allele_freq_tree_data.R index 9b20ce1..443f4fd 100644 --- a/workflow/scripts/report/allele_freq_tree_data.R +++ b/workflow/scripts/report/allele_freq_tree_data.R @@ -19,11 +19,13 @@ fix_negative_edge_length <- function(nj.tree) { ) %>% as.data.table() colnames(edge_infos) <- c("from", "to", "length") - nega_froms <- edge_infos[length < 0, sort(unique(from))] - for (nega_from in nega_froms) { - minus_length <- edge_infos[from == nega_from, ][order(length)][1, length] - edge_infos[from == nega_from, length := length - minus_length] - edge_infos[to == nega_from, length := length + minus_length] + while (any(edge_infos$length < 0)) { + nega_froms <- edge_infos[length < 0, sort(unique(from))] + for (nega_from in nega_froms) { + minus_length <- edge_infos[from == nega_from, ][order(length)][1, length] + edge_infos[from == nega_from, length := length - minus_length] + edge_infos[to == nega_from, length := length + minus_length] + } } nj.tree$edge.length <- edge_infos$length nj.tree