From ed8d18abc302ac802ad1d0611f3fe2fef570ab5e Mon Sep 17 00:00:00 2001 From: amwaterhouse Date: Thu, 18 Jan 2007 16:21:03 +0000 Subject: [PATCH] File Parsing returns Alignments, not Sequence[] --- src/jalview/appletgui/CutAndPasteTransfer.java | 8 ++-- src/jalview/bin/JalviewLite.java | 16 +++---- src/jalview/gui/AlignFrame.java | 2 +- src/jalview/gui/CutAndPasteTransfer.java | 12 ++--- src/jalview/gui/Desktop.java | 45 ------------------ src/jalview/gui/SequenceFetcher.java | 50 ++++++++++---------- src/jalview/io/AlignFile.java | 15 +++++- src/jalview/io/AppletFormatAdapter.java | 12 +++-- src/jalview/io/FastaFile.java | 59 +++++++++++++++++++++--- src/jalview/io/FileLoader.java | 12 ++--- src/jalview/io/FormatAdapter.java | 6 ++- src/jalview/jbgui/GFinder.java | 10 ++-- src/jalview/ws/JPredThread.java | 4 +- 13 files changed, 134 insertions(+), 117 deletions(-) diff --git a/src/jalview/appletgui/CutAndPasteTransfer.java b/src/jalview/appletgui/CutAndPasteTransfer.java index 86f55b8..bbbefa1 100755 --- a/src/jalview/appletgui/CutAndPasteTransfer.java +++ b/src/jalview/appletgui/CutAndPasteTransfer.java @@ -124,18 +124,18 @@ public class CutAndPasteTransfer extends Panel implements ActionListener, MouseL } else if(alignFrame!=null) { - SequenceI[] sequences = null; + Alignment al = null; String format = new IdentifyFile().Identify(text, AppletFormatAdapter.PASTE); try{ - sequences = new AppletFormatAdapter().readFile(text, AppletFormatAdapter.PASTE, format); + al = new AppletFormatAdapter().readFile(text, AppletFormatAdapter.PASTE, format); }catch(java.io.IOException ex) { ex.printStackTrace(); } - if (sequences != null) + if (al != null) { - AlignFrame af = new AlignFrame(new Alignment(sequences), alignFrame.viewport.applet, + AlignFrame af = new AlignFrame(al, alignFrame.viewport.applet, "Cut & Paste input - " + format, false); af.statusBar.setText("Successfully pasted alignment file"); diff --git a/src/jalview/bin/JalviewLite.java b/src/jalview/bin/JalviewLite.java index 1fbb82e..af01a99 100755 --- a/src/jalview/bin/JalviewLite.java +++ b/src/jalview/bin/JalviewLite.java @@ -143,16 +143,16 @@ public class JalviewLite extends Applet String format = new jalview.io.IdentifyFile().Identify(args[0],AppletFormatAdapter.FILE); - SequenceI[] sequences = null; + Alignment al = null; try{ - sequences = new AppletFormatAdapter().readFile(args[0], AppletFormatAdapter.FILE, format); + al = new AppletFormatAdapter().readFile(args[0], AppletFormatAdapter.FILE, format); }catch(java.io.IOException ex) { ex.printStackTrace(); } - if ( (sequences != null) && (sequences.length > 0)) + if ( (al != null) && (al.getHeight() > 0)) { - AlignFrame af = new AlignFrame(new Alignment(sequences), null, args[0], false); + AlignFrame af = new AlignFrame(al, null, args[0], false); af.statusBar.setText("Successfully loaded file " + args[0]); } } @@ -296,17 +296,17 @@ public class JalviewLite extends Applet public void run() { - SequenceI[] sequences = null; + Alignment al = null; try{ - sequences = new AppletFormatAdapter().readFile(file, protocol, + al = new AppletFormatAdapter().readFile(file, protocol, format); }catch(java.io.IOException ex) { ex.printStackTrace(); } - if ((sequences != null) && (sequences.length > 0)) + if ((al != null) && (al.getHeight() > 0)) { - currentAlignFrame = new AlignFrame(new Alignment(sequences), + currentAlignFrame = new AlignFrame(al, applet, file, embedded); diff --git a/src/jalview/gui/AlignFrame.java b/src/jalview/gui/AlignFrame.java index b466beb..48758cd 100755 --- a/src/jalview/gui/AlignFrame.java +++ b/src/jalview/gui/AlignFrame.java @@ -1283,7 +1283,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener } else { - sequences = new FormatAdapter().readFile(str, "Paste", format); + sequences = new FormatAdapter().readFile(str, "Paste", format).getSequencesArray(); } AlignmentI alignment = null; diff --git a/src/jalview/gui/CutAndPasteTransfer.java b/src/jalview/gui/CutAndPasteTransfer.java index 1cd1c6a..4773c26 100755 --- a/src/jalview/gui/CutAndPasteTransfer.java +++ b/src/jalview/gui/CutAndPasteTransfer.java @@ -170,12 +170,12 @@ public class CutAndPasteTransfer extends GCutAndPasteTransfer public void ok_actionPerformed(ActionEvent e) { String format = new IdentifyFile().Identify(getText(), "Paste"); - SequenceI[] sequences = null; + Alignment al = null; if (FormatAdapter.isValidFormat(format)) { try{ - sequences = new FormatAdapter().readFile(getText(), "Paste", format); + al = new FormatAdapter().readFile(getText(), "Paste", format); }catch(java.io.IOException ex) { JOptionPane.showInternalMessageDialog(Desktop.desktop, @@ -185,18 +185,18 @@ public class CutAndPasteTransfer extends GCutAndPasteTransfer } } - if (sequences != null) + if (al != null) { if(viewport!=null) { - for(int i=0; i 0) + if (al != null && al.getHeight() > 0) { if (alignFrame == null) { - AlignFrame af = new AlignFrame(new Alignment(sequences), + AlignFrame af = new AlignFrame(al, AlignFrame.DEFAULT_WIDTH, AlignFrame.DEFAULT_HEIGHT ); @@ -408,19 +408,19 @@ public class SequenceFetcher } else { - for (int i = 0; i < sequences.length; i++) + for (int i = 0; i < al.getHeight(); i++) { - alignFrame.viewport.alignment.addSequence(sequences[i]); + alignFrame.viewport.alignment.addSequence(al.getSequenceAt(i)); //////////////////////////// //Dataset needs extension; ///////////////////////////// - Sequence ds = new Sequence(sequences[i].getName(), + Sequence ds = new Sequence(al.getSequenceAt(i).getName(), AlignSeq.extractGaps("-. ", - sequences[i].getSequenceAsString()), - sequences[i].getStart(), - sequences[i].getEnd()); - sequences[i].setDatasetSequence(ds); + al.getSequenceAt(i).getSequenceAsString()), + al.getSequenceAt(i).getStart(), + al.getSequenceAt(i).getEnd()); + al.getSequenceAt(i).setDatasetSequence(ds); alignFrame.viewport.alignment.getDataset().addSequence(ds); } alignFrame.viewport.setEndSeq(alignFrame.viewport.alignment. @@ -436,12 +436,12 @@ public class SequenceFetcher { // Parse out the ids from the structured names boolean errors = false; - for (int i = 0; i < sequences.length; i++) + for (int i = 0; i < al.getHeight(); i++) { PDBEntry entry = new PDBEntry(); com.stevesoft.pat.Regex idbits = new com.stevesoft.pat.Regex( "PDB\\|([0-9A-z]{4})\\|(.)"); - if (idbits.search(sequences[i].getName())) + if (idbits.search(al.getSequenceAt(i).getName())) { String pdbid = idbits.substring(1); String pdbccode = idbits.substring(2); @@ -451,14 +451,14 @@ public class SequenceFetcher entry.setProperty(new Hashtable()); entry.getProperty().put("chains", pdbccode - + "=" + sequences[i].getStart() - + "-" + sequences[i].getEnd()); - sequences[i].getDatasetSequence().addPDBId(entry); + + "=" + al.getSequenceAt(i).getStart() + + "-" + al.getSequenceAt(i).getEnd()); + al.getSequenceAt(i).getDatasetSequence().addPDBId(entry); // We make a DBRefEtntry because we have obtained the PDB file from a verifiable source // JBPNote - PDB DBRefEntry should also carry the chain and mapping information DBRefEntry dbentry = new DBRefEntry(jalview.datamodel.DBRefSource.PDB,"0",pdbid); - sequences[i].getDatasetSequence().addDBRef(dbentry); + al.getSequenceAt(i).getDatasetSequence().addDBRef(dbentry); } else { @@ -466,7 +466,7 @@ public class SequenceFetcher // that the user should know about. jalview.bin.Cache.log.warn( "No PDBEntry constructed for sequence " + i + " : " + - sequences[i].getName()); + al.getSequenceAt(i).getName()); errors = true; } } @@ -482,7 +482,7 @@ public class SequenceFetcher + " from " + database.getSelectedItem()); } - return sequences; + return al; } diff --git a/src/jalview/io/AlignFile.java b/src/jalview/io/AlignFile.java index 85f23a4..a800f06 100755 --- a/src/jalview/io/AlignFile.java +++ b/src/jalview/io/AlignFile.java @@ -36,7 +36,7 @@ public abstract class AlignFile extends FileParse int noSeqs = 0; int maxLength = 0; Vector seqs; - Vector headers; + Vector annotations; long start; long end; boolean jvSuffix = true; @@ -86,13 +86,24 @@ public abstract class AlignFile extends FileParse return s; } + public void addAnnotations(Alignment al) + { + for(int i=0; iUNKNOWN\n" + inFile, "Paste"); - return afile.getSeqsAsArray(); + Alignment al = new Alignment(afile.getSeqsAsArray()); + afile.addAnnotations(al); + return al; + } catch(Exception ex) { diff --git a/src/jalview/io/FastaFile.java b/src/jalview/io/FastaFile.java index f257c6c..75915c1 100755 --- a/src/jalview/io/FastaFile.java +++ b/src/jalview/io/FastaFile.java @@ -22,6 +22,8 @@ import jalview.datamodel.*; import java.io.*; +import java.util.*; + /** * DOCUMENT ME! @@ -59,21 +61,45 @@ public class FastaFile extends AlignFile public void parse() throws IOException { StringBuffer sb = new StringBuffer(); - int count = 0; + boolean firstLine = true; String line; Sequence seq = null; + boolean annotation = false; + while ((line = nextLine()) != null) { line = line.trim(); if (line.length() > 0) { - if (line.charAt(0)=='>') + if (line.charAt(0)=='>') { - if (count != 0) + if (line.startsWith(">#_")) + { + if (annotation) { - if (!isValidProteinSequence(sb.toString().toCharArray())) + Annotation[] anots = new Annotation[sb.length()]; + for (int i = 0; i < sb.length(); i++) + { + anots[i] = new Annotation(sb.substring(i, i+1), + null, + ' ', 0); + } + AlignmentAnnotation aa = new AlignmentAnnotation( + seq.getName().substring(2), seq.getDescription(), + anots); + + annotations.add(aa); + } + annotation = true; + } + else + annotation = false; + + if (!firstLine) + { + if (!annotation && !isValidProteinSequence(sb.toString().toCharArray())) { throw new IOException(AppletFormatAdapter.INVALID_CHARACTERS +" : "+seq.getName() @@ -81,12 +107,14 @@ public class FastaFile extends AlignFile } seq.setSequence(sb.toString()); - seqs.addElement(seq); + + if (!annotation) + seqs.addElement(seq); } seq = parseId(line.substring(1)); + firstLine = false; - count++; sb = new StringBuffer(); } else @@ -96,8 +124,25 @@ public class FastaFile extends AlignFile } } - if (count > 0) + if (annotation) + { + Annotation[] anots = new Annotation[sb.length()]; + for (int i = 0; i < sb.length(); i++) + { + anots[i] = new Annotation(sb.substring(i, i + 1), + null, + ' ', 0); + } + AlignmentAnnotation aa = new AlignmentAnnotation( + seq.getName().substring(2), seq.getDescription(), + anots); + + annotations.add(aa); + } + + else if (!firstLine) { + if (!isValidProteinSequence(sb.toString().toCharArray())) { throw new IOException(AppletFormatAdapter.INVALID_CHARACTERS diff --git a/src/jalview/io/FileLoader.java b/src/jalview/io/FileLoader.java index c662ccf..34e5886 100755 --- a/src/jalview/io/FileLoader.java +++ b/src/jalview/io/FileLoader.java @@ -133,7 +133,7 @@ public class FileLoader implements Runnable if (Desktop.instance != null) Desktop.instance.startLoading(file); - SequenceI[] sequences = null; + Alignment al = null; if (format.equalsIgnoreCase("Jalview")) { @@ -147,7 +147,7 @@ public class FileLoader implements Runnable { try { - sequences = new FormatAdapter().readFile(file, protocol, format); + al = new FormatAdapter().readFile(file, protocol, format); } catch (java.io.IOException ex) { @@ -155,13 +155,13 @@ public class FileLoader implements Runnable } } - if ( (sequences != null) && (sequences.length > 0)) + if ( (al != null) && (al.getHeight() > 0)) { if (viewport != null) { - for (int i = 0; i < sequences.length; i++) + for (int i = 0; i < al.getHeight(); i++) { - viewport.getAlignment().addSequence(sequences[i]); + viewport.getAlignment().addSequence(al.getSequenceAt(i)); } viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences()); @@ -169,8 +169,6 @@ public class FileLoader implements Runnable } else { - Alignment al = new Alignment(sequences); - alignFrame = new AlignFrame(al, AlignFrame.DEFAULT_WIDTH, AlignFrame.DEFAULT_HEIGHT); diff --git a/src/jalview/io/FormatAdapter.java b/src/jalview/io/FormatAdapter.java index a23bbba..15d4dc3 100755 --- a/src/jalview/io/FormatAdapter.java +++ b/src/jalview/io/FormatAdapter.java @@ -38,10 +38,12 @@ public class FormatAdapter extends AppletFormatAdapter { SequenceI [] tmp = new SequenceI[seqs.length]; for(int i=0; i0) + if(al!=null && al.getHeight()>0) { str = jalview.analysis.AlignSeq.extractGaps( jalview.util.Comparison.GapChars, - sequences[0].getSequenceAsString()); + al.getSequenceAt(0).getSequenceAsString()); textfield.setText(str); } diff --git a/src/jalview/ws/JPredThread.java b/src/jalview/ws/JPredThread.java index 0e4e396..0c9b8d3 100644 --- a/src/jalview/ws/JPredThread.java +++ b/src/jalview/ws/JPredThread.java @@ -93,8 +93,8 @@ implements WSClientI al = new Alignment(sqs); alcsel=(ColumnSelection) alandcolsel[1]; } else { - al = new Alignment(new FormatAdapter().readFile(result.getAligfile(), - "Paste", format)); + al = new FormatAdapter().readFile(result.getAligfile(), + "Paste", format); sqs = new SequenceI[al.getHeight()]; for (int i = 0, j = al.getHeight(); i < j; i++) -- 1.7.10.2