From 8af5dc25549fb2ba801ae889d44744a46dacf04e Mon Sep 17 00:00:00 2001 From: Jim Procter Date: Thu, 14 Feb 2013 18:08:54 +0000 Subject: [PATCH] JAL-1140 reinstate the simpler version of parsing code from annotate3d update --- src/jalview/io/RnamlFile.java | 387 +++++++++++++++++++---------------------- 1 file changed, 177 insertions(+), 210 deletions(-) diff --git a/src/jalview/io/RnamlFile.java b/src/jalview/io/RnamlFile.java index 1d14dae..7b89909 100644 --- a/src/jalview/io/RnamlFile.java +++ b/src/jalview/io/RnamlFile.java @@ -22,11 +22,7 @@ import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; -import java.util.Vector; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import jalview.analysis.SecStrConsensus; import jalview.analysis.SecStrConsensus.SimpleBP; import jalview.datamodel.AlignmentAnnotation; import jalview.datamodel.Annotation; @@ -39,210 +35,181 @@ import fr.orsay.lri.varna.exceptions.ExceptionPermissionDenied; import fr.orsay.lri.varna.factories.RNAFactory; import fr.orsay.lri.varna.models.rna.RNA; -/** - * @author jimp - * - */ -public class RnamlFile extends AlignFile { - public int id; - public String namefile; - public String name; - protected ArrayList result; - - public RnamlFile() { - super(); - - } - - public RnamlFile(String inFile, String type) throws Exception { - super(inFile, type); - - } - - public RnamlFile(FileParse source) throws Exception { - super(source); - - } - - public BufferedReader CreateReader() throws FileNotFoundException { - FileReader fr = null; - fr = new FileReader(inFile); - - BufferedReader r = new BufferedReader(fr); - return r; - } - - /* (non-Javadoc) - * @see jalview.io.AlignFile#parse() - */ - public void parse() throws IOException - { - // rather than lose exception semantics whilst parsing RNAML with VARNA we - // wrap the routine and catch all exceptions before passing them up the - // chain as an IOException - try { - _parse(); - } catch (Exception x) - { - error=true; - errormessage="Problem parsing data as RNAML ("+x.getMessage()+")"; - throw new IOException("Couldn't parse the datasource as RNAML",x); - } - } - @SuppressWarnings("unchecked") - public void _parse() throws FileNotFoundException, - ExceptionPermissionDenied, ExceptionLoadingFailed, - ExceptionFileFormatOrSyntax { - - result = RNAFactory.loadSecStrRNAML(getReader()); - - ArrayList allarray = new ArrayList(); - ArrayList> BP = new ArrayList(); - ArrayList strucinarray = new ArrayList(); - SequenceI[] seqs = new SequenceI[result.size()]; - namefile = inFile.getName(); - - for (int i = 0; i < result.size(); i++) { - - RNA current = result.get(i); - String rna = current.getStructDBN(true); - String seq = current.getSeq(); - int begin = 1; - int end = 1000; - id = i; - System.out.println("id=" + i); - name = this.safeName(namefile, i); - seqs[i] = new Sequence(name, seq, begin, end); - - seqs[i].setEnd(seqs[i].findPosition(seqs[i].getLength())); - String[] annot = new String[rna.length()]; - Annotation[] ann = new Annotation[rna.length()]; - - for (int j = 0; j < rna.length(); j++) { - annot[j] = "" + rna.charAt(j); - - } - for (int k = 0; k < rna.length(); k++) { - ann[k] = new Annotation(annot[k], "", - jalview.schemes.ResidueProperties.getRNASecStrucState( - annot[k]).charAt(0), 0f); - } - - AlignmentAnnotation align = new AlignmentAnnotation("Sec. str.", - current.getID(), ann); - - seqs[i].addAlignmentAnnotation(align); - seqs[i].setRNA(result.get(i)); - - char[] struc = align.getRNAStruc().toCharArray(); - - allarray.add(strucinarray); - - this.annotations.addElement(align); - BP.add(align.bps); - - } - this.setSeqs(seqs); - int[] tab = SecStrConsensus.extractConsensus(BP); - - - } - - public void parse(BufferedReader r) throws ExceptionPermissionDenied, - ExceptionLoadingFailed, ExceptionFileFormatOrSyntax { - - result = RNAFactory.loadSecStrRNAML(r); - - ArrayList allarray = new ArrayList(); - ArrayList> BP = new ArrayList(); - ArrayList strucinarray = new ArrayList(); - SequenceI[] seqs = new SequenceI[result.size()]; - namefile = inFile.getName(); - - for (int i = 0; i < result.size(); i++) { - - RNA current = result.get(i); - String rna = current.getStructDBN(true); - - String seq = current.getSeq(); - int begin = 1; - int end = 1000; - id = i; - name = this.safeName(namefile, i); - seqs[i] = new Sequence(name, seq, begin, end); - - seqs[i].setEnd(seqs[i].findPosition(seqs[i].getLength())); - String[] annot = new String[rna.length()]; - Annotation[] ann = new Annotation[rna.length()]; - - for (int j = 0; j < rna.length(); j++) { - annot[j] = "" + rna.charAt(j); - - } - for (int k = 0; k < rna.length(); k++) { - ann[k] = new Annotation(annot[k], "", - jalview.schemes.ResidueProperties.getRNASecStrucState( - annot[k]).charAt(0), 0f); - } - - AlignmentAnnotation align = new AlignmentAnnotation("Sec. str.", - current.getID(), ann); - - seqs[i].addAlignmentAnnotation(align); - seqs[i].setRNA(result.get(i)); - - char[] struc = align.getRNAStruc().toCharArray(); - for (int y = 0; y < struc.length; y++) { - strucinarray.add(struc[y]); - // System.out.println("structy"+struc[y]); - } - // System.out.println("Sequence"+i+"\t : "+strucinarray.toString()); - allarray.add(strucinarray); - - this.annotations.addElement(align); - System.out.println(rna); - BP.add(align.bps); - System.out.println(align.bps.size()); - } - this.setSeqs(seqs); - int[] tab = SecStrConsensus.extractConsensus(BP); - - - } - - - - public static String print(SequenceI[] s) { - return "not yet implemented"; - } - - public String print() { - System.out.print("print :"); - return print(getSeqsAsArray()); - } - - public ArrayList getRNA() { - return result; - } - - public Vector getAnnot() { - return annotations; - } - - // public static void main(String[] args) { - // Pattern p= Pattern.compile("(.+)[.][^.]+"); - // Matcher m = p.matcher("toto.xml.zip"); - // System.out.println(m.matches()); - // System.out.println(m.group(1)); - // } - public String safeName(String namefile, int id) { - - Pattern p = Pattern.compile("(.*)[.][^.]+"); - Matcher m = p.matcher(namefile); - name = m.group(1) + "_" + id; - - return name; - - } - +public class RnamlFile extends AlignFile +{ + public String id; + + protected ArrayList result; + + public RnamlFile() + { + super(); + + } + + public RnamlFile(String inFile, String type) throws IOException + { + super(inFile, type); + + } + + public RnamlFile(FileParse source) throws IOException + { + super(source); + + } + + public BufferedReader CreateReader() throws FileNotFoundException + { + FileReader fr = null; + fr = new FileReader(inFile); + + BufferedReader r = new BufferedReader(fr); + return r; + } + + /* + * (non-Javadoc) + * + * @see jalview.io.AlignFile#parse() + */ + public void parse() throws IOException + { + if (System.getProperty("java.version").indexOf("1.6") > -1 + || System.getProperty("java.version").indexOf("1.5") > -1) + { + // patch for 'This parser does not support specification "null" version + // "null"' error + // this hack ensures we get a properly updated SAXParserFactory on older + // JVMs + // thanks to Stefan Birkner over at https://coderwall.com/p/kqsrrw + System.setProperty("javax.xml.parsers.SAXParserFactory", + "com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl"); + } + // rather than lose exception semantics whilst parsing RNAML with VARNA we + // wrap the routine and catch all exceptions before passing them up the + // chain as an IOException + try + { + _parse(); + } catch (ExceptionPermissionDenied pdx) + { + errormessage = "Couldn't access datasource (" + pdx.getMessage() + + ")"; + throw new IOException(pdx); + } catch (ExceptionLoadingFailed lf) + { + errormessage = "Couldn't process data as RNAML file (" + + lf.getMessage() + ")"; + throw new IOException(lf); + } catch (ExceptionFileFormatOrSyntax iff) + { + errormessage = "Invalid RNAML file (" + iff.getMessage() + ")"; + throw new IOException(iff); + } catch (Exception x) + { + error = true; + errormessage = "Problem parsing data as RNAML (" + x.getMessage() + + ")"; + throw new IOException("Couldn't parse the datasource as RNAML", x); + } + } + + @SuppressWarnings("unchecked") + public void _parse() throws FileNotFoundException, + ExceptionPermissionDenied, ExceptionLoadingFailed, + ExceptionFileFormatOrSyntax + { + + result = RNAFactory.loadSecStrRNAML(getReader()); + + ArrayList allarray = new ArrayList(); + ArrayList> BP = new ArrayList(); + ArrayList strucinarray = new ArrayList(); + SequenceI[] seqs = new SequenceI[result.size()]; + + for (int i = 0; i < result.size(); i++) + { + + RNA current = result.get(i); + String rna = current.getStructDBN(true); + String seq = current.getSeq(); + int begin = 1; + int end = seq.length(); + + id = current.getName(); + seqs[i] = new Sequence(id, seq, begin, end); + + seqs[i].setEnd(seqs[i].findPosition(seqs[i].getLength())); + String[] annot = new String[rna.length()]; + Annotation[] ann = new Annotation[rna.length()]; + + for (int j = 0; j < rna.length(); j++) + { + annot[j] = "" + rna.charAt(j); + + } + for (int k = 0; k < rna.length(); k++) + { + ann[k] = new Annotation(annot[k], "", + jalview.schemes.ResidueProperties.getRNASecStrucState( + annot[k]).charAt(0), 0f); + } + + AlignmentAnnotation align = new AlignmentAnnotation("Sec. str.", + current.getID(), ann); + + seqs[i].addAlignmentAnnotation(align); + seqs[i].setRNA(result.get(i)); + + allarray.add(strucinarray); + + annotations.addElement(align); + BP.add(align.bps); + + } + + setSeqs(seqs); + } + + public static String print(SequenceI[] s) + { + return "not yet implemented"; + } + + public String print() + { + System.out.print("print :"); + return print(getSeqsAsArray()); + } + + public ArrayList getRNA() + { + return result; + } + + // public static void main(String[] args) { + // Pattern p= Pattern.compile("(.+)[.][^.]+"); + // Matcher m = p.matcher("toto.xml.zip"); + // System.out.println(m.matches()); + // System.out.println(m.group(1)); + // } + /** + * make a friendly ID string. + * + * @param dataName + * @return truncated dataName to after last '/' + */ + private String safeName(String dataName) + { + int b = 0; + while ((b = dataName.indexOf("/")) > -1 && b < dataName.length()) + { + dataName = dataName.substring(b + 1).trim(); + + } + int e = (dataName.length() - dataName.indexOf(".")) + 1; + dataName = dataName.substring(1, e).trim(); + return dataName; + } } -- 1.7.10.2