package edu.berkeley.cs.nlp.ocular.model.emission;
import edu.berkeley.cs.nlp.ocular.image.ImageUtils.PixelType;
import edu.berkeley.cs.nlp.ocular.model.CharacterTemplate;
import edu.berkeley.cs.nlp.ocular.model.transition.SparseTransitionModel.TransitionState;
/**
* @author Taylor Berg-Kirkpatrick (tberg@eecs.berkeley.edu)
*/
public interface EmissionModel {
public abstract int numChars();
public abstract int numSequences();
public abstract int sequenceLength(int d);
public abstract int[] allowedWidths(TransitionState ts);
public abstract int[] allowedWidths(int c);
public abstract float logProb(int d, int t, TransitionState ts, int w);
public abstract float logProb(int d, int t, int c, int w);
public abstract int getExposure(int d, int t, TransitionState ts, int w);
public abstract int getOffset(int d, int t, TransitionState ts, int w);
public abstract int getPadWidth(int d, int t, TransitionState ts, int w);
public abstract float padWidthLogProb(int pw);
public abstract void rebuildCache();
public abstract void incrementCount(int d, TransitionState ts, int startCol, int endCol, float count);
public abstract void incrementCounts(int d, TransitionState[] transitionStates, int[] widths);
public static interface EmissionModelFactory {
public EmissionModel make(CharacterTemplate[] templates, PixelType[][][] observations);
}
}