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
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
9 this.fr = view.cloneFeatureRenderer ();
\r
11 }, "jalview.api.AlignmentViewPanel");
\r
12 Clazz.overrideMethod (c$, "findDistances",
\r
13 function (seqData) {
\r
15 var dft = java.util.Arrays.asList (this.fr.getDisplayedFeatureTypes ());
\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
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
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
39 for (var i = 0; i < (noseqs - 1); i++) {
\r
42 }for (var j = i + 1; j < noseqs; j++) {
\r
44 var fi = sfap.get (i);
\r
46 var fj = sfap.get (j);
\r
47 if (fi.size () > fj.size ()) {
\r
52 }for (var k, $k = fi.keySet ().iterator (); $k.hasNext () && ((k = $k.next ()) || true);) {
\r
53 var sfj = fk.get (k);
\r
57 distance[i][j] += (fi.size () + fk.size () - 2 * sfcommon);
\r
58 distance[j][i] += distance[i][j];
\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
69 }, "jalview.datamodel.AlignmentView");
\r
70 Clazz.overrideMethod (c$, "getName",
\r
72 return "Sequence Feature Similarity";
\r
74 Clazz.overrideMethod (c$, "isDNA",
\r
78 Clazz.overrideMethod (c$, "isProtein",
\r
82 Clazz.overrideMethod (c$, "toString",
\r
84 return "Score between sequences based on hamming distance between binary vectors marking features displayed at each column";
\r