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