package dr.app.tracer.traces;
import dr.app.gui.chart.JChartPanel;
import dr.app.gui.chart.LinearAxis;
import dr.inference.trace.TraceDistribution;
import dr.inference.trace.TraceList;
import javax.swing.*;
import java.awt.*;
import jam.framework.Exportable;
/**
* A panel that displays frequency distributions of traces
*
* @author Andrew Rambaut
* @author Alexei Drummond
* @version $Id: IntervalsPanel.java,v 1.1.1.2 2006/04/25 23:00:09 rambaut Exp $
*/
public class IntervalsPanel extends JPanel implements Exportable {
private JIntervalsChart intervalsChart = new JIntervalsChart(new LinearAxis());
private JChartPanel chartPanel = new JChartPanel(intervalsChart, null, "", "");
/**
* Creates new IntervalsPanel
*/
public IntervalsPanel() {
setOpaque(false);
setMinimumSize(new Dimension(300, 150));
setLayout(new BorderLayout());
add(chartPanel, BorderLayout.CENTER);
}
public void setTraces(TraceList[] traceLists, java.util.List<String> traceNames) {
intervalsChart.removeAllIntervals();
if (traceLists == null || traceNames == null) {
chartPanel.setXAxisTitle("");
chartPanel.setYAxisTitle("");
return;
}
for (TraceList traceList : traceLists) {
for (String traceName : traceNames) {
int index = traceList.getTraceIndex(traceName);
TraceDistribution td = traceList.getDistributionStatistics(index);
if (td != null) {
String name = "";
if (traceLists.length > 1) {
name = traceList.getName();
if (traceNames.size() > 1) {
name += ": ";
}
}
name += traceName;
intervalsChart.addIntervals(name, td.getMean(), td.getUpperHPD(), td.getLowerHPD(), false);
}
}
}
chartPanel.setXAxisTitle("");
if (traceLists.length == 1) {
chartPanel.setYAxisTitle(traceLists[0].getName());
} else if (traceNames.size() == 1) {
chartPanel.setYAxisTitle(traceNames.get(0));
} else {
chartPanel.setYAxisTitle("Multiple Traces");
}
add(chartPanel, BorderLayout.CENTER);
validate();
repaint();
}
public JComponent getExportableComponent() {
return chartPanel;
}
}