001/*
002 *                    BioJava development code
003 *
004 * This code may be freely distributed and modified under the
005 * terms of the GNU Lesser General Public Licence.  This should
006 * be distributed with the code.  If you do not have a copy,
007 * see:
008 *
009 *      http://www.gnu.org/copyleft/lesser.html
010 *
011 * Copyright for this code is held jointly by the individual
012 * authors.  These should be listed in @author doc comments.
013 *
014 * For more information on the BioJava project and its aims,
015 * or to join the biojava-l mailing list, visit the home page
016 * at:
017 *
018 *      http://www.biojava.org/
019 *
020 */
021
022
023package org.biojava.bio.dp;
024
025/**
026 * A backpointer.
027 * <p>
028 * This is used to facilitate traceback after the Viterbi computation.
029 *
030 * @author Matthew Pocock
031 */
032public class BackPointer {
033  /**
034   * The state with which this backpointer is associated.
035   */
036  public final State state;
037  /**
038   * The previous backpointer (towards origin of DP matrix) in traceback.
039   */
040  public final BackPointer back;
041  /**
042   * The score of this element of the DP matrix.
043   */
044  public final double score;
045    
046  public BackPointer(State state, BackPointer back, double score) {
047    this.state = state;
048    this.back = back;
049    this.score = score;
050    if(back == null) {
051      throw new NullPointerException(
052        "Can't construct backpointer for state " + state.getName() +
053        " with a null source"
054      );
055    }
056  }
057  
058  public BackPointer(State s) {
059    this.state = s;
060    this.back = this;
061    this.score = Double.NaN;
062  }
063}
064