JAL-1807 Bob's JalviewJS prototype first commit
[jalviewjs.git] / bin / jalview / analysis / SeqsetUtils.js
1 Clazz.declarePackage ("jalview.analysis");\r
2 Clazz.load (null, "jalview.analysis.SeqsetUtils", ["jalview.analysis.AlignSeq", "$.SequenceIdMatcher", "jalview.datamodel.Sequence", "jalview.util.Comparison", "java.util.Hashtable", "$.Vector"], function () {\r
3 c$ = Clazz.declareType (jalview.analysis, "SeqsetUtils");\r
4 c$.SeqCharacterHash = Clazz.defineMethod (c$, "SeqCharacterHash", \r
5 function (seq) {\r
6 var sqinfo =  new java.util.Hashtable ();\r
7 sqinfo.put ("Name", seq.getName ());\r
8 sqinfo.put ("Start",  new Integer (seq.getStart ()));\r
9 sqinfo.put ("End",  new Integer (seq.getEnd ()));\r
10 if (seq.getDescription () != null) {\r
11 sqinfo.put ("Description", seq.getDescription ());\r
12 }var sfeat =  new java.util.Vector ();\r
13 var sfarray = seq.getSequenceFeatures ();\r
14 if (sfarray != null && sfarray.length > 0) {\r
15 for (var i = 0; i < sfarray.length; i++) {\r
16 sfeat.addElement (sfarray[i]);\r
17 }\r
18 }sqinfo.put ("SeqFeatures", sfeat);\r
19 sqinfo.put ("PdbId", (seq.getPDBId () != null) ? seq.getPDBId () :  new java.util.Vector ());\r
20 sqinfo.put ("datasetSequence", (seq.getDatasetSequence () != null) ? seq.getDatasetSequence () :  new jalview.datamodel.Sequence ("THISISAPLACEHOLDER", ""));\r
21 return sqinfo;\r
22 }, "jalview.datamodel.SequenceI");\r
23 c$.SeqCharacterUnhash = Clazz.defineMethod (c$, "SeqCharacterUnhash", \r
24 function (sq, sqinfo) {\r
25 var namePresent = true;\r
26 if (sqinfo == null) {\r
27 return false;\r
28 }var oldname = sqinfo.get ("Name");\r
29 var start = sqinfo.get ("Start");\r
30 var end = sqinfo.get ("End");\r
31 var sfeatures = sqinfo.get ("SeqFeatures");\r
32 var pdbid = sqinfo.get ("PdbId");\r
33 var description = sqinfo.get ("Description");\r
34 var seqds = sqinfo.get ("datasetSequence");\r
35 if (oldname == null) {\r
36 namePresent = false;\r
37 } else {\r
38 sq.setName (oldname);\r
39 }if (pdbid != null && pdbid.size () > 0) {\r
40 sq.setPDBId (pdbid);\r
41 }if ((start != null) && (end != null)) {\r
42 sq.setStart (start.intValue ());\r
43 sq.setEnd (end.intValue ());\r
44 }if ((sfeatures != null) && (sfeatures.size () > 0)) {\r
45 var sfarray =  new Array (sfeatures.size ());\r
46 for (var is = 0, isize = sfeatures.size (); is < isize; is++) {\r
47 sfarray[is] = sfeatures.elementAt (is);\r
48 }\r
49 sq.setSequenceFeatures (sfarray);\r
50 }if (description != null) {\r
51 sq.setDescription (description);\r
52 }if ((seqds != null) && !(seqds.getName ().equals ("THISISAPLACEHOLDER") && seqds.getLength () == 0)) {\r
53 sq.setDatasetSequence (seqds);\r
54 }return namePresent;\r
55 }, "jalview.datamodel.SequenceI,java.util.Hashtable");\r
56 c$.unique_name = Clazz.defineMethod (c$, "unique_name", \r
57 function (i) {\r
58 return  String.instantialize ("Sequence" + i);\r
59 }, "~N");\r
60 c$.uniquify = Clazz.defineMethod (c$, "uniquify", \r
61 function (sequences, write_names) {\r
62 var map =  new java.util.Hashtable ();\r
63 for (var i = 0; i < sequences.length; i++) {\r
64 var safename = jalview.analysis.SeqsetUtils.unique_name (i);\r
65 map.put (safename, jalview.analysis.SeqsetUtils.SeqCharacterHash (sequences[i]));\r
66 if (write_names) {\r
67 sequences[i].setName (safename);\r
68 }}\r
69 return map;\r
70 }, "~A,~B");\r
71 c$.deuniquify = Clazz.defineMethod (c$, "deuniquify", \r
72 function (map, sequences) {\r
73 return jalview.analysis.SeqsetUtils.deuniquify (map, sequences, true);\r
74 }, "java.util.Hashtable,~A");\r
75 c$.deuniquify = Clazz.defineMethod (c$, "deuniquify", \r
76 function (map, sequences, quiet) {\r
77 var matcher =  new jalview.analysis.SequenceIdMatcher (sequences);\r
78 var msq = null;\r
79 var keys = map.keys ();\r
80 var unmatched =  new java.util.Vector ();\r
81 for (var i = 0, j = sequences.length; i < j; i++) {\r
82 unmatched.addElement (sequences[i]);\r
83 }\r
84 while (keys.hasMoreElements ()) {\r
85 var key = keys.nextElement ();\r
86 if (Clazz.instanceOf (key, String)) {\r
87 if ((msq = matcher.findIdMatch (key)) != null) {\r
88 var sqinfo = map.get (key);\r
89 unmatched.removeElement (msq);\r
90 jalview.analysis.SeqsetUtils.SeqCharacterUnhash (msq, sqinfo);\r
91 } else {\r
92 if (!quiet) {\r
93 System.err.println ("Can't find '" + (key) + "' in uniquified alignment");\r
94 }}}}\r
95 if (unmatched.size () > 0 && !quiet) {\r
96 System.err.println ("Did not find matches for :");\r
97 for (var i = unmatched.elements (); i.hasMoreElements (); System.out.println ((i.nextElement ()).getName ())) {\r
98 ;}\r
99 return false;\r
100 }return true;\r
101 }, "java.util.Hashtable,~A,~B");\r
102 c$.getNonEmptySequenceSet = Clazz.defineMethod (c$, "getNonEmptySequenceSet", \r
103 function (sequences) {\r
104 var ungapped =  Clazz.newBooleanArray (sequences.length, false);\r
105 var msflen = 0;\r
106 for (var i = 0, j = sequences.length; i < j; i++) {\r
107 var tempseq = jalview.analysis.AlignSeq.extractGaps (jalview.util.Comparison.GapChars, sequences[i].getSequenceAsString ());\r
108 if (tempseq.length == 0) {\r
109 ungapped[i] = false;\r
110 } else {\r
111 ungapped[i] = true;\r
112 msflen++;\r
113 }}\r
114 if (msflen == 0) {\r
115 return null;\r
116 }var mset =  new Array (msflen);\r
117 for (var i = 0, j = sequences.length, k = 0; i < j; i++) {\r
118 if (ungapped[i]) {\r
119 mset[k++] = sequences[i];\r
120 }}\r
121 ungapped = null;\r
122 return mset;\r
123 }, "~A");\r
124 });\r