X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fdatamodel%2FHMMNode.java;h=b646eeea8af08ee5bc657f6d0cb215aeef85d54f;hb=ef2b8e4a4d6db3bb95506b523c27dfd3231b12f3;hp=04e335fc3ac5833c9bda8506e630412ae6462b65;hpb=b48749857263e9c85c93fce54f764453fbce9696;p=jalview.git diff --git a/src/jalview/datamodel/HMMNode.java b/src/jalview/datamodel/HMMNode.java index 04e335f..b646eee 100644 --- a/src/jalview/datamodel/HMMNode.java +++ b/src/jalview/datamodel/HMMNode.java @@ -1,8 +1,5 @@ package jalview.datamodel; -import java.util.ArrayList; -import java.util.List; - /** * stores data for each node in the hmm model * @author TZVanaalten @@ -11,74 +8,84 @@ import java.util.List; public class HMMNode { //contains the match emissions for each symbol - List matchEmissions = new ArrayList<>(); + double[] matchEmissions; + //contains the insert emissions for each symbol - List insertEmissions = new ArrayList<>(); - //contains the state transitions for each possible transition. These are bm, bi, bd, im, ii, dm and dd in order (0th position in - // the array indicates the probability of a bm transition) - List stateTransitions = new ArrayList<>(); + double[] insertEmissions; + + // contains the state transitions for each possible transition. These are mm, + // mi, md, im, ii, dm and dd in order + double[] stateTransitions; //annotations - Integer alignmentColumn = null; + int residueNumber; char consensusResidue; char referenceAnnotation; char maskValue; char consensusStructure; + /** + * Constructor + */ public HMMNode() { } - public HMMNode(HMMNode node) + public double[] getMatchEmissions() { - matchEmissions = new ArrayList<>(node.getMatchEmissions()); - insertEmissions = new ArrayList<>(node.getInsertEmissions()); - stateTransitions = new ArrayList<>(node.getStateTransitions()); - alignmentColumn = new Integer(node.getAlignmentColumn()); - consensusResidue = node.getConsensusResidue(); - referenceAnnotation = node.getReferenceAnnotation(); - maskValue = node.getMaskValue(); - consensusStructure = node.getConsensusStructure(); + return matchEmissions; } - public List getMatchEmissions() + double getMatchEmission(int symbolIndex) { - return matchEmissions; + return matchEmissions[symbolIndex]; } - public void setMatchEmissions(List matchEmissionsL) + public void setMatchEmissions(double[] matches) { - this.matchEmissions = matchEmissionsL; + this.matchEmissions = matches; } - public List getInsertEmissions() + + public double[] getInsertEmissions() { return insertEmissions; } - public void setInsertEmissions(List insertEmissionsL) + double getInsertEmission(int symbolIndex) + { + return insertEmissions[symbolIndex]; + } + + public void setInsertEmissions(double[] insertEmissionsL) { this.insertEmissions = insertEmissionsL; } - public List getStateTransitions() + public double[] getStateTransitions() { return stateTransitions; } - public void setStateTransitions(List stateTransitionsM) + double getStateTransition(int transition) + { + return stateTransitions[transition]; + } + + public void setStateTransitions(double[] stateTransitionsM) { this.stateTransitions = stateTransitionsM; } - public Integer getAlignmentColumn() + int getResidueNumber() { - return alignmentColumn; + return residueNumber; } - public void setAlignmentColumn(int alignmentColumn) + public void setResidueNumber(int resNo) { - this.alignmentColumn = alignmentColumn; + this.residueNumber = resNo; } - public char getConsensusResidue() + + char getConsensusResidue() { return consensusResidue; } @@ -86,7 +93,8 @@ public class HMMNode { this.consensusResidue = consensusResidue; } - public char getReferenceAnnotation() + + char getReferenceAnnotation() { return referenceAnnotation; } @@ -94,7 +102,8 @@ public class HMMNode { this.referenceAnnotation = referenceAnnotation; } - public char getMaskValue() + + char getMaskValue() { return maskValue; } @@ -102,7 +111,8 @@ public class HMMNode { this.maskValue = maskValue; } - public char getConsensusStructure() + + char getConsensusStructure() { return consensusStructure; } @@ -110,6 +120,29 @@ public class HMMNode { this.consensusStructure = consensusStructure; } + + /** + * Answers the symbol index of the symbol with the highest match emission + * probability (first symbol in case of a tie). Note this object stores + * probabilities, not the negative logarithms as in the HMM file. + * + * @return + */ + int getMaxMatchEmissionIndex() + { + int maxIndex = 0; + double max = 0D; + + for (int i = 0; i < matchEmissions.length; i++) + { + if (matchEmissions[i] > max) + { + max = matchEmissions[i]; + maxIndex = i; + } + } + return maxIndex; + } }