/* MP5BookWriter.java created 2008-02-24
*
*/
package org.signalml.domain.book;
import java.io.DataOutputStream;
import java.io.File;
import java.io.IOException;
import org.apache.log4j.Logger;
import pl.edu.fuw.MP.Core.AtomV5;
import pl.edu.fuw.MP.Core.BookLibraryV5Writer;
import pl.edu.fuw.MP.Core.SegmentHeaderV5;
/** MP5BookWriter
*
*
* @author Michal Dobaczewski © 2007-2008 CC Otwarte Systemy Komputerowe Sp. z o.o.
* based on code by Dobieslaw Ircha
*/
public class MPv5BookWriter implements IncrementalBookWriter {
private DataOutputStream out=null;
// FIXME seems like a book written with this writer has segment index starting from 0, not 1
// resulting in inability to read a written book
protected static final Logger logger = Logger.getLogger(MPv5BookWriter.class);
private BookLibraryV5Writer bookWriter = null;
private int segmentCount = 0;
public MPv5BookWriter(StandardBook book, File file) throws IOException {
bookWriter = new BookLibraryV5Writer();
bookWriter.setBookComment(book.getBookComment());
bookWriter.setCalibration(book.getCalibration());
bookWriter.setDate(book.getDate());
bookWriter.setDictionarySize(book.getDictionarySize());
bookWriter.setDictionaryType(book.getDictionaryType());
bookWriter.setEnergyPercent(book.getEnergyPercent());
bookWriter.setMaxIterationCount(book.getMaxIterationCount());
bookWriter.setSamplingFrequency(book.getSamplingFrequency());
bookWriter.setTextInfo(book.getTextInfo());
bookWriter.setWebSiteInfo(book.getWebSiteInfo());
bookWriter.Open(file.getAbsolutePath());
}
@Override
public void close() throws IOException {
if (bookWriter != null) {
bookWriter.close();
bookWriter = null;
}
}
@Override
public void writeSegment(StandardBookSegment[] segments) throws IOException {
StandardBookSegmentWriter segmentWriter = new StandardBookSegmentWriterImpl(bookWriter);
int atomCount;
StandardBookAtomWriter atomWriter;
StandardBookAtom atom;
for (int i=0; i<segments.length; i++) {
segmentWriter.setChannelNumber(i+1);
segmentWriter.setSegmentNumber(segmentCount+1);
if (segments[i].hasSignal()) {
segmentWriter.setSignalSamples(segments[i].getSignalSamples());
} else {
segmentWriter.setSignalSamples(null);
}
// FIXME those below missing in writer, loss of important information (oka: not true after Dobi)
segments[i].getDecompositionEnergy();
segments[i].getSignalEnergy();
segments[i].getSegmentTime();
segments[i].getSegmentLength();
atomCount = segments[i].getAtomCount();
for (int k=1 ; k<atomCount ; k++) {
atomWriter = new StandardBookAtomWriterImpl();
atom = segments[i].getAtomAt(k);
// FIXME no iteration in writer
atomWriter.setType(atom.getType());
atomWriter.setModulus(atom.getModulus());
atomWriter.setAmplitude(atom.getAmplitude());
atomWriter.setPosition(atom.getPosition());
atomWriter.setScale(atom.getScale());
atomWriter.setFrequency(atom.getFrequency());
atomWriter.setPhase(atom.getPhase());
segmentWriter.addAtom(atomWriter);
}
}
bookWriter.writeSegment(segmentWriter);
}
@Override
public void writeSegment(StandardBookSegmentWriter segment) throws IOException {
if (segment != null) {
((SegmentHeaderV5) segment).Write(out);
out.flush();
}
}
}