From 5b1e100f2def37f936bfc48a541261648c533aa6 Mon Sep 17 00:00:00 2001 From: jprocter Date: Fri, 27 May 2005 09:29:27 +0000 Subject: [PATCH] Old MSF Format writer now renamed. --- src/jalview/io/PileUpfile.java | 248 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 248 insertions(+) create mode 100755 src/jalview/io/PileUpfile.java diff --git a/src/jalview/io/PileUpfile.java b/src/jalview/io/PileUpfile.java new file mode 100755 index 0000000..387596d --- /dev/null +++ b/src/jalview/io/PileUpfile.java @@ -0,0 +1,248 @@ +package jalview.io; + +/** + *

Title:

+ * PileUpfile + *

Description:

+ * + * Read and write PileUp style MSF Files. + * This used to be the MSFFile class, and was written according to the EBI's idea + * of a subset of the MSF alignment format. But, that was updated to reflect current + * GCG style IO fashion, as found in Emboss (thanks David Martin!) + * + **/ + + +import jalview.datamodel.*; +import jalview.util.*; + +import java.io.*; +import java.util.*; + + +public class PileUpfile + extends AlignFile +{ + +public PileUpfile() +{} + +public PileUpfile(String inStr) { + super(inStr); +} + +public PileUpfile(String inFile, String type) throws IOException { + super(inFile,type); +} + +public void parse() { + + int i = 0; + boolean seqFlag = false; + String key = new String(); + Vector headers = new Vector(); + Hashtable seqhash = new Hashtable(); + String line; + + try { + while ((line = nextLine()) != null) { + + StringTokenizer str = new StringTokenizer(line); + + while (str.hasMoreTokens()) { + + String inStr = str.nextToken(); + + //If line has header information add to the headers vector + if (inStr.indexOf("Name:") != -1) { + key = str.nextToken(); + headers.addElement(key); + } + + //if line has // set SeqFlag to 1 so we know sequences are coming + if (inStr.indexOf("//") != -1) { + seqFlag = true; + } + + //Process lines as sequence lines if seqFlag is set + if (( inStr.indexOf("//") == -1) && (seqFlag == true)) { + //seqeunce id is the first field + key = inStr; + StringBuffer tempseq; + + //Get sequence from hash if it exists + if (seqhash.containsKey(key)) { + tempseq = (StringBuffer)seqhash.get(key); + } else { + tempseq = new StringBuffer(); + seqhash.put(key,tempseq); + } + + //loop through the rest of the words + while (str.hasMoreTokens()) { + //append the word to the sequence + tempseq.append(str.nextToken()); + } + } + } + } + } catch (IOException e) { + System.err.println("Exception parsing PileUpfile " + e); + e.printStackTrace(); + } + + this.noSeqs = headers.size(); + + //Add sequences to the hash + for (i = 0; i < headers.size(); i++ ) { + + if ( seqhash.get(headers.elementAt(i)) != null) { + String head = headers.elementAt(i).toString(); + String seq = seqhash.get(head).toString(); + + int start = 1; + int end = seq.length(); + + if (maxLength < head.length() ) { + maxLength = head.length(); + } + + if (head.indexOf("/") > 0 ) { + + StringTokenizer st = new StringTokenizer(head,"/"); + + if (st.countTokens() == 2) { + + head = st.nextToken(); + String tmp = st.nextToken(); + st = new StringTokenizer(tmp,"-"); + if (st.countTokens() == 2) { + start = Integer.valueOf(st.nextToken()).intValue(); + end = Integer.valueOf(st.nextToken()).intValue(); + } + } + } + + Sequence newSeq = new Sequence(head,seq,start,end); + + seqs.addElement(newSeq); + + } else { + System.err.println("PileUpfile Parser: Can't find sequence for " + headers.elementAt(i)); + } + } + +} + +public static int checkSum(String seq) { + //String chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz.*~&@"; + int check = 0; + + String index = "--------------------------------------&---*---.-----------------@ABCDEFGHIJKLMNOPQRSTUVWXYZ------ABCDEFGHIJKLMNOPQRSTUVWXYZ----@"; + index += "--------------------------------------------------------------------------------------------------------------------------------"; + + for(int i = 0; i < seq.length(); i++) { + try { + if (i max) { + max = seq.length(); + } + if (name.length() > maxid) { + maxid = name.length(); + } + i++; + } + + if (maxid < 10) { + maxid = 10; + } + maxid++; + out.append( "\n\n//\n\n"); + + int len = 50; + + int nochunks = max / len + 1; + if (max%len == 0) { + nochunks--; + } + for (i = 0; i < nochunks; i++) { + int j = 0; + while (j < s.length && s[j] != null) { + String name = s[j].getName(); + out.append( new Format("%-" + maxid + "s").form(name + "/" + s[j].getStart() + "-" + s[j].getEnd()) + " "); + for (int k = 0; k < 5; k++) { + + int start = i*50 + k*10; + int end = start + 10; + + if (end < s[j].getSequence().length() && start < s[j].getSequence().length() ) { + out.append(s[j].getSequence().substring(start,end)); + if (k < 4) { + out.append(" "); + } else { + out.append("\n"); + } + } else { + if (start < s[j].getSequence().length()) { + out.append(s[j].getSequence().substring(start)); + out.append("\n"); + } else { + if (k == 0) { + out.append("\n"); + } + } + } + } + j++; + } + out.append("\n"); + + } + return out.toString(); +} +public String print() { + return print(getSeqsAsArray()); +} +} + + + + + + + -- 1.7.10.2