001 package calhoun.analysis.crf.solver;
002
003 import java.util.Arrays;
004
005 /**
006 * This object holds information about previous positions during the computation of betas and expectations. This
007 * allows us to quickly access data about previous positions. These objects are kept in a recycling buffer that
008 * keeps one buffer for each possible lookback.
009 * <p>
010 * One tricky aspect of this is that the details change slightly between the forward and backwards pass. On the forward
011 * pass, the lookback contains the information in the normal way. In the backwards pass, stable states and transitions are
012 * shifted back one base compared to the betas.
013 */
014 public final class LookbackBuffer {
015 public int pos;
016
017 /// In the beta pass, the mi matrix for transitioning from pos+l to pos
018 public double[] mi;
019
020 /// For each transition to a semi-markov state, stores the probability of all segments including that transition.
021 public double[] transitionProb;
022
023 /// The weighted sum of feature values for staying in this position from the end of the sequence to this position
024 public double[] stableState;
025
026 /// Beta values at this position
027 public double[] beta;
028
029 /// Norm of beta values
030 public int betaNorm;
031
032 public LookbackBuffer(int states, int transitions) {
033 mi = new double[states+transitions];
034 transitionProb = new double[transitions];
035 stableState = new double[states];
036 beta = new double[states];
037 }
038
039 /** mi and stableStates are cleared as new values are entered. This fixes the others */
040 public void clear()
041 {
042 pos = -1;
043 Arrays.fill(beta, 0.0);
044 betaNorm = Integer.MIN_VALUE;
045 Arrays.fill(transitionProb, 0.0);
046 }
047 }