Skip to content
Snippets Groups Projects
Commit 6b39d787 authored by tjc's avatar tjc
Browse files

add support for MSPcrunch file format

git-svn-id: svn+ssh://svn.internal.sanger.ac.uk/repos/svn/pathsoft/artemis/trunk@11389 ee4ac58c-ac51-4696-9907-e4b3aa274f04
parent 9b68c4bf
No related branches found
No related tags found
No related merge requests found
......@@ -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/plot/UserDataAlgorithm.java,v 1.12 2009-07-20 15:11:18 tjc Exp $
* $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/plot/UserDataAlgorithm.java,v 1.13 2009-07-21 08:36:20 tjc Exp $
*/
package uk.ac.sanger.artemis.plot;
......@@ -48,7 +48,7 @@ import javax.swing.JPanel;
* set in the constructor.
*
* @author Kim Rutherford <kmr@sanger.ac.uk>
* @version $Id: UserDataAlgorithm.java,v 1.12 2009-07-20 15:11:18 tjc Exp $
* @version $Id: UserDataAlgorithm.java,v 1.13 2009-07-21 08:36:20 tjc Exp $
**/
public class UserDataAlgorithm extends BaseAlgorithm
......@@ -64,6 +64,7 @@ public class UserDataAlgorithm extends BaseAlgorithm
public static int WIGGLE_FIXED_STEP_FORMAT = 4;
public static int BLAST_FORMAT = 5;
public static int MSPCRUNCH_BLAST_FORMAT = 6;
/** The data read by the constructor - for BASE_PER_LINE_FORMAT */
private float data[][] = null;
......@@ -122,13 +123,16 @@ public class UserDataAlgorithm extends BaseAlgorithm
Pattern dataPattern = Pattern.compile("^\\s*([\\d\\.]+\\s*)+$");
Pattern blastPattern = Pattern.compile(
"^(\\S+\\t+){2}[\\d\\.]+\\t+(\\d+\\t+){7}\\S+\\t+(\\d+)$");
"^(\\S+\\t+){2}[\\d\\.]+\\t+(\\d+\\t+){7}\\S+\\t+(\\s*\\d+)$");
Pattern mspCrunchPattern = Pattern.compile(
"^\\d+\\s[\\d\\.]+(\\s\\d+){2}\\s\\D\\S+(\\s\\d+){2}\\s\\D\\S+.*");
if(dataPattern.matcher(first_line).matches())
FORMAT = BASE_PER_LINE_FORMAT;
else if(blastPattern.matcher(first_line).matches())
{
FORMAT = BLAST_FORMAT;
}
else if(mspCrunchPattern.matcher(first_line).matches())
FORMAT = MSPCRUNCH_BLAST_FORMAT;
else
{
StringBuffer header = new StringBuffer(first_line+"\n");
......@@ -157,7 +161,8 @@ public class UserDataAlgorithm extends BaseAlgorithm
if(FORMAT == BASE_SPECIFIED_FORMAT ||
FORMAT == BASE_PER_LINE_FORMAT)
readData(pushback_reader);
else if(FORMAT == BLAST_FORMAT)
else if(FORMAT == BLAST_FORMAT ||
FORMAT == MSPCRUNCH_BLAST_FORMAT)
readBlast(pushback_reader);
else
readWiggle(pushback_reader);
......@@ -349,13 +354,26 @@ public class UserDataAlgorithm extends BaseAlgorithm
int count = 0;
int lineNum = 0;
final int seqLength = getStrand ().getSequenceLength ();
final Pattern patt = Pattern.compile("\\t+");
final Pattern patt;
if(FORMAT == BLAST_FORMAT)
patt = Pattern.compile("\\t+");
else
patt = Pattern.compile("\\s");
dataMap = new HashMap<Integer, Float[]>();
this.number_of_values = 1;
int coordIndexStart = 6;
int coordIndexEnd = 7;
if(FORMAT == MSPCRUNCH_BLAST_FORMAT)
{
coordIndexStart = 2;
coordIndexEnd = 3;
}
while ((line = pushback_reader.readLine ()) != null)
{
String tokens[] = patt.split(line.trim());
......@@ -364,9 +382,12 @@ public class UserDataAlgorithm extends BaseAlgorithm
{
final JPanel message = new JPanel(new GridLayout(2,1));
JCheckBox query = new JCheckBox("Query "+tokens[0], true);
String queryStr = (FORMAT == BLAST_FORMAT) ? tokens[0] : tokens[4];
String subjStr = (FORMAT == BLAST_FORMAT) ? tokens[1] : tokens[7];
JCheckBox query = new JCheckBox(queryStr, true);
message.add(query);
JCheckBox subj = new JCheckBox("Subject "+tokens[1], false);
JCheckBox subj = new JCheckBox(subjStr, false);
message.add(subj);
ButtonGroup group = new ButtonGroup();
group.add(query);
......@@ -375,16 +396,28 @@ public class UserDataAlgorithm extends BaseAlgorithm
JOptionPane.showConfirmDialog(null, message,
"Use Coordinates From", JOptionPane.OK_OPTION);
if(subj.isSelected())
{
if(FORMAT == BLAST_FORMAT)
{
coordIndexStart = 8;
coordIndexEnd = 9;
}
else
{
coordIndexStart = 5;
coordIndexEnd = 6;
}
}
}
lineNum++;
int startBase = Integer.parseInt(tokens[coordIndexStart]);
int endBase = Integer.parseInt(tokens[coordIndexEnd]);
float value = Float.parseFloat(tokens[11]);
float value;
if(FORMAT == BLAST_FORMAT)
value = Float.parseFloat(tokens[11]);
else
value = Float.parseFloat(tokens[0]);
int valueIndex = 0;
try
......@@ -415,12 +448,17 @@ public class UserDataAlgorithm extends BaseAlgorithm
if (dataMap.containsKey(base))
{
Float oldValues[] = dataMap.get(base);
if(oldValues[0] > value)
value = oldValues[0];
if(oldValues[0] < value)
{
valueArray[number_of_values - 1] = value;
dataMap.put(base, valueArray);
}
}
else
{
valueArray[number_of_values - 1] = value;
dataMap.put(base, valueArray);
}
count++;
}
......@@ -435,6 +473,8 @@ public class UserDataAlgorithm extends BaseAlgorithm
average_value = average_value/count;
default_window_size = 1;
FORMAT = BLAST_FORMAT;
}
/**
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment