1- RequireVersion ("2.5.79 ");
1+ RequireVersion ("2.5.91 ");
22
33
44LoadFunctionLibrary("libv3/all-terms.bf"); // must be loaded before CF3x4
@@ -40,8 +40,11 @@ Version 4.2 adds calculation of MH-attributable fractions of substitutions.
4040Version 4.5 adds an 'error absorption' component
4141
4242Version 4.6 adds support for MSS-type models
43+
44+ Version 4.7 adds user configurable options for the error class.
45+
4346",
44- terms.io.version : "4.6 ",
47+ terms.io.version : "4.7 ",
4548 terms.io.reference : "*Gene-wide identification of episodic selection*, Mol Biol Evol. 32(5):1365-71, *Synonymous Site-to-Site Substitution Rate Variation Dramatically Inflates False Positive Rates of Selection Analyses: Ignore at Your Own Peril*, Mol Biol Evol. 37(8):2430-2439",
4649 terms.io.authors : "Sergei L Kosakovsky Pond",
4750 terms.io.contact : "
[email protected] ",
@@ -197,7 +200,7 @@ if (busted.do_srv) {
197200 busted.synonymous_rate_classes = io.PromptUser ("The number alpha rate classes to include in the model [1-10, default 3]", busted.synonymous_rate_classes, 1, 10, TRUE);
198201}
199202
200- KeywordArgument ("error-sink", "[Advanced experimental setting] Include a rate class to capture misalignment artifacts", "No");
203+ KeywordArgument ("error-sink", "Include a rate class to capture misalignment artifacts", "No");
201204
202205busted.error_sink = io.SelectAnOption ({
203206 {"No", "Standard dN/dS model (all rates are used for inference)"}
@@ -206,8 +209,26 @@ busted.error_sink = io.SelectAnOption ({
206209
207210selection.io.json_store_setting (busted.json, "error-sink", busted.error_sink);
208211
212+ busted.positive_class_range = terms.range_1_100;
213+ busted.error_class_range = terms.range_high;
214+ busted.error_sink_weight = terms.range_small_fraction;
215+ busted.error_class_bound = 100;
216+ busted.error_class_weight = 0.01;
217+
209218if (busted.error_sink) {
210219 busted.rate_classes += 1;
220+ KeywordArgument ("error-sink-bound", "[Advanced setting] Set the lower bound for error-class dN/dS", "100");
221+ busted.error_class_bound =
222+ io.PromptUser ("[Advanced setting] Set the lower bound for error-class dN/dS", 100, 1, 1e6, FALSE);
223+
224+ busted.positive_class_range [terms.upper_bound] = "" + busted.error_class_bound;
225+ busted.error_class_range [terms.lower_bound] = "" + busted.error_class_bound;
226+ KeywordArgument ("error-sink-weight", "[Advanced setting] Set the maximum weight for error-class dN/dS", "0.01");
227+ busted.error_class_weight =
228+ io.PromptUser ("[Advanced setting] Set the maximum weight for error-class dN/dS", 0.01, 1e-8, 1.0, FALSE);
229+
230+ busted.error_sink_weight [terms.upper_bound] = "" + busted.error_class_weight;
231+
211232}
212233
213234KeywordArgument ("grid-size", "The number of points in the initial distributional guess for likelihood fitting", 250);
@@ -513,14 +534,12 @@ busted.omega_eds_w_parameter = terms.AddCategory (utility.getGlobalValue("terms.
513534
514535
515536if (busted.error_sink) {
516- parameters.SetRange (model.generic.GetGlobalParameter (busted.test.bsrel_model , terms.AddCategory (terms.parameters.omega_ratio,1)), terms.range_high);
517- parameters.SetRange (model.generic.GetGlobalParameter (busted.background.bsrel_model , terms.AddCategory (terms.parameters.omega_ratio,1)), terms.range_high);
518- parameters.SetRange (model.generic.GetGlobalParameter (busted.test.bsrel_model , busted.omega_eds_parameter), terms.range_1_100);
519- parameters.SetRange (model.generic.GetGlobalParameter (busted.background.bsrel_model , busted.omega_eds_parameter), terms.range_1_100);
520- parameters.SetRange (model.generic.GetGlobalParameter (busted.test.bsrel_model , terms.AddCategory (terms.parameters.omega_ratio,1)), terms.range_high);
521- parameters.SetRange (model.generic.GetGlobalParameter (busted.background.bsrel_model , terms.AddCategory (terms.parameters.omega_ratio,1)), terms.range_high);
522- parameters.SetRange (model.generic.GetGlobalParameter (busted.test.bsrel_model , terms.AddCategory (utility.getGlobalValue("terms.mixture.mixture_aux_weight"), 1)),terms.range_small_fraction);
523- parameters.SetRange (model.generic.GetGlobalParameter (busted.background.bsrel_model , terms.AddCategory (utility.getGlobalValue("terms.mixture.mixture_aux_weight"), 1)),terms.range_small_fraction);
537+ parameters.SetRange (model.generic.GetGlobalParameter (busted.test.bsrel_model , terms.AddCategory (terms.parameters.omega_ratio,1)), busted.error_class_range);
538+ parameters.SetRange (model.generic.GetGlobalParameter (busted.background.bsrel_model , terms.AddCategory (terms.parameters.omega_ratio,1)), busted.error_class_range);
539+ parameters.SetRange (model.generic.GetGlobalParameter (busted.test.bsrel_model , busted.omega_eds_parameter), busted.positive_class_range);
540+ parameters.SetRange (model.generic.GetGlobalParameter (busted.background.bsrel_model , busted.omega_eds_parameter), busted.positive_class_range);
541+ parameters.SetRange (model.generic.GetGlobalParameter (busted.test.bsrel_model , terms.AddCategory (utility.getGlobalValue("terms.mixture.mixture_aux_weight"), 1)), busted.error_sink_weight);
542+ parameters.SetRange (model.generic.GetGlobalParameter (busted.background.bsrel_model , terms.AddCategory (utility.getGlobalValue("terms.mixture.mixture_aux_weight"), 1)), busted.error_sink_weight);
524543} else {
525544 parameters.SetRange (model.generic.GetGlobalParameter (busted.test.bsrel_model , busted.omega_eds_parameter), terms.range_gte1);
526545}
@@ -1610,10 +1629,10 @@ function busted.init_grid_setup (omega_distro, error_sink, rate_count) {
16101629 busted.initial_grid_presets [_name_] = 0;
16111630
16121631 if (error_sink && _index_ == 0) {
1613- busted.initial_grid [_name_] = {{100,500,1000,5000 }};
1632+ busted.initial_grid [_name_] = {{busted.error_class_bound,busted.error_class_bound*5,busted.error_class_bound*10,busted.error_class_bound*50 }};
16141633 busted.initial_ranges [_name_] = {
1615- terms.lower_bound : 100 ,
1616- terms.upper_bound : 1000
1634+ terms.lower_bound : busted.error_class_bound ,
1635+ terms.upper_bound : busted.error_class_bound*50
16171636 };
16181637 } else {
16191638 busted.initial_ranges [_name_] = {
@@ -1629,7 +1648,7 @@ function busted.init_grid_setup (omega_distro, error_sink, rate_count) {
16291648 };
16301649 busted.initial_ranges [_name_] = {
16311650 terms.lower_bound : 1,
1632- terms.upper_bound : 100 ,
1651+ terms.upper_bound : busted.error_class_bound ,
16331652 terms.range_transform : "Sqrt(`terms.range_transform_variable`)"
16341653 };
16351654 busted.initial_grid_presets [_name_] = 2;
@@ -1647,7 +1666,7 @@ function busted.init_grid_setup (omega_distro, error_sink, rate_count) {
16471666 if (error_sink && _index_ == 0) {
16481667 busted.initial_grid [_name_] = {
16491668 {
1650- 0, 0.001, 0.0025, 0.025
1669+ 0, busted.error_class_weight / 64, busted.error_class_weight / 32 , busted.error_class_weight / 4
16511670 }
16521671 };
16531672 busted.initial_ranges [_name_] = {
0 commit comments