1LoadFunctionLibrary("../protein.bf"); 2LoadFunctionLibrary("../parameters.bf"); 3LoadFunctionLibrary("../frequencies.bf"); 4LoadFunctionLibrary("../../UtilityFunctions.bf"); 5LoadFunctionLibrary("../../all-terms.bf"); 6 7 8/** @module models.protein.empirical */ 9 10/** 11 * @name models.protein.empirical.ModelDescription 12 * @param {String} type 13 * @returns {Dictionary} model description 14 * @description Create the baseline schema (dictionary) for empirical protein model definitions 15 */ 16lfunction models.protein.empirical.ModelDescription(type) { 17 return { 18 utility.getGlobalValue("terms.alphabet"): utility.getGlobalValue("models.protein.alphabet"), 19 utility.getGlobalValue("terms.description"): "General class of empirical substitution matrices for amino-acids", 20 utility.getGlobalValue("terms.model.canonical"): 1, // is of the r_ij \times \pi_j form 21 utility.getGlobalValue("terms.model.reversible"): 1, 22 utility.getGlobalValue("terms.model.efv_estimate_name"): utility.getGlobalValue("terms.frequencies.predefined"), 23 utility.getGlobalValue("terms.parameters"): { 24 utility.getGlobalValue("terms.global"): {}, 25 utility.getGlobalValue("terms.local"): {}, 26 utility.getGlobalValue("terms.model.empirical"): 0 27 }, 28 utility.getGlobalValue("terms.model.type"): type, 29 utility.getGlobalValue("terms.model.get_branch_length"): "", 30 utility.getGlobalValue("terms.model.set_branch_length"): "models.generic.SetBranchLength", 31 utility.getGlobalValue("terms.model.constrain_branch_length"): "models.generic.ConstrainBranchLength", 32 utility.getGlobalValue("terms.model.frequency_estimator"): "frequencies.empirical.protein", 33 utility.getGlobalValue("terms.model.q_ij"): "models.protein.empirical._GenerateRate", 34 utility.getGlobalValue("terms.model.time"): "models.protein.generic.Time", 35 utility.getGlobalValue("terms.model.defineQ"): "models.protein.empirical._DefineQ", 36 utility.getGlobalValue("terms.model.post_definition"): "models.generic.post.definition" 37 }; 38} 39 40/* 41Load model matrices 42*/ 43LoadFunctionLibrary("matrices/JC69.ibf"); 44LoadFunctionLibrary("matrices/JTT.ibf"); 45LoadFunctionLibrary("matrices/LG.ibf"); 46LoadFunctionLibrary("matrices/WAG.ibf"); 47LoadFunctionLibrary("matrices/mt.ibf"); // all three mtMet/mtVer/mtInv models 48LoadFunctionLibrary("matrices/gcpREV.ibf"); 49LoadFunctionLibrary("matrices/HIV.ibf"); 50 51/** 52 * @name models.protein.Empirical._GenerateRate 53 * @description Generates the r_ij component of q_ij := r_ij * time * freq_j 54 * @param {Dict} rateDict 55 * @param {Number} fromChar 56 * @param {Number} toChar 57 * @param {String} namespace 58 * @param {String} model_type 59 * @return list of parameters 60 */ 61lfunction models.protein.empirical._GenerateRate(fromChar, toChar, namespace, model_type, model) { 62 models.protein.empirical._GenerateRate.p = {}; 63 models.protein.empirical._GenerateRate.p [model_type] = {}; 64 65 if (fromChar < toChar) { 66 models.protein.empirical._GenerateRate.p [utility.getGlobalValue("terms.model.rate_entry")] = "" + ((model[utility.getGlobalValue ("terms.model.empirical_rates")])[fromChar])[toChar]; 67 } else { 68 models.protein.empirical._GenerateRate.p [utility.getGlobalValue("terms.model.rate_entry")] = "" + ((model[utility.getGlobalValue ("terms.model.empirical_rates")])[toChar])[fromChar]; 69 } 70 return models.protein.empirical._GenerateRate.p; 71} 72 73/** 74 * @name models.protein.empirical._DefineQ 75 * @param {Dictionary} model definition 76 * @param {String} namespace 77 */ 78lfunction models.protein.empirical._DefineQ(model_dict, namespace) { 79 80 // Call frequencies here. Will be repeated in model.generic.DefineModel, but we are ok with that. 81 82 if (utility.Has (model_dict, utility.getGlobalValue("terms.model.data"), "String")) { 83 frequencies._aux.empirical.singlechar(model_dict, namespace, model_dict[utility.getGlobalValue("terms.model.data")]); 84 models.protein.empirical._NormalizeEmpiricalRates(model_dict, namespace); 85 } 86 models.protein.empirical.DefineQMatrix (model_dict, namespace); 87 return model_dict; 88} 89 90/** 91 * @name models.protein.empirical._NormalizeEmpiricalRates 92 * @param {Dictionary} model definition 93 * @param {String} namespace 94 */ 95lfunction models.protein.empirical._NormalizeEmpiricalRates(model_dict, namespace) { 96 97 98 alphabet = model_dict[utility.getGlobalValue("terms.alphabet")]; 99 dim = utility.Array1D (alphabet); 100 raw_rates = model_dict[utility.getGlobalValue("terms.model.empirical_rates")]; 101 EFV = model_dict[utility.getGlobalValue("terms.efv_estimate")]; 102 103 104 // Create Q from R, EFV 105 Q = {dim,dim}; 106 rowSums = {dim,1}; 107 108 // Fill in nondiagonal 109 for (i = 0; i < dim; i +=1 ){ 110 for (j = i+1; j < dim; j += 1){ 111 if ( i!=j ){ 112 113 114 rate = (raw_rates[alphabet[i]])[alphabet[j]]; 115 116 Q[i][j] = rate * EFV[j]; 117 Q[j][i] = rate * EFV[i]; 118 119 rowSums[i] += Q[i][j]; 120 rowSums[j] += Q[j][i]; 121 } 122 } 123 } 124 125 // Fill in diagonal 126 for (i = 0; i < dim; i += 1){ 127 Q[i][i] = -1 * rowSums[i]; 128 } 129 130 131 // Get normalization factor 132 norm = 0; 133 for (i = 0; i < dim; i +=1 ){ 134 norm += Q[i][i] * EFV[i]; 135 } 136 norm = -1*norm; 137 138 // perform normalization 139 for (i = 0; i < dim; i +=1 ){ 140 for ( j = 0; j < dim; j += 1){ 141 Q[i][j] = Q[i][j] / norm; 142 } 143 } 144 // Now convert it BACK TO hyphy dictionary with frequencies divided out. // 145 // ************** This sets the new empirical rates. ************** // 146 147 new_empirical_rates = {}; 148 for (l1 = 0; l1 < dim - 1; l1 += 1) { 149 new_empirical_rates[alphabet[l1]] = {}; 150 151 for (l2 = l1 + 1; l2 < dim; l2 += 1) { 152 153 if (EFV[l2] == 0){ 154 nof_rate = 0.; 155 } 156 else { 157 nof_rate = Q [l1][l2] / EFV[l2]; 158 } 159 (new_empirical_rates[alphabet[l1]])[alphabet[l2]] = nof_rate; 160 } 161 } 162 model_dict[ utility.getGlobalValue("terms.model.empirical_rates")] = new_empirical_rates; 163 164 return model_dict; 165} 166 167 168/** 169 * @name models.protein.empirical.DefineQMatrix 170 * @param {Dictionary} modelSpec 171 * @param {String} namespace 172 */ 173function models.protein.empirical.DefineQMatrix (modelSpec, namespace) { 174 175 __alphabet = modelSpec [terms.alphabet]; 176 assert (Type (__alphabet) == "Matrix" && Columns (__alphabet) == models.protein.dimensions, "Unsupported or missing alphabet '" + __alphabet + "'"); 177 178 __modelType = modelSpec[terms.model.type]; 179 if (Type (__modelType) == "None" || Type (__modelType) == "Number") { 180 __modelType = terms.global; 181 } 182 modelSpec[terms.model.type] = __modelType; 183 assert (__modelType == terms.local || __modelType == terms.global, "Unsupported or missing model type '" + __modelType + "'"); 184 185 __rate_function = modelSpec [terms.model.q_ij]; 186 assert (utility.IsFunction (__rate_function), "Missing q_ij callback in model specification"); 187 188 __time_function = modelSpec [terms.model.time]; 189 assert (utility.IsFunction (__time_function), "Missing time callback in model specification"); 190 191 192 __rate_matrix = {models.protein.dimensions,models.protein.dimensions}; 193 __rate_matrix [0][0] = ""; 194 195 __rate_variation = model.generic.get_rate_variation (modelSpec); 196 197 // ADDED FOR EMPIRICAL MODELS 198 __empirical_rates = modelSpec[terms.model.empirical_rates]; 199 200 201 202 203 __global_cache = {}; 204 205 if (None != __rate_variation) { 206 207 208 __rp = Call (__rate_variation[terms.rate_variation.distribution], __rate_variation[terms.rate_variation.options], namespace); 209 __rate_variation [terms.id] = (__rp[terms.category])[terms.id]; 210 211 parameters.DeclareCategory (__rp[terms.category]); 212 parameters.helper.copy_definitions (modelSpec[terms.parameters], __rp); 213 } 214 215 for (_rowChar = 0; _rowChar < models.protein.dimensions; _rowChar +=1 ){ 216 for (_colChar = 0; _colChar < models.protein.dimensions; _colChar += 1) { 217 if (_rowChar == _colChar) { 218 continue; 219 } 220 __rp = Call (__rate_function, __alphabet[_rowChar], 221 __alphabet[_colChar], 222 namespace, 223 __modelType, 224 modelSpec); 225 226 227 if (None != __rate_variation) { 228 __rp = Call (__rate_variation[terms.rate_variation.rate_modifier], 229 __rp, 230 __alphabet[_rowChar], 231 __alphabet[_colChar], 232 namespace, 233 __rate_variation [terms.id]); 234 } 235 236 if (Abs (__rp[terms.model.rate_entry])) { 237 parameters.DeclareGlobal (__rp[terms.global], __global_cache); 238 parameters.helper.copy_definitions (modelSpec[terms.parameters], __rp); 239 240 __rate_matrix [_rowChar][_colChar] = __rp[terms.model.rate_entry]; 241 continue; 242 } 243 __rate_matrix [_rowChar][_colChar] = ""; 244 } 245 } 246 247 __rp = Call (__time_function, __modelType); 248 249 if (Abs (__rp)) { 250 ((modelSpec[terms.parameters])[terms.local])[terms.timeParameter ()] = __rp; 251 modelSpec [terms.model.rate_matrix] = parameters.AddMultiplicativeTerm (__rate_matrix, __rp, 0); 252 } else { 253 modelSpec [terms.model.rate_matrix] = __rate_matrix; 254 } 255 256} 257 258models.protein.empirical.default_generators = {"LG": "models.protein.LG.ModelDescription", 259 "WAG": "models.protein.WAG.ModelDescription", 260 "JTT": "models.protein.JTT.ModelDescription", 261 "JC69": "models.protein.JC69.ModelDescription", 262 "mtInv": "models.protein.mtInv.ModelDescription", 263 "mtMet": "models.protein.mtMet.ModelDescription", 264 "mtVer": "models.protein.mtVer.ModelDescription", 265 "gcpREV": "models.protein.gcpREV.ModelDescription", 266 "HIVBm": "models.protein.HIVBm.ModelDescription", 267 "HIVWm": "models.protein.HIVWm.ModelDescription"}; 268 269models.protein.empirical.plusF_generators = {"LG": "models.protein.LGF.ModelDescription", 270 "WAG": "models.protein.WAGF.ModelDescription", 271 "JTT": "models.protein.JTTF.ModelDescription", 272 "JC69": "models.protein.JC69F.ModelDescription", 273 "mtMet": "models.protein.mtMetF.ModelDescription", 274 "mtVer": "models.protein.mtVerF.ModelDescription", 275 "gcpREV": "models.protein.gcpREVF.ModelDescription", 276 "HIVBm": "models.protein.HIVBmF.ModelDescription", 277 "HIVWm": "models.protein.HIVWmF.ModelDescription"}; 278 279models.protein.empirical.mleF_generators = {"LG": "models.protein.LGML.ModelDescription", 280 "WAG": "models.protein.WAGML.ModelDescription", 281 "JTT": "models.protein.JTTML.ModelDescription", 282 "JC69": "models.protein.JC69ML.ModelDescription", 283 "mtMet": "models.protein.mtMetML.ModelDescription", 284 "mtVer": "models.protein.mtVerML.ModelDescription", 285 "gcpREV": "models.protein.gcpREVML.ModelDescription", 286 "HIVBm": "models.protein.HIVBmML.ModelDescription", 287 "HIVWm": "models.protein.HIVWmML.ModelDescription"}; 288 289/**************************************** LG functions *************************************/ 290 291 292/** 293 * @name models.protein.LG.ModelDescription 294 * @description Create the baseline schema (dictionary) for the LG model of protein evolution 295 * @returns {Dictionary} model description 296 * @param {String} type 297 */ 298 function models.protein.LG.ModelDescription(type) { 299 models.protein.LG.ModelDescription.model_definition = models.protein.empirical.ModelDescription(type); 300 models.protein.LG.ModelDescription.model_definition [terms.model.empirical_rates] = models.protein.LG.Rij; 301 models.protein.LG.ModelDescription.model_definition [terms.model.frequency_estimator] = "models.protein.LG.frequencies"; 302 return models.protein.LG.ModelDescription.model_definition; 303} 304 305/** 306 * @name models.protein.LGF.ModelDescription 307 * @description Create the baseline schema (dictionary) for the LG+F model of protein evolution 308 * @returns {Dictionary} model description 309 * @param {String} type 310 */ 311function models.protein.LGF.ModelDescription(type) { 312 models.protein.LGF.ModelDescription.model_definition = models.protein.LG.ModelDescription(type); 313 models.protein.LGF.ModelDescription.model_definition [terms.model.frequency_estimator] = "frequencies.empirical.protein"; 314 models.protein.LGF.ModelDescription.model_definition [terms.model.efv_estimate_name] = utility.getGlobalValue("terms.frequencies._20x1"); 315 return models.protein.LGF.ModelDescription.model_definition; 316} 317 318 319/** 320 * @name models.protein.LGML.ModelDescription 321 * @description Create the baseline schema (dictionary) for the LG+ML model of protein evolution 322 * @returns {Dictionary} model description 323 * @param {String} type 324 */ 325function models.protein.LGML.ModelDescription(type) { 326 models.protein.LGML.ModelDescription.model_definition = models.protein.LG.ModelDescription(type); 327 models.protein.LGML.ModelDescription.model_definition [terms.model.frequency_estimator] = "frequencies.ML.protein"; 328 models.protein.LGML.ModelDescription.model_definition [terms.model.efv_estimate_name] = utility.getGlobalValue("terms.frequencies.MLE"); 329 return models.protein.LGML.ModelDescription.model_definition; 330} 331 332 333/**************************************** JTT functions *************************************/ 334 335 336/** 337 * @name models.protein.JTT.ModelDescription 338 * @description Create the baseline schema (dictionary) for the JTT model of protein evolution 339 * @returns {Dictionary} model description 340 * @param {String} type 341 */ 342 function models.protein.JTT.ModelDescription(type) { 343 models.protein.JTT.ModelDescription.model_definition = models.protein.empirical.ModelDescription(type); 344 models.protein.JTT.ModelDescription.model_definition [terms.model.empirical_rates] = models.protein.JTT.Rij; 345 models.protein.JTT.ModelDescription.model_definition [terms.model.frequency_estimator] = "models.protein.JTT.frequencies"; 346 return models.protein.JTT.ModelDescription.model_definition; 347} 348 349 350/** 351 * @name models.protein.JTTF.ModelDescription 352 * @description Create the baseline schema (dictionary) for the JTT+F model of protein evolution 353 * @returns {Dictionary} model description 354 * @param {String} type 355 */ 356function models.protein.JTTF.ModelDescription(type) { 357 models.protein.JTTF.ModelDescription.model_definition = models.protein.JTT.ModelDescription(type); 358 models.protein.JTTF.ModelDescription.model_definition [terms.model.frequency_estimator] = "frequencies.empirical.protein"; 359 models.protein.JTTF.ModelDescription.model_definition [terms.model.efv_estimate_name] = utility.getGlobalValue("terms.frequencies._20x1"); 360 return models.protein.JTTF.ModelDescription.model_definition; 361} 362 363 364/** 365 * @name models.protein.JTTML.ModelDescription 366 * @description Create the baseline schema (dictionary) for the JTT+ML model of protein evolution 367 * @returns {Dictionary} model description 368 * @param {String} type 369 */ 370function models.protein.JTTML.ModelDescription(type) { 371 models.protein.JTTML.ModelDescription.model_definition = models.protein.JTT.ModelDescription(type); 372 models.protein.JTTML.ModelDescription.model_definition [terms.model.frequency_estimator] = "frequencies.ML.protein"; 373 models.protein.JTTML.ModelDescription.model_definition [terms.model.efv_estimate_name] = utility.getGlobalValue("terms.frequencies.MLE"); 374 return models.protein.JTTML.ModelDescription.model_definition; 375} 376 377/**************************************** JC69 functions *************************************/ 378 379 380 /** 381 * @name models.protein.JC69.ModelDescription 382 * @description Create the baseline schema (dictionary) for the JC69 (equal rates) model of protein evolution 383 * @returns {Dictionary} model description 384 * @param {String} type 385 */ 386function models.protein.JC69.ModelDescription(type) { 387 models.protein.JC69.ModelDescription.model_definition = models.protein.empirical.ModelDescription(type); 388 models.protein.JC69.ModelDescription.model_definition [terms.model.empirical_rates] = models.protein.JC69.Rij; 389 models.protein.JC69.ModelDescription.model_definition [terms.model.frequency_estimator] = "models.protein.JC69.frequencies"; 390 return models.protein.JC69.ModelDescription.model_definition; 391} 392 393/** 394 * @name models.protein.JC69F.ModelDescription 395 * @description Create the baseline schema (dictionary) for the JC69+F model of protein evolution 396 * @returns {Dictionary} model description 397 * @param {String} type 398 */ 399function models.protein.JC69F.ModelDescription(type) { 400 models.protein.JC69F.ModelDescription.model_definition = models.protein.JC69.ModelDescription(type); 401 models.protein.JC69F.ModelDescription.model_definition [terms.model.frequency_estimator] = "frequencies.empirical.protein"; 402 models.protein.JC69F.ModelDescription.model_definition [terms.model.efv_estimate_name] = utility.getGlobalValue("terms.frequencies._20x1"); 403 return models.protein.JC69F.ModelDescription.model_definition; 404} 405 406 407/** 408 * @name models.protein.JC69ML.ModelDescription 409 * @description Create the baseline schema (dictionary) for the JC69+ML model of protein evolution 410 * @returns {Dictionary} model description 411 * @param {String} type 412 */ 413function models.protein.JC69ML.ModelDescription(type) { 414 models.protein.JC69ML.ModelDescription.model_definition = models.protein.JC69.ModelDescription(type); 415 models.protein.JC69ML.ModelDescription.model_definition [terms.model.frequency_estimator] = "frequencies.ML.protein"; 416 models.protein.JC69ML.ModelDescription.model_definition [terms.model.efv_estimate_name] = utility.getGlobalValue("terms.frequencies.MLE"); 417 return models.protein.JC69ML.ModelDescription.model_definition; 418} 419 420/**************************************** mtMAM functions *************************************/ 421 422 423 /** 424 * @name models.protein.mtMAM.ModelDescription 425 * @description Create the baseline schema (dictionary) for the mtMAM model of protein evolution 426 * @returns {Dictionary} model description 427 * @param {String} type 428 */ 429function models.protein.mtMAM.ModelDescription(type) { 430 models.protein.mtMAM.ModelDescription.model_definition = models.protein.empirical.ModelDescription(type); 431 models.protein.mtMAM.ModelDescription.model_definition [terms.model.empirical_rates] = models.protein.mtMAM.Rij; 432 models.protein.mtMAM.ModelDescription.model_definition [terms.model.frequency_estimator] = "models.protein.mtMAM.frequencies"; 433 return models.protein.mtMAM.ModelDescription.model_definition; 434} 435 436/** 437 * @name models.protein.mtMAMF.ModelDescription 438 * @description Create the baseline schema (dictionary) for the mtMAM+F model of protein evolution 439 * @returns {Dictionary} model description 440 * @param {String} type 441 */ 442function models.protein.mtMAMF.ModelDescription(type) { 443 models.protein.mtMAMF.ModelDescription.model_definition = models.protein.mtMAM.ModelDescription(type); 444 models.protein.mtMAMF.ModelDescription.model_definition [terms.model.frequency_estimator] = "frequencies.empirical.protein"; 445 models.protein.mtMAMF.ModelDescription.model_definition [terms.model.efv_estimate_name] = utility.getGlobalValue("terms.frequencies._20x1"); 446 return models.protein.mtMAMF.ModelDescription.model_definition; 447} 448 449 450/** 451 * @name models.protein.mtMAMML.ModelDescription 452 * @description Create the baseline schema (dictionary) for the mtMAM+ML model of protein evolution 453 * @returns {Dictionary} model description 454 * @param {String} type 455 */ 456function models.protein.mtMAMML.ModelDescription(type) { 457 models.protein.mtMAMML.ModelDescription.model_definition = models.protein.mtMAM.ModelDescription(type); 458 models.protein.mtMAMML.ModelDescription.model_definition [terms.model.frequency_estimator] = "frequencies.ML.protein"; 459 models.protein.mtMAMML.ModelDescription.model_definition [terms.model.efv_estimate_name] = utility.getGlobalValue("terms.frequencies.MLE"); 460 return models.protein.mtMAMML.ModelDescription.model_definition; 461} 462 463/**************************************** cpREV functions *************************************/ 464 465/** 466 * @name models.protein.cpREV.ModelDescription 467 * @description Create the baseline schema (dictionary) for the cpREV model of protein evolution 468 * @returns {Dictionary} model description 469 * @param {String} type 470 */ 471function models.protein.cpREV.ModelDescription(type) { 472 models.protein.cpREV.ModelDescription.model_definition = models.protein.empirical.ModelDescription(type); 473 models.protein.cpREV.ModelDescription.model_definition [terms.model.empirical_rates] = models.protein.cpREV.Rij; 474 models.protein.cpREV.ModelDescription.model_definition [terms.model.frequency_estimator] = "models.protein.cpREV.frequencies"; 475 return models.protein.cpREV.ModelDescription.model_definition; 476} 477 478/** 479 * @name models.protein.cpREVF.ModelDescription 480 * @description Create the baseline schema (dictionary) for the cpREV+F model of protein evolution 481 * @returns {Dictionary} model description 482 * @param {String} type 483 */ 484function models.protein.cpREVF.ModelDescription(type) { 485 models.protein.cpREVF.ModelDescription.model_definition = models.protein.cpREV.ModelDescription(type); 486 models.protein.cpREVF.ModelDescription.model_definition [terms.model.frequency_estimator] = "frequencies.empirical.protein"; 487 models.protein.cpREVF.ModelDescription.model_definition [terms.model.efv_estimate_name] = utility.getGlobalValue("terms.frequencies._20x1"); 488 return models.protein.cpREVF.ModelDescription.model_definition; 489} 490 491/** 492 * @name models.protein.cpREVML.ModelDescription 493 * @description Create the baseline schema (dictionary) for the cpREV+ML model of protein evolution 494 * @returns {Dictionary} model description 495 * @param {String} type 496 */ 497function models.protein.cpREVML.ModelDescription(type) { 498 models.protein.cpREVML.ModelDescription.model_definition = models.protein.cpREV.ModelDescription(type); 499 models.protein.cpREVML.ModelDescription.model_definition [terms.model.frequency_estimator] = "frequencies.ML.protein"; 500 models.protein.cpREVML.ModelDescription.model_definition [terms.model.efv_estimate_name] = utility.getGlobalValue("terms.frequencies.MLE"); 501 return models.protein.cpREVML.ModelDescription.model_definition; 502} 503 504/**************************************** AB functions *************************************/ 505 506/** 507 * @name models.protein.AB.ModelDescription 508 * @description Create the baseline schema (dictionary) for the AB model of protein evolution 509 * @returns {Dictionary} model description 510 * @param {String} type 511 */ 512function models.protein.AB.ModelDescription(type) { 513 models.protein.AB.ModelDescription.model_definition = models.protein.empirical.ModelDescription(type); 514 models.protein.AB.ModelDescription.model_definition [terms.model.empirical_rates] = models.protein.AB.Rij; 515 models.protein.AB.ModelDescription.model_definition [terms.model.frequency_estimator] = "models.protein.AB.frequencies"; 516 return models.protein.AB.ModelDescription.model_definition; 517} 518 519/** 520 * @name models.protein.ABF.ModelDescription 521 * @description Create the baseline schema (dictionary) for the AB+F model of protein evolution 522 * @returns {Dictionary} model description 523 * @param {String} type 524 */ 525function models.protein.ABF.ModelDescription(type) { 526 models.protein.ABF.ModelDescription.model_definition = models.protein.AB.ModelDescription(type); 527 models.protein.ABF.ModelDescription.model_definition [terms.model.frequency_estimator] = "frequencies.empirical.protein"; 528 models.protein.ABF.ModelDescription.model_definition [terms.model.efv_estimate_name] = utility.getGlobalValue("terms.frequencies._20x1"); 529 return models.protein.ABF.ModelDescription.model_definition; 530} 531 532/** 533 * @name models.protein.ABML.ModelDescription 534 * @description Create the baseline schema (dictionary) for the AB+ML model of protein evolution 535 * @returns {Dictionary} model description 536 * @param {String} type 537 */ 538function models.protein.ABML.ModelDescription(type) { 539 models.protein.ABML.ModelDescription.model_definition = models.protein.AB.ModelDescription(type); 540 models.protein.ABML.ModelDescription.model_definition [terms.model.frequency_estimator] = "frequencies.ML.protein"; 541 models.protein.ABML.ModelDescription.model_definition [terms.model.efv_estimate_name] = utility.getGlobalValue("terms.frequencies.MLE"); 542 return models.protein.ABML.ModelDescription.model_definition; 543} 544 545 546/**************************************** mtMet functions *************************************/ 547 548 549/** 550 * @name models.protein.mtMet.ModelDescription 551 * @description Create the baseline schema (dictionary) for the mtMet model of protein evolution 552 * @returns {Dictionary} model description 553 * @param {String} type 554 */ 555 function models.protein.mtMet.ModelDescription(type) { 556 models.protein.mtMet.ModelDescription.model_definition = models.protein.empirical.ModelDescription(type); 557 models.protein.mtMet.ModelDescription.model_definition [terms.model.empirical_rates] = models.protein.mtMet.Rij; 558 models.protein.mtMet.ModelDescription.model_definition [terms.model.frequency_estimator] = "models.protein.mtMet.frequencies"; 559 return models.protein.mtMet.ModelDescription.model_definition; 560} 561 562/** 563 * @name models.protein.mtMetF.ModelDescription 564 * @description Create the baseline schema (dictionary) for the mtMet+F model of protein evolution 565 * @returns {Dictionary} model description 566 * @param {String} type 567 */ 568function models.protein.mtMetF.ModelDescription(type) { 569 models.protein.mtMetF.ModelDescription.model_definition = models.protein.mtMet.ModelDescription(type); 570 models.protein.mtMetF.ModelDescription.model_definition [terms.model.frequency_estimator] = "frequencies.empirical.protein"; 571 models.protein.mtMetF.ModelDescription.model_definition [terms.model.efv_estimate_name] = utility.getGlobalValue("terms.frequencies._20x1"); 572 return models.protein.mtMetF.ModelDescription.model_definition; 573} 574 575 576/** 577 * @name models.protein.mtMetML.ModelDescription 578 * @description Create the baseline schema (dictionary) for the mtMet+ML model of protein evolution 579 * @returns {Dictionary} model description 580 * @param {String} type 581 */ 582function models.protein.mtMetML.ModelDescription(type) { 583 models.protein.mtMetML.ModelDescription.model_definition = models.protein.mtMet.ModelDescription(type); 584 models.protein.mtMetML.ModelDescription.model_definition [terms.model.frequency_estimator] = "frequencies.ML.protein"; 585 models.protein.mtMetML.ModelDescription.model_definition [terms.model.efv_estimate_name] = utility.getGlobalValue("terms.frequencies.MLE"); 586 return models.protein.mtMetML.ModelDescription.model_definition; 587} 588 589 590/**************************************** mtVer functions *************************************/ 591 592 593/** 594 * @name models.protein.mtVer.ModelDescription 595 * @description Create the baseline schema (dictionary) for the mtVer model of protein evolution 596 * @returns {Dictionary} model description 597 * @param {String} type 598 */ 599 function models.protein.mtVer.ModelDescription(type) { 600 models.protein.mtVer.ModelDescription.model_definition = models.protein.empirical.ModelDescription(type); 601 models.protein.mtVer.ModelDescription.model_definition [terms.model.empirical_rates] = models.protein.mtVer.Rij; 602 models.protein.mtVer.ModelDescription.model_definition [terms.model.frequency_estimator] = "models.protein.mtVer.frequencies"; 603 return models.protein.mtVer.ModelDescription.model_definition; 604} 605 606/** 607 * @name models.protein.mtVerF.ModelDescription 608 * @description Create the baseline schema (dictionary) for the mtVer+F model of protein evolution 609 * @returns {Dictionary} model description 610 * @param {String} type 611 */ 612function models.protein.mtVerF.ModelDescription(type) { 613 models.protein.mtVerF.ModelDescription.model_definition = models.protein.mtVer.ModelDescription(type); 614 models.protein.mtVerF.ModelDescription.model_definition [terms.model.frequency_estimator] = "frequencies.empirical.protein"; 615 models.protein.mtVerF.ModelDescription.model_definition [terms.model.efv_estimate_name] = utility.getGlobalValue("terms.frequencies._20x1"); 616 return models.protein.mtVerF.ModelDescription.model_definition; 617} 618 619 620/** 621 * @name models.protein.mtVerML.ModelDescription 622 * @description Create the baseline schema (dictionary) for the mtVer+ML model of protein evolution 623 * @returns {Dictionary} model description 624 * @param {String} type 625 */ 626function models.protein.mtVerML.ModelDescription(type) { 627 models.protein.mtVerML.ModelDescription.model_definition = models.protein.mtVer.ModelDescription(type); 628 models.protein.mtVerML.ModelDescription.model_definition [terms.model.frequency_estimator] = "frequencies.ML.protein"; 629 models.protein.mtVerML.ModelDescription.model_definition [terms.model.efv_estimate_name] = utility.getGlobalValue("terms.frequencies.MLE"); 630 return models.protein.mtVerML.ModelDescription.model_definition; 631} 632 633 634 635/**************************************** gcpREV functions *************************************/ 636 637 638/** 639 * @name models.protein.gcpREV.ModelDescription 640 * @description Create the baseline schema (dictionary) for the gcpREV model of protein evolution 641 * @returns {Dictionary} model description 642 * @param {String} type 643 */ 644 function models.protein.gcpREV.ModelDescription(type) { 645 models.protein.gcpREV.ModelDescription.model_definition = models.protein.empirical.ModelDescription(type); 646 models.protein.gcpREV.ModelDescription.model_definition [terms.model.empirical_rates] = models.protein.gcpREV.Rij; 647 models.protein.gcpREV.ModelDescription.model_definition [terms.model.frequency_estimator] = "models.protein.gcpREV.frequencies"; 648 return models.protein.gcpREV.ModelDescription.model_definition; 649} 650 651/** 652 * @name models.protein.gcpREVF.ModelDescription 653 * @description Create the baseline schema (dictionary) for the gcpREV+F model of protein evolution 654 * @returns {Dictionary} model description 655 * @param {String} type 656 */ 657function models.protein.gcpREVF.ModelDescription(type) { 658 models.protein.gcpREVF.ModelDescription.model_definition = models.protein.gcpREV.ModelDescription(type); 659 models.protein.gcpREVF.ModelDescription.model_definition [terms.model.frequency_estimator] = "frequencies.empirical.protein"; 660 models.protein.gcpREVF.ModelDescription.model_definition [terms.model.efv_estimate_name] = utility.getGlobalValue("terms.frequencies._20x1"); 661 return models.protein.gcpREVF.ModelDescription.model_definition; 662} 663 664 665/** 666 * @name models.protein.gcpREVML.ModelDescription 667 * @description Create the baseline schema (dictionary) for the gcpREV+ML model of protein evolution 668 * @returns {Dictionary} model description 669 * @param {String} type 670 */ 671function models.protein.gcpREVML.ModelDescription(type) { 672 models.protein.gcpREVML.ModelDescription.model_definition = models.protein.gcpREV.ModelDescription(type); 673 models.protein.gcpREVML.ModelDescription.model_definition [terms.model.frequency_estimator] = "frequencies.ML.protein"; 674 models.protein.gcpREVML.ModelDescription.model_definition [terms.model.efv_estimate_name] = utility.getGlobalValue("terms.frequencies.MLE"); 675 return models.protein.gcpREVML.ModelDescription.model_definition; 676} 677 678 679 680