Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function() {
- $.fitch = {
- score: function() {
- if ("DNA" == $.main.type) {
- void 0 == $.stage.stats && ($.stage.stats = {}), $.stage.stats.match = 0, $.stage.stats.mismatch = 0, $.stage.stats.open = 0, $.stage.stats.extend = 0, $.fitch.forwardBackward();
- var e = $.fitch.scoreRecurse($.stage.current);
- return e
- }
- },
- getLen: function() {
- return $.phylo.seqLen
- },
- forwardBackward: function() {
- for (var e = $.stage.current, t = $.fitch.getLen(), n = 0; t > n; n++) {
- var r = $.fitch.forward(e, n);
- $.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)
- }
- },
- forward: function(e, t) {
- if (0 == t && ($.phylo.tree[e].ancestor = [], $.phylo.tree[e].ancestorSet = []), 2 == $.phylo.tree[e].child) {
- 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++) {
- -1 == i.indexOf(n[o]) && i.push(n[o]);
- 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])
- }
- $.phylo.tree[e].ancestorSet[t] = s.length < 1 ? i : s
- } else if (1 == $.phylo.tree[e].child) {
- var n = $.fitch.forward($.phylo.tree[e].node2, t),
- r = $.sequence.nuc($.sequence.track[$.phylo.tree[e].node1][t]);
- $.phylo.tree[e].ancestorSet[t] = n.indexOf(r) > -1 ? [r] : n.concat([r])
- } else {
- var n = $.sequence.nuc($.sequence.track[$.phylo.tree[e].node1][t]),
- r = $.sequence.nuc($.sequence.track[$.phylo.tree[e].node2][t]);
- $.phylo.tree[e].ancestorSet[t] = r == n ? [n] : [n, r]
- }
- return $.phylo.tree[e].ancestorSet[t]
- },
- backward: function(e, t, n) {
- var r = $.phylo.tree[e].ancestorSet[n];
- $.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)
- },
- forwardBackward2: function() {
- 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];
- $.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)
- },
- forward2: function(e) {
- var t = $.fitch.getLen();
- if ($.phylo.tree[e].ancestor = [], $.phylo.tree[e].ancestorSet = [], 2 == $.phylo.tree[e].child)
- for (var n = $.fitch.forward2($.phylo.tree[e].node2), r = $.fitch.forward2($.phylo.tree[e].node1), i = 0; t > i; i++) {
- for (var s = [], o = [], u = 0; u < n[i].length; u++) {
- -1 == s.indexOf(n[i][u]) && s.push(n[i][u]);
- 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])
- }
- $.phylo.tree[e].ancestorSet[i] = o.length < 1 ? s : o
- } else if (1 == $.phylo.tree[e].child)
- 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]]);
- else
- 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]];
- return $.phylo.tree[e].ancestorSet
- },
- backward2: function(e, t) {
- 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];
- $.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)
- },
- scoreRecurse: function(e) {
- function t(e) {
- var t = {
- match: 1,
- mismatch: -1,
- open: -4,
- extend: -1
- };
- return e.match * t.match + e.mismatch * t.mismatch + e.open * t.open + e.extend * t.extend
- }
- function n(e, t) {
- function n(e) {
- return "x" == e
- }
- for (var r = {
- match: 0,
- mismatch: 0,
- open: 0,
- extend: 0
- }, 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++));
- return r
- }
- if (0 == $.phylo.tree[e].child) var r = $.sequence.nucArray($.sequence.track[$.phylo.tree[e].node1]),
- i = $.sequence.nucArray($.sequence.track[$.phylo.tree[e].node2]);
- else if (1 == $.phylo.tree[e].child) var r = $.sequence.nucArray($.sequence.track[$.phylo.tree[e].node1]),
- i = $.phylo.tree[$.phylo.tree[e].node2].ancestor;
- else var r = $.phylo.tree[$.phylo.tree[e].node1].ancestor,
- i = $.phylo.tree[$.phylo.tree[e].node2].ancestor;
- var s = n($.phylo.tree[e].ancestor, r),
- o = n($.phylo.tree[e].ancestor, i),
- u = t(s) + t(o);
- 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
- }
- }
- }(),
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement