package statalign.postprocess.gui; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.util.ArrayList; import javax.swing.JPanel; import statalign.postprocess.plugins.LogLikelihoodTrace; import statalign.postprocess.utils.LogLikelihoodTraceContainer; /** * This class implements the graphical interface for showing the log-likelihood * plot. * * @author miklos, novak * */ public class LogLikelihoodTraceGUI extends JPanel { private static final Font LLT_FONT = new Font("Dialog", Font.PLAIN, 10); private static final long serialVersionUID = 1L; // int cornerx, cornery; // private JPanel parent; private LogLikelihoodTrace owner; /** * Constructor to initialise the GUI for loglikelihood trace * * @param parent * The main panel * @param owner * The logLikelihoodTrace postprocess handler */ public LogLikelihoodTraceGUI(JPanel parent, LogLikelihoodTrace owner) { // super((int) (panel.getWidth() / 6.6), panel.getHeight() / 13); // this.parent = parent; this.owner = owner; // setFont(new Font("Monospaced", Font.PLAIN, 10)); // setEditable(false); } /** * It updates the graphics of the panel */ @Override public void paintComponent(Graphics gr) { super.paintComponent(gr); final int border = 10; gr.setColor(Color.white); gr.fillRect(0, 0, getWidth(), getHeight()); gr.setColor(Color.black); int maxWidth = getWidth()-50-border; int maxHeight = getHeight()-2*border; int minX = border; int minY = border; gr.drawLine(50+minX, minY, 50+minX, maxHeight); gr.drawLine(50+minX, minY, 40+minX, 10+minY); gr.drawLine(50+minX, minY, 60+minX, 10+minY); gr.drawLine(50+minX, maxHeight, maxWidth + 50, maxHeight); gr.drawLine(maxWidth + 50, maxHeight, maxWidth + 40, maxHeight - 10); gr.drawLine(maxWidth + 50, maxHeight, maxWidth + 40, maxHeight + 10); ArrayList<LogLikelihoodTraceContainer> list = owner.list; // finding the maximum and minimum double maxLik = -1000000000.0, minLik = 0.0; for (int i = 0; i < list.size(); i++) { double x = (list.get(i)).loglikelihood; if (x < minLik) { minLik = x; } if (x > maxLik) { maxLik = x; } } if (minLik > -0.1) { maxLik = 0.0; } gr.setFont(LLT_FONT); gr.drawString("" + ((int) maxLik), minX, 15+minY); gr.drawString("" + ((int) minLik), minX, maxHeight); // drawing the loglikelihood trace if (list.size() == 0) { return; } gr.setColor(new Color(221, 87, 20)); double actual; double next = (list.get(0)).loglikelihood; boolean burnin = true; for (int i = 0; i < list.size() - 1; i++) { actual = next; next = (list.get(i + 1)).loglikelihood; if (burnin) { burnin = (list.get(i + 1)).burnin; if (!burnin) { gr.setColor(new Color(46, 87, 221)); } } gr.drawLine(minX+(maxWidth-border) * i / 300 + 50, minY+(int) ((maxLik - actual) * (maxHeight-border) / (maxLik - minLik + 1.0)), minX+(maxWidth-border) * (i + 1) / 300 + 50, minY+(int) ((maxLik - next) * (maxHeight-border) / (maxLik - minLik + 1.0))); // i++; } } }