package com.asl.traceview.data.debug;
import java.awt.Color;
import java.util.ArrayList;
import java.util.List;
import javax.swing.BoxLayout;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JPanel;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import com.isti.traceview.common.TimeInterval;
import com.isti.traceview.common.TraceViewChartPanel;
import com.isti.traceview.data.Segment;
/**
* This class is used for debugging purposes. It provides a variety of ways to quickly plot data
* @author nfalco
*
*/
public class DebugPlotData extends JDialog {
private static final long serialVersionUID = 1L;
private List<Segment> data = new ArrayList<Segment>();
private TimeInterval timeInterval;
private XYPlot plot = null;
private TraceViewChartPanel chartPanel = null;
public DebugPlotData(List<Segment> data, TimeInterval ti) {
this.timeInterval = ti;
this.data = data;
JPanel plot = createChartPanel(createDataSet(data));
setContentPane(plot);
JFrame frame = new JFrame("Debug Plot");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(plot);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
private JPanel createChartPanel(XYDataset dataset) {
JPanel ret = new JPanel();
BoxLayout retLayout = new BoxLayout(ret, javax.swing.BoxLayout.Y_AXIS);
ret.setLayout(retLayout);
JFreeChart chart = ChartFactory.createXYLineChart(null, // title
"Period, s", // x-axis label
"Amplitude", // y-axis label
dataset, // data
PlotOrientation.VERTICAL, // orientation
true, // create legend?
true, // generate tooltips?
false // generate URLs?
);
chart.setBackgroundPaint(Color.white);
TextTitle title = new TextTitle("Start time: "
+ TimeInterval.formatDate(timeInterval.getStartTime(), TimeInterval.DateFormatType.DATE_FORMAT_NORMAL)
+ ", Duration: " + timeInterval.convert(), ret.getFont());
chart.setTitle(title);
plot = chart.getXYPlot();
NumberAxis domainAxis = new NumberAxis("Time");
plot.setDomainAxis(domainAxis);
NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
rangeAxis.setAutoRange(true);
rangeAxis.setAutoRangeIncludesZero(false);
plot.setBackgroundPaint(Color.lightGray);
plot.setDomainGridlinePaint(Color.white);
plot.setRangeGridlinePaint(Color.white);
plot.setDomainCrosshairVisible(true);
plot.setRangeCrosshairVisible(true);
chartPanel = new TraceViewChartPanel(chart, true);
ret.add(chartPanel);
return ret;
}
private double[] getAmpArray() {
//calculate the total number of points for all segments
int totalNumPoints = 0;
for(Segment segment : data) {
totalNumPoints += segment.getData(timeInterval).data.length;
}
//fill an array with all points
double[] out = new double[totalNumPoints];
for(Segment segment : data) {
int[] segData = segment.getData(timeInterval).data;
for(int i = 0; i < segData.length; i++) {
out[i] = segData[i];
}
}
return out;
}
private XYDataset createDataSet(List<Segment> ds) {
XYSeriesCollection ret = new XYSeriesCollection();
XYSeries series = new XYSeries("Debug");
double[] out = getAmpArray();
for (int i = 0; i < out.length; i++) {
double x = i;
double y = out[i];
series.add(x, y);
}
ret.addSeries(series);
return ret;
}
}