@@ -148,11 +148,11 @@ io.ReportProgressMessageMD('FEL', 'selector', 'Branches to use as the test set
148148
149149fel.branch_sets = {};
150150
151- utility.ForEachPair (fel.selected_branches[0], "_branch_", "_model_",
152- "
151+ for (_branch_, _model_; in; fel.selected_branches[0]) {
153152 utility.EnsureKey (fel.branch_sets, _model_);
154153 fel.branch_sets[_model_] + _branch_;
155- ");
154+ }
155+
156156
157157fel.branch_class_count = utility.Array1D (fel.branch_sets);
158158fel.scaler_parameter_names = {};
@@ -164,23 +164,22 @@ fel.branches.testable = {};
164164fel.branches.has_background = FALSE;
165165
166166
167- utility.ForEachPair (fel.branch_sets, "_group_", "_branches_",
168- "
169- if (_group_ != terms.tree_attributes.background) {
170- fel.site_tested_classes [_group_] = 'Site relative non-synonymous rate (' + _group_ + ' branches)';
171- fel.branch_class_counter += 1;
172- fel.branches.testable + _group_;
173- fel.scaler_parameter_names [_group_] = 'fel.beta_scaler_group_' + fel.branch_class_counter;
174- io.ReportProgressMessageMD('FEL', 'selector', '* Selected ' + Abs(_branches_) + ' branches in group _' + _group_ + '_ : \\\`' + Join (', ',_branches_) + '\\\`')
175- } else {
176- fel.scaler_parameter_names [_group_] = 'fel.beta_scaler_background';
177- fel.site_tested_classes [_group_] = 'Site relative non-synonymous rate (reference branches)';
178- fel.branches.has_background = TRUE;
179- io.ReportProgressMessageMD('FEL', 'selector', '* ' + Abs(_branches_) + ' branches are in the background group : \\\`' + Join (', ',_branches_) + '\\\`')
180- }
181- "
182- );
167+ for (_group_, _branches_; in; fel.branch_sets) {
168+ if (_group_ != terms.tree_attributes.background) {
169+ fel.site_tested_classes [_group_] = 'Site relative non-synonymous rate (' + _group_ + ' branches)';
170+ fel.branch_class_counter += 1;
171+ fel.branches.testable + _group_;
172+ fel.scaler_parameter_names [_group_] = 'fel.beta_scaler_group_' + fel.branch_class_counter;
173+ io.ReportProgressMessageMD('FEL', 'selector', '* Selected ' + Abs(_branches_) + ' branches in group _' + _group_ + '_ : \\\`' + Join (', ',_branches_) + '\\\`')
174+ } else {
175+ fel.scaler_parameter_names [_group_] = 'fel.beta_scaler_background';
176+ fel.site_tested_classes [_group_] = 'Site relative non-synonymous rate (reference branches)';
177+ fel.branches.has_background = TRUE;
178+ io.ReportProgressMessageMD('FEL', 'selector', '* ' + Abs(_branches_) + ' branches are in the background group : \\\`' + Join (', ',_branches_) + '\\\`')
179+ }
180+ }
183181
182+ io.CheckAssertion ("utility.Array1D(fel.branches.testable) > 0", "Must select a non-empty testable branch set");
184183
185184
186185fel.test_count = 1;
@@ -614,6 +613,7 @@ lfunction fel.select_branches(partition_info) {
614613 selectTheseForTesting[k][1] = "Set of " + available_models[list_models[k-3]] + " unlabeled branches";
615614 }
616615 }
616+
617617
618618 ChoiceList(testSet, "Choose sets of branches to compare. If more than one set is chosen, pairwise comparisons will be carried out in addition to a group-level difference test.", 0, NO_SKIP, selectTheseForTesting);
619619 io.CheckAssertion ("`&testSet[0]` >= 0", "User cancelled branch selection; analysis terminating");
@@ -623,6 +623,7 @@ lfunction fel.select_branches(partition_info) {
623623 tree_for_analysis = (partition_info[0])[utility.getGlobalValue("terms.data.tree")];
624624 branch_set_count = utility.Array1D (testSet);
625625 test_sets = {};
626+
626627
627628 for (k = 0; k < branch_set_count; k+=1) {
628629 tag_test = selectTheseForTesting [testSet[k]][0];
@@ -632,6 +633,7 @@ lfunction fel.select_branches(partition_info) {
632633 test_sets[tag_test] = TRUE;
633634 }
634635
636+
635637 if (test_sets / 'Random set of branches') {
636638 KeywordArgument ("random-subset", "How many branches in the random subset to test", (internal_count+leaf_count)$2);
637639 test_count = io.PromptUser ("How many branches in the test set", (internal_count+leaf_count)$2,1,(internal_count+leaf_count), TRUE);
0 commit comments