diff --git a/uk/ac/sanger/artemis/io/MSPcrunchStreamFeature.java b/uk/ac/sanger/artemis/io/MSPcrunchStreamFeature.java index fd0cfb07354a5958d63cd1afcffa995122e0f40a..09931200ac35a202bbe7ab644bafb06558ea25cf 100644 --- a/uk/ac/sanger/artemis/io/MSPcrunchStreamFeature.java +++ b/uk/ac/sanger/artemis/io/MSPcrunchStreamFeature.java @@ -20,7 +20,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/io/MSPcrunchStreamFeature.java,v 1.3 2005-10-11 14:20:31 tjc Exp $ + * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/io/MSPcrunchStreamFeature.java,v 1.4 2005-10-13 12:21:24 tjc Exp $ */ package uk.ac.sanger.artemis.io; @@ -33,7 +33,7 @@ import java.io.*; * A StreamFeature that thinks it is a MSPcrunch feature. * * @author Kim Rutherford - * @version $Id: MSPcrunchStreamFeature.java,v 1.3 2005-10-11 14:20:31 tjc Exp $ + * @version $Id: MSPcrunchStreamFeature.java,v 1.4 2005-10-13 12:21:24 tjc Exp $ **/ public class MSPcrunchStreamFeature @@ -110,37 +110,76 @@ public class MSPcrunchStreamFeature throws ReadFormatException { super (null); - final StringVector line_bits = StringVector.getStrings (line, " "); +// final StringVector line_bits = StringVector.getStrings (line, " "); - if (line_bits.size () < 7) { + int index = 0; + int lastIndex = 0; + int count = 1; + + while( (index = line.indexOf(" ", index)) > -1) + { + count++; + index++; + } + + if(count > 8) + count = 9; + else if(count < 7) throw new ReadFormatException ("invalid MSPcrunch line (not enough " + "fields): " + line); + + final String line_bits[] = new String[count]; + count = 0; + index = 0; + + while( (index = line.indexOf(" ", index)) > -1 && + count < line_bits.length-1) + { + line_bits[count] = line.substring(lastIndex, index); + count++; + index++; + lastIndex = index; + } + if(lastIndex < line.length()) + { + line_bits[count] = line.substring(lastIndex); + count++; } - try { - int query_start = Integer.valueOf ((String)line_bits.elementAt (2)).intValue (); - int query_end = Integer.valueOf ((String)line_bits.elementAt (3)).intValue (); + try + { + int query_start = Integer.valueOf (line_bits[2]).intValue (); + int query_end = Integer.valueOf (line_bits[3]).intValue (); final boolean crunch_x; final boolean complement_flag; - if (line_bits.elementAt (1).equals ("(+1)")) { + if (line_bits[1].equals ("(+1)")) + { crunch_x = true; complement_flag = false; - } else { - if (line_bits.elementAt (1).equals ("(-1)")) { + } + else + { + if (line_bits[1].equals ("(-1)")) + { crunch_x = true; complement_flag = true; - } else { - if (((String)line_bits.elementAt (1)).charAt (0) == '.' || - Character.isDigit (((String)line_bits.elementAt (1)).charAt (0))) { + } + else + { + if (line_bits[1].charAt (0) == '.' || + Character.isDigit (line_bits[1].charAt (0))) + { crunch_x = false; - if (query_start > query_end) { + if (query_start > query_end) complement_flag = true; - } else { + else complement_flag = false; - } - } else { + + } + else + { final String message = "invalid MSPcrunch line - column 3 should be a " + "number, (-1) or (+1): " + line; @@ -150,61 +189,50 @@ public class MSPcrunchStreamFeature } - if (query_start > query_end) { + if(query_start > query_end) + { final int tmp = query_end; query_end = query_start; query_start = tmp; } - final String score = (String)line_bits.elementAt (0); - - final String percent_id; + if(crunch_x) + line_bits[1] = null; - if (crunch_x) { - percent_id = null; - } else { - percent_id = (String)line_bits.elementAt (1); - } + final Qualifier query_id_qualifier; - final String query_id; final String subject_start; final String subject_end; final String subject_id; final String description; - if (crunch_x) { - query_id = "unknown"; - subject_start = (String)line_bits.elementAt (4); - subject_end = (String)line_bits.elementAt (5); - subject_id = (String)line_bits.elementAt (6); + if(crunch_x) + { + query_id_qualifier = new Qualifier ("query_id", "unknown"); + subject_start = line_bits[4]; + subject_end = line_bits[5]; + subject_id = line_bits[6]; final StringBuffer desc_buffer = new StringBuffer (); - for (int i = 7 ; i < line_bits.size () ; ++i) { - desc_buffer.append ((String)line_bits.elementAt (i)); - if (i < line_bits.size () - 1) { - desc_buffer.append (" "); - } - } - description = desc_buffer.toString (); - } else { - query_id = (String)line_bits.elementAt (4); - subject_start = (String)line_bits.elementAt (5); - subject_end = (String)line_bits.elementAt (6); - subject_id = (String)line_bits.elementAt (7); - final StringBuffer desc_buffer = new StringBuffer (); - for (int i = 8 ; i < line_bits.size () ; ++i) { - desc_buffer.append ((String)line_bits.elementAt (i)); - if (i < line_bits.size () - 1) { + + for (int i = 7 ; i < line_bits.length ; ++i) + { + desc_buffer.append (line_bits[i]); + if(i < line_bits.length - 1) desc_buffer.append (" "); - } } description = desc_buffer.toString (); + } + else + { + query_id_qualifier = new Qualifier ("query_id", line_bits[4]); + subject_start = line_bits[5]; + subject_end = line_bits[6]; + subject_id = line_bits[7]; + description = line_bits[8]; } final Qualifier blast_score_qualifier = - new Qualifier ("blast_score", score); - - final Qualifier query_id_qualifier = - new Qualifier ("query_id", query_id); + new Qualifier ("blast_score", line_bits[0]); final Qualifier subject_start_qualifier = new Qualifier ("subject_start", subject_start); @@ -217,13 +245,14 @@ public class MSPcrunchStreamFeature setQualifier (blast_score_qualifier); - if (percent_id != null) { + if(line_bits[1] != null) + { // score qualifier must be 1-100 final Qualifier score_qualifier = - new Qualifier ("score", percent_id); + new Qualifier ("score", line_bits[1]); final Qualifier percent_id_qualifier = - new Qualifier ("percent_id", percent_id); + new Qualifier ("percent_id", line_bits[1]); setQualifier (score_qualifier); setQualifier (percent_id_qualifier); @@ -244,17 +273,18 @@ public class MSPcrunchStreamFeature setKey (key); - final StringVector note_values = new StringVector (); - - note_values.add ("hit to " + subject_id + " " + subject_start + - ".." + subject_end + " score: " + score + - (percent_id == null ? - "" : - " percent id: " + percent_id) + - " " + description); - - final Qualifier note_qualifier = new Qualifier ("note", note_values); - +// final StringVector note_values = new StringVector (); +// note_values.add (description); +// +// This is more memory intensive than just using the description: +// note_values.add ("hit to " + subject_id + " " + subject_start + +// ".." + subject_end + " score: " + line_bits[0] + +// (line_bits[1] == null ? +// "" : +// " percent id: " + line_bits[1]) + +// " " + description); + + final Qualifier note_qualifier = new Qualifier ("note", description); setQualifier (note_qualifier); final RangeVector ranges =