Advertisement
Guest User

Untitled

a guest
May 29th, 2015
227
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.22 KB | None | 0 0
  1. function() {
  2. $.fitch = {
  3. score: function() {
  4. if ("DNA" == $.main.type) {
  5. void 0 == $.stage.stats && ($.stage.stats = {}), $.stage.stats.match = 0, $.stage.stats.mismatch = 0, $.stage.stats.open = 0, $.stage.stats.extend = 0, $.fitch.forwardBackward();
  6. var e = $.fitch.scoreRecurse($.stage.current);
  7. return e
  8. }
  9. },
  10. getLen: function() {
  11. return $.phylo.seqLen
  12. },
  13. forwardBackward: function() {
  14. for (var e = $.stage.current, t = $.fitch.getLen(), n = 0; t > n; n++) {
  15. var r = $.fitch.forward(e, n);
  16. $.phylo.tree[e].ancestor[n] = r.length < 1 ? "x" : 1 == r.length || 0 != r.indexOf("x") ? r[0] : r[1], $.phylo.tree[e].child >= 2 && $.fitch.backward($.phylo.tree[e].node1, $.phylo.tree[e].ancestor[n], n), $.phylo.tree[e].child >= 1 && $.fitch.backward($.phylo.tree[e].node2, $.phylo.tree[e].ancestor[n], n)
  17. }
  18. },
  19. forward: function(e, t) {
  20. if (0 == t && ($.phylo.tree[e].ancestor = [], $.phylo.tree[e].ancestorSet = []), 2 == $.phylo.tree[e].child) {
  21. for (var n = $.fitch.forward($.phylo.tree[e].node2, t), r = $.fitch.forward($.phylo.tree[e].node1, t), i = [], s = [], o = 0; o < n.length; o++) {
  22. -1 == i.indexOf(n[o]) && i.push(n[o]);
  23. for (var u = 0; u < r.length; u++) n[o] == r[u] && -1 == s.indexOf(n[o]) && s.push(n[o]), -1 == i.indexOf(r[u]) && i.push(r[u])
  24. }
  25. $.phylo.tree[e].ancestorSet[t] = s.length < 1 ? i : s
  26. } else if (1 == $.phylo.tree[e].child) {
  27. var n = $.fitch.forward($.phylo.tree[e].node2, t),
  28. r = $.sequence.nuc($.sequence.track[$.phylo.tree[e].node1][t]);
  29. $.phylo.tree[e].ancestorSet[t] = n.indexOf(r) > -1 ? [r] : n.concat([r])
  30. } else {
  31. var n = $.sequence.nuc($.sequence.track[$.phylo.tree[e].node1][t]),
  32. r = $.sequence.nuc($.sequence.track[$.phylo.tree[e].node2][t]);
  33. $.phylo.tree[e].ancestorSet[t] = r == n ? [n] : [n, r]
  34. }
  35. return $.phylo.tree[e].ancestorSet[t]
  36. },
  37. backward: function(e, t, n) {
  38. var r = $.phylo.tree[e].ancestorSet[n];
  39. $.phylo.tree[e].ancestor[n] = r.length < 1 ? "x" : 1 == r.length ? r[0] : r.indexOf(t) > -1 ? t : 0 != r.indexOf("x") ? r[0] : r[1], $.phylo.tree[e].child >= 2 && $.fitch.backward($.phylo.tree[e].node1, $.phylo.tree[e].ancestor[n], n), $.phylo.tree[e].child >= 1 && $.fitch.backward($.phylo.tree[e].node2, $.phylo.tree[e].ancestor[n], n)
  40. },
  41. forwardBackward2: function() {
  42. for (var e = $.stage.current, t = $.fitch.getLen(), n = $.fitch.forward2(e, r), r = 0; t > r; r++) $.phylo.tree[e].ancestor[r] = n[r].length < 1 ? "x" : 1 == n[r].length || 0 != n[r].indexOf("x") ? n[r][0] : n[r][1];
  43. $.phylo.tree[e].child >= 2 && $.fitch.backward2($.phylo.tree[e].node1, $.phylo.tree[e].ancestor), $.phylo.tree[e].child >= 1 && $.fitch.backward2($.phylo.tree[e].node2, $.phylo.tree[e].ancestor)
  44. },
  45. forward2: function(e) {
  46. var t = $.fitch.getLen();
  47. if ($.phylo.tree[e].ancestor = [], $.phylo.tree[e].ancestorSet = [], 2 == $.phylo.tree[e].child)
  48. for (var n = $.fitch.forward2($.phylo.tree[e].node2), r = $.fitch.forward2($.phylo.tree[e].node1), i = 0; t > i; i++) {
  49. for (var s = [], o = [], u = 0; u < n[i].length; u++) {
  50. -1 == s.indexOf(n[i][u]) && s.push(n[i][u]);
  51. for (var a = 0; a < r.length; a++) n[i][u] == r[i][a] && -1 == o.indexOf(n[i][u]) && o.push(n[i][u]), -1 == s.indexOf(r[i][a]) && s.push(r[i][a])
  52. }
  53. $.phylo.tree[e].ancestorSet[i] = o.length < 1 ? s : o
  54. } else if (1 == $.phylo.tree[e].child)
  55. for (var n = $.fitch.forward2($.phylo.tree[e].node2), r = $.sequence.nucArray($.sequence.track[$.phylo.tree[e].node1]), i = 0; t > i; i++) $.phylo.tree[e].ancestorSet[i] = n[i].indexOf(r[i]) > -1 ? [r[i]] : n[i].concat([r[i]]);
  56. else
  57. for (var n = $.sequence.nucArray($.sequence.track[$.phylo.tree[e].node1]), r = $.sequence.nucArray($.sequence.track[$.phylo.tree[e].node2]), i = 0; t > i; i++) $.phylo.tree[e].ancestorSet[i] = r == n ? [n[i]] : [n[i], r[i]];
  58. return $.phylo.tree[e].ancestorSet
  59. },
  60. backward2: function(e, t) {
  61. for (var n = $.phylo.tree[e].ancestorSet, r = $.fitch.getLen(), i = 0; r > i; i++) $.phylo.tree[e].ancestor[i] = n[i].length < 1 ? "x" : 1 == n[i].length ? n[i][0] : n[i].indexOf(t[i]) > -1 ? t[i] : 0 != n[i].indexOf("x") ? n[i][0] : n[i][1];
  62. $.phylo.tree[e].child >= 2 && $.fitch.backward2($.phylo.tree[e].node1, $.phylo.tree[e].ancestor), $.phylo.tree[e].child >= 1 && $.fitch.backward2($.phylo.tree[e].node2, $.phylo.tree[e].ancestor)
  63. },
  64. scoreRecurse: function(e) {
  65. function t(e) {
  66. var t = {
  67. match: 1,
  68. mismatch: -1,
  69. open: -4,
  70. extend: -1
  71. };
  72. return e.match * t.match + e.mismatch * t.mismatch + e.open * t.open + e.extend * t.extend
  73. }
  74.  
  75. function n(e, t) {
  76. function n(e) {
  77. return "x" == e
  78. }
  79. for (var r = {
  80. match: 0,
  81. mismatch: 0,
  82. open: 0,
  83. extend: 0
  84. }, i = e.length - e.filter(n).length, s = t.length - t.filter(n).length, o = 0, u = 0, a = 0, f = 0; f < e.length; f++)("x" != e[f] || "x" != t[f]) && ("x" != e[f] && "x" != t[f] ? (t[f] == e[f] ? r.match++ : r.mismatch++, o++, u++, a = 0) : "x" != e[f] && "x" == t[f] ? (u > 0 && s > u && (1 == a ? r.extend++ : (r.open++, a = 1)), o++) : "x" == e[f] && "x" != t[f] && (o > 0 && i > o && (2 == a ? r.extend++ : (r.open++, a = 2)), u++));
  85. return r
  86. }
  87. if (0 == $.phylo.tree[e].child) var r = $.sequence.nucArray($.sequence.track[$.phylo.tree[e].node1]),
  88. i = $.sequence.nucArray($.sequence.track[$.phylo.tree[e].node2]);
  89. else if (1 == $.phylo.tree[e].child) var r = $.sequence.nucArray($.sequence.track[$.phylo.tree[e].node1]),
  90. i = $.phylo.tree[$.phylo.tree[e].node2].ancestor;
  91. else var r = $.phylo.tree[$.phylo.tree[e].node1].ancestor,
  92. i = $.phylo.tree[$.phylo.tree[e].node2].ancestor;
  93. var s = n($.phylo.tree[e].ancestor, r),
  94. o = n($.phylo.tree[e].ancestor, i),
  95. u = t(s) + t(o);
  96. return $.stage.stats.match += parseInt(s.match) + parseInt(o.match), $.stage.stats.mismatch += parseInt(s.mismatch) + parseInt(o.mismatch), $.stage.stats.open += parseInt(s.open) + parseInt(o.open), $.stage.stats.extend += parseInt(s.extend) + parseInt(o.extend), $.phylo.tree[e].child >= 2 && (u += $.fitch.scoreRecurse($.phylo.tree[e].node1)), $.phylo.tree[e].child >= 1 && (u += $.fitch.scoreRecurse($.phylo.tree[e].node2)), $.phylo.tree[e].score = u, u
  97. }
  98. }
  99. }(),
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement