X-Git-Url: http://source.jalview.org/gitweb/?p=jalviewjs.git;a=blobdiff_plain;f=bin%2Fjalview%2Fio%2FMSFfile.js;h=ee2e3af8c13a8a99dd632b7bcab621fa84560563;hp=d80fbdc7346106cf8303b1c755131167f2fc855d;hb=7301a2415adab88038b291fc54caeeb3a5a47a44;hpb=6154cb57a6eac3bb1344b8342495f5bb701ee921 diff --git a/bin/jalview/io/MSFfile.js b/bin/jalview/io/MSFfile.js index d80fbdc..ee2e3af 100644 --- a/bin/jalview/io/MSFfile.js +++ b/bin/jalview/io/MSFfile.js @@ -1,190 +1,190 @@ -Clazz.declarePackage ("jalview.io"); -Clazz.load (["jalview.io.AlignFile"], "jalview.io.MSFfile", ["jalview.datamodel.Sequence", "jalview.util.Comparison", "$.Format", "java.lang.StringBuffer", "java.util.Hashtable", "$.StringTokenizer", "$.Vector"], function () { -c$ = Clazz.declareType (jalview.io, "MSFfile", jalview.io.AlignFile); -Clazz.makeConstructor (c$, -function () { -Clazz.superConstructor (this, jalview.io.MSFfile, []); -}); -Clazz.overrideMethod (c$, "parse", -function () { -var i = 0; -var seqFlag = false; -var key = String.instantialize (); -var headers = new java.util.Vector (); -var seqhash = new java.util.Hashtable (); -var line; -try { -while ((line = this.nextLine ()) != null) { -var str = new java.util.StringTokenizer (line); -while (str.hasMoreTokens ()) { -var inStr = str.nextToken (); -if (inStr.indexOf ("Name:") != -1) { -key = str.nextToken (); -headers.addElement (key); -}if (inStr.indexOf ("//") != -1) { -seqFlag = true; -}if ((inStr.indexOf ("//") == -1) && (seqFlag == true)) { -key = inStr; -var tempseq; -if (seqhash.containsKey (key)) { -tempseq = seqhash.get (key); -} else { -tempseq = new StringBuffer (); -seqhash.put (key, tempseq); -}while (str.hasMoreTokens ()) { -tempseq.append (str.nextToken ()); -} -}} -} -} catch (e) { -if (Clazz.exceptionOf (e, java.io.IOException)) { -System.err.println ("Exception parsing MSFFile " + e); -e.printStackTrace (); -} else { -throw e; -} -} -this.noSeqs = headers.size (); -for (i = 0; i < headers.size (); i++) { -if (seqhash.get (headers.elementAt (i)) != null) { -var head = headers.elementAt (i).toString (); -var seq = seqhash.get (head).toString (); -if (this.maxLength < head.length) { -this.maxLength = head.length; -}seq = seq.$replace ('~', '-'); -var newSeq = this.parseId (head); -newSeq.setSequence (seq); -this.seqs.addElement (newSeq); -} else { -System.err.println ("MSFFile Parser: Can't find sequence for " + headers.elementAt (i)); -}} -}); -Clazz.defineMethod (c$, "checkSum", -function (seq) { -var check = 0; -var sequence = seq.toUpperCase (); -for (var i = 0; i < sequence.length; i++) { -try { -var value = sequence.charCodeAt (i); -if (value != -1) { -check += (i % 57 + 1) * value; -}} catch (e) { -if (Clazz.exceptionOf (e, Exception)) { -System.err.println ("Exception during MSF Checksum calculation"); -e.printStackTrace (); -} else { -throw e; -} -} -} -return check % 10000; -}, "~S"); -Clazz.defineMethod (c$, "print", -function (seqs) { -var is_NA = jalview.util.Comparison.isNucleotide (seqs); -var s = new Array (seqs.length); -var out = new StringBuffer ("!!" + (is_NA ? "NA" : "AA") + "_MULTIPLE_ALIGNMENT 1.0"); -out.append (this.newline); -out.append (this.newline); -var max = 0; -var maxid = 0; -var i = 0; -while ((i < seqs.length) && (seqs[i] != null)) { -s[i] = new jalview.datamodel.Sequence (seqs[i].getName (), seqs[i].getSequenceAsString ().$replace ('-', '.'), seqs[i].getStart (), seqs[i].getEnd ()); -var sb = new StringBuffer (); -sb.append (s[i].getSequence ()); -for (var ii = 0; ii < sb.length (); ii++) { -if (sb.charAt (ii) == '.') { -sb.setCharAt (ii, '~'); -} else { -break; -}} -for (var ii = sb.length () - 1; ii > 0; ii--) { -if (sb.charAt (ii) == '.') { -sb.setCharAt (ii, '~'); -} else { -break; -}} -s[i].setSequence (sb.toString ()); -if (s[i].getSequence ().length > max) { -max = s[i].getSequence ().length; -}i++; -} -var maxLenpad = new jalview.util.Format ("%" + ( String.instantialize ("" + max)).length + "d"); -var maxChkpad = new jalview.util.Format ("%" + ( String.instantialize ("1" + max)).length + "d"); -i = 0; -var bigChecksum = 0; -var checksums = Clazz.newIntArray (s.length, 0); -while (i < s.length) { -checksums[i] = this.checkSum (s[i].getSequenceAsString ()); -bigChecksum += checksums[i]; -i++; -} -var maxNB = 0; -out.append (" MSF: " + s[0].getSequence ().length + " Type: " + (is_NA ? "N" : "P") + " Check: " + (bigChecksum % 10000) + " .."); -out.append (this.newline); -out.append (this.newline); -out.append (this.newline); -var nameBlock = new Array (s.length); -var idBlock = new Array (s.length); -i = 0; -while ((i < s.length) && (s[i] != null)) { -nameBlock[i] = String.instantialize (" Name: " + this.printId (s[i]) + " "); -idBlock[i] = String.instantialize ("Len: " + maxLenpad.formLong (s[i].getSequence ().length) + " Check: " + maxChkpad.formLong (checksums[i]) + " Weight: 1.00" + this.newline); -if (s[i].getName ().length > maxid) { -maxid = s[i].getName ().length; -}if (nameBlock[i].length > maxNB) { -maxNB = nameBlock[i].length; -}i++; -} -if (maxid < 10) { -maxid = 10; -}if (maxNB < 15) { -maxNB = 15; -}var nbFormat = new jalview.util.Format ("%-" + maxNB + "s"); -for (i = 0; (i < s.length) && (s[i] != null); i++) { -out.append (nbFormat.form (nameBlock[i]) + idBlock[i]); -} -maxid++; -out.append (this.newline); -out.append (this.newline); -out.append ("//"); -out.append (this.newline); -out.append (this.newline); -var len = 50; -var nochunks = (Clazz.doubleToInt (max / len)) + 1; -if ((max % len) == 0) { -nochunks--; -}for (i = 0; i < nochunks; i++) { -var j = 0; -while ((j < s.length) && (s[j] != null)) { -var name = this.printId (s[j]); -out.append ( new jalview.util.Format ("%-" + maxid + "s").form (name + " ")); -for (var k = 0; k < 5; k++) { -var start = (i * 50) + (k * 10); -var end = start + 10; -if ((end < s[j].getSequence ().length) && (start < s[j].getSequence ().length)) { -out.append (s[j].getSequence (start, end)); -if (k < 4) { -out.append (" "); -} else { -out.append (this.newline); -}} else { -if (start < s[j].getSequence ().length) { -out.append (s[j].getSequenceAsString ().substring (start)); -out.append (this.newline); -} else { -if (k == 0) { -out.append (this.newline); -}}}} -j++; -} -out.append (this.newline); -} -return out.toString (); -}, "~A"); -Clazz.defineMethod (c$, "print", -function () { -return this.print (this.getSeqsAsArray ()); -}); -}); +Clazz.declarePackage ("jalview.io"); +Clazz.load (["jalview.io.AlignFile"], "jalview.io.MSFfile", ["jalview.datamodel.Sequence", "jalview.util.Comparison", "$.Format", "java.lang.StringBuffer", "java.util.Hashtable", "$.StringTokenizer", "$.Vector"], function () { +c$ = Clazz.declareType (jalview.io, "MSFfile", jalview.io.AlignFile); +Clazz.makeConstructor (c$, +function () { +Clazz.superConstructor (this, jalview.io.MSFfile, []); +}); +Clazz.overrideMethod (c$, "parse", +function () { +var i = 0; +var seqFlag = false; +var key = String.instantialize (); +var headers = new java.util.Vector (); +var seqhash = new java.util.Hashtable (); +var line; +try { +while ((line = this.nextLine ()) != null) { +var str = new java.util.StringTokenizer (line); +while (str.hasMoreTokens ()) { +var inStr = str.nextToken (); +if (inStr.indexOf ("Name:") != -1) { +key = str.nextToken (); +headers.addElement (key); +}if (inStr.indexOf ("//") != -1) { +seqFlag = true; +}if ((inStr.indexOf ("//") == -1) && (seqFlag == true)) { +key = inStr; +var tempseq; +if (seqhash.containsKey (key)) { +tempseq = seqhash.get (key); +} else { +tempseq = new StringBuffer (); +seqhash.put (key, tempseq); +}while (str.hasMoreTokens ()) { +tempseq.append (str.nextToken ()); +} +}} +} +} catch (e) { +if (Clazz.exceptionOf (e, java.io.IOException)) { +System.err.println ("Exception parsing MSFFile " + e); +e.printStackTrace (); +} else { +throw e; +} +} +this.noSeqs = headers.size (); +for (i = 0; i < headers.size (); i++) { +if (seqhash.get (headers.elementAt (i)) != null) { +var head = headers.elementAt (i).toString (); +var seq = seqhash.get (head).toString (); +if (this.maxLength < head.length) { +this.maxLength = head.length; +}seq = seq.$replace ('~', '-'); +var newSeq = this.parseId (head); +newSeq.setSequence (seq); +this.seqs.addElement (newSeq); +} else { +System.err.println ("MSFFile Parser: Can't find sequence for " + headers.elementAt (i)); +}} +}); +Clazz.defineMethod (c$, "checkSum", +function (seq) { +var check = 0; +var sequence = seq.toUpperCase (); +for (var i = 0; i < sequence.length; i++) { +try { +var value = sequence.charCodeAt (i); +if (value != -1) { +check += (i % 57 + 1) * value; +}} catch (e) { +if (Clazz.exceptionOf (e, Exception)) { +System.err.println ("Exception during MSF Checksum calculation"); +e.printStackTrace (); +} else { +throw e; +} +} +} +return check % 10000; +}, "~S"); +Clazz.defineMethod (c$, "print", +function (seqs) { +var is_NA = jalview.util.Comparison.isNucleotide (seqs); +var s = new Array (seqs.length); +var out = new StringBuffer ("!!" + (is_NA ? "NA" : "AA") + "_MULTIPLE_ALIGNMENT 1.0"); +out.append (this.newline); +out.append (this.newline); +var max = 0; +var maxid = 0; +var i = 0; +while ((i < seqs.length) && (seqs[i] != null)) { +s[i] = new jalview.datamodel.Sequence (seqs[i].getName (), seqs[i].getSequenceAsString ().$replace ('-', '.'), seqs[i].getStart (), seqs[i].getEnd ()); +var sb = new StringBuffer (); +sb.append (s[i].getSequence ()); +for (var ii = 0; ii < sb.length (); ii++) { +if (sb.charAt (ii) == '.') { +sb.setCharAt (ii, '~'); +} else { +break; +}} +for (var ii = sb.length () - 1; ii > 0; ii--) { +if (sb.charAt (ii) == '.') { +sb.setCharAt (ii, '~'); +} else { +break; +}} +s[i].setSequence (sb.toString ()); +if (s[i].getSequence ().length > max) { +max = s[i].getSequence ().length; +}i++; +} +var maxLenpad = new jalview.util.Format ("%" + ( String.instantialize ("" + max)).length + "d"); +var maxChkpad = new jalview.util.Format ("%" + ( String.instantialize ("1" + max)).length + "d"); +i = 0; +var bigChecksum = 0; +var checksums = Clazz.newIntArray (s.length, 0); +while (i < s.length) { +checksums[i] = this.checkSum (s[i].getSequenceAsString ()); +bigChecksum += checksums[i]; +i++; +} +var maxNB = 0; +out.append (" MSF: " + s[0].getSequence ().length + " Type: " + (is_NA ? "N" : "P") + " Check: " + (bigChecksum % 10000) + " .."); +out.append (this.newline); +out.append (this.newline); +out.append (this.newline); +var nameBlock = new Array (s.length); +var idBlock = new Array (s.length); +i = 0; +while ((i < s.length) && (s[i] != null)) { +nameBlock[i] = String.instantialize (" Name: " + this.printId (s[i]) + " "); +idBlock[i] = String.instantialize ("Len: " + maxLenpad.formLong (s[i].getSequence ().length) + " Check: " + maxChkpad.formLong (checksums[i]) + " Weight: 1.00" + this.newline); +if (s[i].getName ().length > maxid) { +maxid = s[i].getName ().length; +}if (nameBlock[i].length > maxNB) { +maxNB = nameBlock[i].length; +}i++; +} +if (maxid < 10) { +maxid = 10; +}if (maxNB < 15) { +maxNB = 15; +}var nbFormat = new jalview.util.Format ("%-" + maxNB + "s"); +for (i = 0; (i < s.length) && (s[i] != null); i++) { +out.append (nbFormat.form (nameBlock[i]) + idBlock[i]); +} +maxid++; +out.append (this.newline); +out.append (this.newline); +out.append ("//"); +out.append (this.newline); +out.append (this.newline); +var len = 50; +var nochunks = (Clazz.doubleToInt (max / len)) + 1; +if ((max % len) == 0) { +nochunks--; +}for (i = 0; i < nochunks; i++) { +var j = 0; +while ((j < s.length) && (s[j] != null)) { +var name = this.printId (s[j]); +out.append ( new jalview.util.Format ("%-" + maxid + "s").form (name + " ")); +for (var k = 0; k < 5; k++) { +var start = (i * 50) + (k * 10); +var end = start + 10; +if ((end < s[j].getSequence ().length) && (start < s[j].getSequence ().length)) { +out.append (s[j].getSequence (start, end)); +if (k < 4) { +out.append (" "); +} else { +out.append (this.newline); +}} else { +if (start < s[j].getSequence ().length) { +out.append (s[j].getSequenceAsString ().substring (start)); +out.append (this.newline); +} else { +if (k == 0) { +out.append (this.newline); +}}}} +j++; +} +out.append (this.newline); +} +return out.toString (); +}, "~A"); +Clazz.defineMethod (c$, "print", +function () { +return this.print (this.getSeqsAsArray ()); +}); +});