20 #define AWAR_BRANCH_ANALYSIS "branch_analysis"
21 #define AWAR_BRANCH_ANALYSIS_TMP "tmp/" AWAR_BRANCH_ANALYSIS
23 #define AWAR_BA_MIN_REL_DIFF AWAR_BRANCH_ANALYSIS "/min_rel_diff"
24 #define AWAR_BA_MIN_ABS_DIFF AWAR_BRANCH_ANALYSIS "/min_abs_diff"
25 #define AWAR_BA_MIN_DEPTH AWAR_BRANCH_ANALYSIS "/min_depth"
26 #define AWAR_BA_MIN_ROOTDIST AWAR_BRANCH_ANALYSIS "/min_rootdist"
27 #define AWAR_BA_DEGENERATION AWAR_BRANCH_ANALYSIS "/degeneration"
29 #define AWAR_BA_AUTOMARK_FORMAT AWAR_BRANCH_ANALYSIS_TMP "/auto_%s"
37 AW_window_simple *aws;
44 const char *local_awar_name (
const char *prefix,
const char *name) {
return GBS_global_string(
"%s%s/%s", prefix, suffix, name); }
46 void create_awars(
AW_root *aw_root);
47 void create_window(
AW_root *aw_root);
54 suffix(get_suffix(ntw))
56 create_awars(aw_root);
57 create_window(aw_root);
71 AW_awar *awar(
const char *name) {
return get_awroot()->
awar(name); }
73 void postmark_action()
const {
79 if (get_tree())
return true;
84 static void adapt_intawar_max(
AW_awar *awar,
int val,
int extra) {
89 if (max<val || ((val*2) < max && awar->
get_min()<val)) {
93 static void adapt_floatawar_max(
AW_awar *awar,
double val,
double extra) {
98 if (max<val || ((val*2) < max && awar->
get_min()<val)) {
115 double degeneration_factor = awar_degen->
read_float();
121 adapt_floatawar_max(awar_degen, found_max_degeneration, 1.0);
132 int min_depth = awar_min_depth->
read_int();
133 double min_rootdist = awar_min_rootdist->
read_float();
135 double found_max_rootdist;
138 set_info(get_tree()->mark_deep_leafs(min_depth, min_rootdist, found_max_depth, found_max_rootdist));
139 adapt_intawar_max(awar_min_depth, found_max_depth, 1);
140 adapt_floatawar_max(awar_min_rootdist, found_max_rootdist, 0.1);
150 double min_abs_diff = awar_abs_diff->
read_float();
151 double found_max_abs_diff;
154 set_info(get_tree()->mark_long_branches(min_rel_diff, min_abs_diff, found_max_abs_diff));
155 adapt_floatawar_max(awar_abs_diff, found_max_abs_diff, 0.1);
163 set_info(get_tree()->analyse_distances());
204 static bool avoid_recursion =
false;
205 if (!avoid_recursion) {
218 void BranchWindow::create_awars(
AW_root *aw_root) {
241 void BranchWindow::create_window(
AW_root *aw_root) {
242 aws =
new AW_window_simple;
244 aws->init(aw_root,
GBS_global_string(
"BRANCH_ANALYSIS_%s", suffix),
"Branch analysis");
245 aws->load_xfig(
"ad_branch.fig");
247 aws->auto_space(5, 5);
251 aws->create_button(
"CLOSE",
"CLOSE",
"C");
255 aws->create_button(
"HELP",
"HELP",
"H");
259 aws->label(
"Auto mark?");
260 aws->create_toggle(awar_automark->
awar_name);
267 aws->create_text_field(awar_info->
awar_name);
269 aws->button_length(28);
271 aws->at(
"dist_analyse");
273 aws->create_button(
"ANALYSE",
"Analyse distances in tree");
277 aws->create_button(
"UNMARK",
"Unmark all species");
279 const int FIELDWIDTH = 10;
280 const int SCALERWIDTH = 250;
282 aws->at(
"mark_long");
284 aws->create_button(
"MARK_LONG",
"Mark long branches");
290 aws->at(
"mark_deep");
292 aws->create_button(
"MARK_DEEP",
"Mark deep leafs");
297 aws->at(
"mark_degen");
299 aws->create_button(
"MARK_DEGENERATED",
"Mark degenerated branches");
309 if (!existingBranchWindow[ntw_id]) {
310 existingBranchWindow[ntw_id] =
new BranchWindow(aw_root, ntw);
313 return existingBranchWindow[ntw_id]->
get_window();
#define AWAR_BRANCH_ANALYSIS_TMP
static void mark_long_branches_cb(AW_window *, BranchWindow *bw)
static void automark_changed_cb(AW_root *, BranchWindow *bw)
void NT_mark_all_cb(UNFIXED, TREE_canvas *ntw, int mark_mode)
AW_window * get_window() const
static AWT_config_mapping_def branch_analysis_config_mapping[]
void AWT_insert_config_manager(AW_window *aww, AW_default default_file_, const char *id, const StoreConfigCallback &store_cb, const RestoreConfigCallback &load_or_reset_cb, const char *macro_id, const AWT_predefined_config *predef)
#define AWAR_BA_MIN_ROOTDIST
AW_awar * set_minmax(float min, float max)
const char * GBS_global_string(const char *templat,...)
void AW_POPDOWN(AW_window *window)
#define AWAR_BA_MIN_REL_DIFF
BranchWindow(AW_root *aw_root, TREE_canvas *ntw_)
static void mark_long_branches_automark_cb()
static void mark_degenerated_branches_cb(AW_window *, BranchWindow *bw)
AW_VARIABLE_TYPE get_type() const
#define MAX_NT_WINDOWS_NULLINIT
AW_awar * set_max(float max)
AW_awar * add_callback(const RootCallback &cb)
static BranchWindow * findAutomarkingBranchWindow()
WindowCallback makeHelpCallback(const char *helpfile)
#define AWAR_BA_AUTOMARK_FORMAT
static void distance_analysis_cb(AW_window *, BranchWindow *bw)
AW_awar * awar_float(const char *var_name, float default_value=0.0, AW_default default_file=AW_ROOT_DEFAULT)
AW_awar * automark_awar() const
void markDegeneratedBranches()
static void unmark_branches_cb(AW_window *, BranchWindow *bw)
#define AWAR_BA_MIN_DEPTH
AW_awar * awar(const char *awar)
double mark_degenerated_branches(double degeneration_factor)
AW_awar * awar_int(const char *var_name, long default_value=0, AW_default default_file=AW_ROOT_DEFAULT)
void request_structure_update()
static void tree_changed_cb(AW_root *, BranchWindow *bw)
void set_info(const char *msg) const
GB_ERROR write_string(const char *aw_string)
#define AWAR_BA_DEGENERATION
static BranchWindow * existingBranchWindow[MAX_NT_WINDOWS]
bool has_automark_set() const
GB_transaction ta(gb_var)
AW_awar * awar_string(const char *var_name, const char *default_value="", AW_default default_file=AW_ROOT_DEFAULT)
AW_window * NT_create_branch_analysis_window(AW_root *aw_root, TREE_canvas *ntw)
static void mark_deep_leafs_automark_cb()
static void mark_deep_leafs_cb(AW_window *, BranchWindow *bw)
static void mark_degenerated_branches_automark_cb()
AW_awar * get_awar_tree() const
#define AWAR_BA_MIN_ABS_DIFF
GB_ERROR write_int(long aw_int)
char * GBS_global_string_copy(const char *templat,...)