X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fanalysis%2FRna.java;h=05573d7dabade0290c69dff49c241750e42bedf8;hb=ab43013b7e357b84b4abade0dba949668dfb2a0e;hp=da1cd11a1c5c1fe90ffe377121af6074e1837783;hpb=47168f025aefdaa044802bd5f8f510ffe43a4808;p=jalview.git diff --git a/src/jalview/analysis/Rna.java b/src/jalview/analysis/Rna.java index da1cd11..05573d7 100644 --- a/src/jalview/analysis/Rna.java +++ b/src/jalview/analysis/Rna.java @@ -1,5 +1,5 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2) + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2b1) * Copyright (C) 2014 The Jalview Authors * * This file is part of Jalview. @@ -26,6 +26,9 @@ package jalview.analysis; +import jalview.analysis.SecStrConsensus.SimpleBP; +import jalview.datamodel.SequenceFeature; +import jalview.util.MessageManager; import java.util.ArrayList; import java.util.Arrays; @@ -34,52 +37,61 @@ import java.util.Hashtable; import java.util.Stack; import java.util.Vector; - -import jalview.analysis.SecStrConsensus.SimpleBP; -import jalview.datamodel.SequenceFeature; - public class Rna { - - static Hashtable pairHash = new Hashtable(); - - private static final Character[] openingPars = {'(','[','{','<','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'}; - private static final Character[] closingPars = {')',']','}','>','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'}; - - private static HashSet openingParsSet = new HashSet(Arrays.asList(openingPars)); - private static HashSet closingParsSet = new HashSet(Arrays.asList(closingPars)); - private static Hashtable closingToOpening = new Hashtable() + + static Hashtable pairHash = new Hashtable(); + + private static final Character[] openingPars = + { '(', '[', '{', '<', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', + 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', + 'Y', 'Z' }; + + private static final Character[] closingPars = + { ')', ']', '}', '>', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', + 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', + 'y', 'z' }; + + private static HashSet openingParsSet = new HashSet( + Arrays.asList(openingPars)); + + private static HashSet closingParsSet = new HashSet( + Arrays.asList(closingPars)); + + private static Hashtable closingToOpening = new Hashtable() // Initializing final data structure { - private static final long serialVersionUID = 1L; - { - for(int i=0;i"+openingPars[i]); - put(closingPars[i],openingPars[i]); - } - }}; - + private static final long serialVersionUID = 1L; + { + for (int i = 0; i < openingPars.length; i++) + { + // System.out.println(closingPars[i] + "->" + openingPars[i]); + put(closingPars[i], openingPars[i]); + } + } + }; + private static boolean isOpeningParenthesis(char c) { - return openingParsSet.contains(c); + return openingParsSet.contains(c); } - + private static boolean isClosingParenthesis(char c) { - return closingParsSet.contains(c); + return closingParsSet.contains(c); } - private static char matchingOpeningParenthesis(char closingParenthesis) throws WUSSParseException + private static char matchingOpeningParenthesis(char closingParenthesis) + throws WUSSParseException { - if (!isClosingParenthesis(closingParenthesis)) - { - throw new WUSSParseException("Querying matching opening parenthesis for non-closing parenthesis character "+closingParenthesis, -1); - } - - return closingToOpening.get(closingParenthesis); + if (!isClosingParenthesis(closingParenthesis)) + { + throw new WUSSParseException(MessageManager.formatMessage("exception.querying_matching_opening_parenthesis_for_non_closing_parenthesis", new String[]{new StringBuffer(closingParenthesis).toString()}), -1); + } + + return closingToOpening.get(closingParenthesis); } - + /** * Based off of RALEE code ralee-get-base-pairs. Keeps track of open bracket * positions in "stack" vector. When a close bracket is reached, pair this @@ -92,89 +104,92 @@ public class Rna * @return Array of SequenceFeature; type = RNA helix, begin is open base * pair, end is close base pair */ - public static Vector GetSimpleBPs(CharSequence line) throws WUSSParseException + public static Vector GetSimpleBPs(CharSequence line) + throws WUSSParseException { - System.out.println(line); - Hashtable> stacks = new Hashtable>(); + Hashtable> stacks = new Hashtable>(); Vector pairs = new Vector(); int i = 0; while (i < line.length()) { char base = line.charAt(i); - + if (isOpeningParenthesis(base)) { - if (!stacks.containsKey(base)){ - stacks.put(base, new Stack()); - } + if (!stacks.containsKey(base)) + { + stacks.put(base, new Stack()); + } stacks.get(base).push(i); - + } else if (isClosingParenthesis(base)) { - - char opening = matchingOpeningParenthesis(base); - - if (!stacks.containsKey(opening)){ - throw new WUSSParseException("Mismatched (unseen) closing character "+base, i); - } - - Stack stack = stacks.get(opening); + + char opening = matchingOpeningParenthesis(base); + + if (!stacks.containsKey(opening)) + { + throw new WUSSParseException(MessageManager.formatMessage("exception.mismatched_unseen_closing_char", new String[]{new StringBuffer(base).toString()}), i); + } + + Stack stack = stacks.get(opening); if (stack.isEmpty()) { // error whilst parsing i'th position. pass back - throw new WUSSParseException("Mismatched closing character "+base, i); + throw new WUSSParseException(MessageManager.formatMessage("exception.mismatched_closing_char", new String[]{new StringBuffer(base).toString()}), i); } int temp = stack.pop(); - - pairs.add(new SimpleBP(temp,i)); + + pairs.add(new SimpleBP(temp, i)); } i++; } - for(char opening: stacks.keySet()) + for (char opening : stacks.keySet()) { - Stack stack = stacks.get(opening); - if (!stack.empty()) - { - throw new WUSSParseException("Mismatched opening character "+opening+" at "+stack.pop(), i); - } + Stack stack = stacks.get(opening); + if (!stack.empty()) + { + throw new WUSSParseException(MessageManager.formatMessage("exception.mismatched_opening_char", new String[]{new StringBuffer(opening).toString(),Integer.valueOf(stack.pop()).toString()}), i); + } } return pairs; } - - public static SequenceFeature[] GetBasePairs(CharSequence line) throws WUSSParseException + + public static SequenceFeature[] GetBasePairs(CharSequence line) + throws WUSSParseException { - Vector bps = GetSimpleBPs(line); - SequenceFeature[] outPairs = new SequenceFeature[bps.size()]; + Vector bps = GetSimpleBPs(line); + SequenceFeature[] outPairs = new SequenceFeature[bps.size()]; for (int p = 0; p < bps.size(); p++) { - SimpleBP bp = bps.elementAt(p); - outPairs[p] = new SequenceFeature("RNA helix", "", "", bp.getBP5(),bp.getBP3(), ""); + SimpleBP bp = bps.elementAt(p); + outPairs[p] = new SequenceFeature("RNA helix", "", "", bp.getBP5(), + bp.getBP3(), ""); } return outPairs; } - - - public static ArrayList GetModeleBP(CharSequence line) throws WUSSParseException + + public static ArrayList GetModeleBP(CharSequence line) + throws WUSSParseException { - Vector bps = GetSimpleBPs(line); - return new ArrayList(bps); + Vector bps = GetSimpleBPs(line); + return new ArrayList(bps); } - - + /** * Function to get the end position corresponding to a given start position - * @param indice - start position of a base pair + * + * @param indice + * - start position of a base pair * @return - end position of a base pair */ - /*makes no sense at the moment :( - public int findEnd(int indice){ - //TODO: Probably extend this to find the start to a given end? - //could be done by putting everything twice to the hash - ArrayList pair = new ArrayList(); - return pairHash.get(indice); - }*/ - + /* + * makes no sense at the moment :( public int findEnd(int indice){ //TODO: + * Probably extend this to find the start to a given end? //could be done by + * putting everything twice to the hash ArrayList pair = new + * ArrayList(); return pairHash.get(indice); } + */ /** * Figures out which helix each position belongs to and stores the helix @@ -258,4 +273,3 @@ public class Rna } } } -