package be.ac.ulg.montefiore.run.jahmm.io;
import java.io.IOException;
import java.io.StreamTokenizer;
import be.ac.ulg.montefiore.run.jahmm.io.FileFormatException;
import be.ac.ulg.montefiore.run.jahmm.io.HmmReader;
/**
* Need to put this in one of JAHMM's packages due to package protected methods that need to be used.
*
* Ref: http://www.google.com/codesearch/p?hl=en#EPpzOEW5jow/trunk/src/main/java/be/ac/ulg/montefiore/run/jahmm/io/OpdfIntegerReader.java&q=OpdfIntegerReader%20package:http://jahmm\.googlecode\.com&sa=N&cd=1&ct=rc
* Code for OpdfIntegerReader.java
*
* @author Brian Y. Lim
*
*/
public class OpdfVectorReader extends OpdfReader<OpdfVector> {
private final int nbEntries; // < 0 if number of entries is not checked.
public OpdfVectorReader() {
nbEntries = -1;
}
public OpdfVectorReader(int nbEntries) {
if (nbEntries <= 0)
throw new IllegalArgumentException("Argument must be strictly "
+ "positive");
this.nbEntries = nbEntries;
}
@Override
String keyword() {
return "VectorOPDF";
}
@Override
public OpdfVector 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 OpdfVector(probabilities);
}
}