Package be.ac.ulg.montefiore.run.jahmm.io

Source Code of be.ac.ulg.montefiore.run.jahmm.io.OpdfIntegerReader

/*
* Copyright (c) 2004-2009, Jean-Marc François. All Rights Reserved.
* Licensed under the New BSD license.  See the LICENSE file.
*/

package be.ac.ulg.montefiore.run.jahmm.io;

import java.io.IOException;
import java.io.StreamTokenizer;

import be.ac.ulg.montefiore.run.jahmm.OpdfInteger;

/**
* This class implements a {@link OpdfInteger} reader. The syntax of the
* distribution description is the following.
* <p>
* The description always begins with the keyword <tt>IntegerOPDF</tt>. The
* next (resp. last) symbol is an opening (resp. closing) bracket. Between the
* backets is a list of numbers separated by a space. The <tt>i</tt>-th
* number is the probability of <tt>i-1</tt>.
* <p>
* For example, reading <tt>IntegerOPDF [ .2 .3 .5 ]</tt> returns a
* distribution equivalent to
* <code>new OpdfInteger(new double[] { .2 .3 .5 })</code>.
*/
public class OpdfIntegerReader
extends OpdfReader<OpdfInteger>
{
  private final int nbEntries; // < 0 if number of entries is not checked.

 
  String keyword()
  {
    return "IntegerOPDF";
  }

 
  /**
   * Implements a reader of distributions over integer observations.
   */
  public OpdfIntegerReader()
  {
    nbEntries = -1;
  }
 

  /**
   * Implements a reader of distributions over integer observations. The
   * number of probabilities given is checked.
   *
   * @param nbEntries
   *            The number of entries that should be found (<i>i.e.</i> a
   *            {@link FileFormatException} is triggered if the read
   *            <code>opdf</code> is not such as
   *            <code>opdf.nbEntries() == nbEntries</code> ).
   */
  public OpdfIntegerReader(int nbEntries)
  {
    if (nbEntries <= 0)
      throw new IllegalArgumentException("Argument must be strictly "
          + "positive");

    this.nbEntries = nbEntries;
  }

 
  public OpdfInteger read(StreamTokenizer st)
  throws IOException,  FileFormatException
  {
    HmmReader.readWords(st, keyword());
   
    double[] probabilities = OpdfReader.read(st, -1);
 
    if (nbEntries > 0 && probabilities.length != nbEntries)
      throw new FileFormatException(st.lineno(),
          "Invalid distribution (should " + "operate over 0..."
              + (nbEntries - 1) + ")");
   
    return new OpdfInteger(probabilities);
  }
}
TOP

Related Classes of be.ac.ulg.montefiore.run.jahmm.io.OpdfIntegerReader

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.