JAL-1807 Bob's JalviewJS prototype first commit
[jalviewjs.git] / site / j2s / jalview / analysis / scoremodels / FeatureScoreModel.js
1 Clazz.declarePackage ("jalview.analysis.scoremodels");\r
2 Clazz.load (["jalview.api.analysis.ScoreModelI", "$.ViewBasedAnalysisI"], "jalview.analysis.scoremodels.FeatureScoreModel", ["jalview.util.Comparison", "java.util.ArrayList", "$.Arrays", "$.Hashtable"], function () {\r
3 c$ = Clazz.decorateAsClass (function () {\r
4 this.fr = null;\r
5 Clazz.instantialize (this, arguments);\r
6 }, jalview.analysis.scoremodels, "FeatureScoreModel", null, [jalview.api.analysis.ScoreModelI, jalview.api.analysis.ViewBasedAnalysisI]);\r
7 Clazz.overrideMethod (c$, "configureFromAlignmentView", \r
8 function (view) {\r
9 this.fr = view.cloneFeatureRenderer ();\r
10 return true;\r
11 }, "jalview.api.AlignmentViewPanel");\r
12 Clazz.overrideMethod (c$, "findDistances", \r
13 function (seqData) {\r
14 var nofeats = 0;\r
15 var dft = java.util.Arrays.asList (this.fr.getDisplayedFeatureTypes ());\r
16 if (dft != null) {\r
17 nofeats = dft.size ();\r
18 }var sequenceString = seqData.getVisibleAlignment (jalview.util.Comparison.GapChars.charAt (0)).getSequencesArray ();\r
19 var noseqs = sequenceString.length;\r
20 var cpwidth = seqData.getWidth ();\r
21 var distance =  Clazz.newFloatArray (noseqs, noseqs, 0);\r
22 if (nofeats == 0) {\r
23 for (var d, $d = 0, $$d = distance; $d < $$d.length && ((d = $$d[$d]) || true); $d++) {\r
24 for (var i = 0; i < d.length; d[i++] = 0) {\r
25 ;}\r
26 }\r
27 return distance;\r
28 }var max = 0;\r
29 for (var cpos = 0; cpos < cpwidth; cpos++) {\r
30 var sfap =  new java.util.ArrayList ();\r
31 for (var i = 0; i < noseqs; i++) {\r
32 var types =  new java.util.Hashtable ();\r
33 var sfs = this.fr.findFeaturesAtRes (sequenceString[i], sequenceString[i].findPosition (cpos));\r
34 for (var sf, $sf = sfs.iterator (); $sf.hasNext () && ((sf = $sf.next ()) || true);) {\r
35 types.put (sf.getType (), sf);\r
36 }\r
37 sfap.add (types);\r
38 }\r
39 for (var i = 0; i < (noseqs - 1); i++) {\r
40 if (cpos == 0) {\r
41 distance[i][i] = 0;\r
42 }for (var j = i + 1; j < noseqs; j++) {\r
43 var sfcommon = 0;\r
44 var fi = sfap.get (i);\r
45 var fk;\r
46 var fj = sfap.get (j);\r
47 if (fi.size () > fj.size ()) {\r
48 fk = fj;\r
49 } else {\r
50 fk = fi;\r
51 fi = fj;\r
52 }for (var k, $k = fi.keySet ().iterator (); $k.hasNext () && ((k = $k.next ()) || true);) {\r
53 var sfj = fk.get (k);\r
54 if (sfj != null) {\r
55 sfcommon++;\r
56 }}\r
57 distance[i][j] += (fi.size () + fk.size () - 2 * sfcommon);\r
58 distance[j][i] += distance[i][j];\r
59 }\r
60 }\r
61 }\r
62 for (var i = 0; i < noseqs; i++) {\r
63 for (var j = i + 1; j < noseqs; j++) {\r
64 distance[i][j] /= cpwidth;\r
65 distance[j][i] = distance[i][j];\r
66 }\r
67 }\r
68 return distance;\r
69 }, "jalview.datamodel.AlignmentView");\r
70 Clazz.overrideMethod (c$, "getName", \r
71 function () {\r
72 return "Sequence Feature Similarity";\r
73 });\r
74 Clazz.overrideMethod (c$, "isDNA", \r
75 function () {\r
76 return true;\r
77 });\r
78 Clazz.overrideMethod (c$, "isProtein", \r
79 function () {\r
80 return true;\r
81 });\r
82 Clazz.overrideMethod (c$, "toString", \r
83 function () {\r
84 return "Score between sequences based on hamming distance between binary vectors marking features displayed at each column";\r
85 });\r
86 });\r