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
025import org.biojava.bio.symbol.IllegalSymbolException;
026
027/**
028 * An object that can be used to train the transitions within a MarkovModel.
029 *
030 * @author Matthew Pocock
031 */
032public interface TransitionTrainer {
033  /**
034   * Add 'count' to the transition from->to.
035   * <p>
036   * This method may be called multiple times with the same from,to pair in
037   * which case, the times should be summed.
038   *
039   * @param from  the source state
040   * @param to  the destination state
041   * @param count   the number of counts to add
042   */
043  void addCount(State from, State to, double count)
044  throws IllegalSymbolException, IllegalTransitionException;
045  
046  /**
047   * Trains the transition, given an expected probability, and a weight for
048   * that probability.
049   * <p>
050   * This is equivalent to adding a count of nullModel * weight to each
051   * transition and then training with a weight of 0.
052   *
053   * @param nullModel the nullModel to use
054   * @param weight  how many lots of the null model to add
055   */
056  void train(double nullModel, double weight) throws IllegalSymbolException;
057  
058  /**
059   * Clears all of the counts to zero.
060   */
061  void clearCounts();
062}