package org.signalml.plugin.bookreporter.chart.preset; import java.util.Collection; import org.jfree.chart.axis.NumberAxis; import org.jfree.chart.plot.XYPlot; import org.jfree.chart.renderer.xy.XYBarRenderer; import org.jfree.data.xy.XYIntervalSeries; import org.jfree.data.xy.XYIntervalSeriesCollection; import org.signalml.plugin.bookreporter.chart.BookReporterChartData; import org.signalml.plugin.bookreporter.data.book.BookReporterAtom; import org.signalml.plugin.export.signal.TagStyle; /** * @author piotr@develancer.pl */ public class BookReporterChartPresetCount extends BookReporterChartPresetPerInterval { @Override public String getCaption() { return "<html>count of<br>" + getWavesName() + "<br>per " + getTimeInterval() + " s</html>"; } @Override public BookReporterChartData createEmptyData(final double signalLength, TagStyle tagStyle) { return new BookReporterChartData(getThreshold(), tagStyle) { private final int timeInterval = getTimeInterval(); private final int[] counts = new int[ (int) Math.ceil(signalLength/timeInterval) ]; @Override protected void include(Collection<BookReporterAtom> filteredAtoms) { for (BookReporterAtom atom : filteredAtoms) { int interval_index = (int) Math.floor(atom.position / this.timeInterval); if (interval_index>=0 && interval_index<this.counts.length) { this.counts[interval_index]++; } } } @Override public XYPlot getPlot() { XYIntervalSeries data = new XYIntervalSeries("count per "+getTimeInterval()+" s"); for (int i=0; i<this.counts.length; i++) { double secondsLeft = i * timeInterval; double secondsCenter = (i+0.5) * timeInterval; double secondsRight = (i+1) * timeInterval; data.add(secondsCenter/3600.0, secondsLeft/3600.0, secondsRight/3600.0, counts[i], counts[i], counts[i]); } NumberAxis yAxis = new NumberAxis(getWavesName()); XYIntervalSeriesCollection collection = new XYIntervalSeriesCollection(); collection.addSeries(data); return new XYPlot( collection, new NumberAxis(), yAxis, new XYBarRenderer() ); } }; } }