X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fanalysis%2FRna.java;h=4c05ece72126c1acfcc91b6ca477858d16a77e1e;hb=7ab5d6b0ba5fec1ea4a4239e79c476d841622485;hp=da1cd11a1c5c1fe90ffe377121af6074e1837783;hpb=1889827c44c51f6353fe8619e5d44b421158af23;p=jalview.git diff --git a/src/jalview/analysis/Rna.java b/src/jalview/analysis/Rna.java index da1cd11..4c05ece 100644 --- a/src/jalview/analysis/Rna.java +++ b/src/jalview/analysis/Rna.java @@ -26,7 +26,6 @@ package jalview.analysis; - import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; @@ -34,52 +33,66 @@ 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( + "Querying matching opening parenthesis for non-closing parenthesis character " + + closingParenthesis, -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 +105,96 @@ 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( + "Mismatched (unseen) closing character " + base, 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("Mismatched closing character " + + base, 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("Mismatched opening character " + + opening + " at " + stack.pop(), 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 +278,3 @@ public class Rna } } } -