/** * */ package analyze; import java.awt.*; import java.awt.event.*; import java.text.*; import javax.swing.*; // FrontEnd imports import model.color.ColorConst; import util.*; /** *

Title:CorrelGaborGabor

*

Description: correlates two outputs from the Simple * Cell model of the cortex. *

*

Copyright: Copyright (c) 2009

*

Company: Hanover College

* @author John H. Krantz, Ph.D. * @version 0.1 */ public class CorrelOneImage { static final long serialVersionUID = 0; //original cortex data private double [][][] cortex1; private double [][][] dog; // private double [][][] cortex2; for later private int numOrient = Defaults.NUM_ORIENT; // fonts private Font titleFont = new Font("SansSerif",Font.BOLD,18); private Font labelFont = new Font("SansSerif",Font.BOLD,12); // arrays to send to correlation private double [][] array1; private double [][] array2; private String [] array1Items; private String [] array2Items; private Summarize sum1 = new Summarize(); // display elements private JPanel titlePanel = new JPanel(); private JLabel titleLabel = new JLabel("Correlate two Model Outputs: 1 Image"); private JPanel correlItemPanel = new JPanel(new BorderLayout()); private JPanel array1Panel = new JPanel(); private JLabel array1Label = new JLabel("First Array: "); private JComboBox array1CBX; private JPanel array2Panel = new JPanel(); private JLabel array2Label = new JLabel("Second Array: "); private JComboBox array2CBX; int aPW = 0; // correlation objects private JButton runCorrel = new JButton("Run Correlation"); private JPanel buttonPanel = new JPanel(); DecimalFormat rFmt = new DecimalFormat("0.000"); // correlation Panel private JPanel correlPanel = new JPanel(); // correlation table // private TableFrame correlTable = new TableFrame(); private CorrelTable correlTable = new CorrelTable(); // display frame private MainFrame df;; public CorrelOneImage(double [][][] ctx, double [][][] DOG){ setCortexData(ctx); setDOG_Data(DOG); numOrient = cortex1[0][0].length; doLayout(); } public void doLayout(){ // set up fonts titleLabel.setFont(titleFont); array1Label.setFont(labelFont); array2Label.setFont(labelFont); // set up the panels for the elements of the correlation array1Panel.add(array1Label); aPW += array1Label.getWidth(); array1Items = GetItemLists.getCortexDogStrings(numOrient); array1CBX = new JComboBox(array1Items); array1Panel.add(array1CBX); aPW += array1CBX.getWidth(); array2Panel.add(array2Label); aPW += array2Label.getWidth(); array2Items = GetItemLists.getCortexDogStrings(numOrient); array2CBX = new JComboBox(array2Items); array2Panel.add(array2CBX); aPW += array2CBX.getWidth(); correlItemPanel.add(array1Panel,BorderLayout.WEST); correlItemPanel.add(array2Panel,BorderLayout.EAST); buttonPanel.add(runCorrel); correlItemPanel.add(buttonPanel,BorderLayout.SOUTH); // add the title df = new MainFrame(titleLabel.getText()); adjustSize(); Container c = df.getContentPane(); titlePanel.add(titleLabel); c.add(titlePanel,BorderLayout.NORTH); c.add(correlItemPanel,BorderLayout.CENTER); c.add(correlPanel,BorderLayout.SOUTH); setupListeners(); df.setVisible(true); } private void setupListeners(){ runCorrel.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ runCorrelation(); } }); array2CBX.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ runCorrelation(); } }); } private void adjustSize(){ FontMetrics fm = titleLabel.getFontMetrics(titleLabel.getFont()); int h = fm.getHeight()*7; h += correlTable.getHeight(); // figure out the widths int w = 0; w = correlTable.getWidth(); if (fm.stringWidth(titleLabel.getText())*5/4 > w){ w = fm.stringWidth(titleLabel.getText())*5/4; } if (w < aPW){ w = aPW; } df.setSize(w,h); } private void runCorrelation(){ int a1 = array1CBX.getSelectedIndex(); int a2 = array2CBX.getSelectedIndex(); correlTable.setLabels(array1Items[a1], array2Items[a2]); // set up the arrays // set up array 1 if (a1 >= GetItemLists.SD_OR_START){ a1 -= GetItemLists.SD_OR_START; array1 = new double[cortex1.length][cortex1[0].length]; // create the arrays for (int i = 0; i < array1.length; i ++){ // if selecting an orientation for (int j = 0; j < array1[0].length; j ++){ array1[i][j] = cortex1[i][j][a1]; } } }// end if selecting single orientation else { // not a single orientation but a mean or max or min int indx = Summarize.MAX; boolean gabor = true; switch(a1){ case (GetItemLists.SD_ACHROM): indx = ColorConst.BL_WH; gabor = false; break; case (GetItemLists.SD_RG): indx = ColorConst.R_G; gabor = false; break; case (GetItemLists.SD_BY): indx = ColorConst.B_Y; gabor = false; break; case (GetItemLists.SD_MAX): indx = Summarize.MAX; gabor = true; break; case (GetItemLists.SD_MIN): indx = Summarize.MIN; gabor = true; break; case (GetItemLists.SD_MEAN): indx = Summarize.MEAN; gabor = true; break; } if (gabor){ array1 = new double[cortex1.length][cortex1[0].length]; // create the arrays for (int i = 0; i < array1.length; i ++){ // if selecting an orientation for (int j = 0; j < array1[0].length; j ++){ array1[i][j] = sum1.getPointSummary(i, j)[indx]; } } } else { array1 = new double[dog.length][dog[0].length]; // create the arrays for (int i = 0; i < array1.length; i ++){ // if selecting an orientation for (int j = 0; j < array1[0].length; j ++){ array1[i][j] = dog[i][j][indx]; } } } } // set up array 2 if (a2 >= GetItemLists.SD_OR_START){ a2 -= GetItemLists.SD_OR_START; array2 = new double[cortex1.length][cortex1[0].length]; // create the arrays for (int i = 0; i < array2.length; i ++){ // if selecting an orientation for (int j = 0; j < array2[0].length; j ++){ array2[i][j] = cortex1[i][j][a2]; } } }// end if selecting single orientation else { // not a single orientation but a mean or max or min int indx = Summarize.MAX; boolean gabor = true; switch(a2){ case (GetItemLists.SD_ACHROM): indx = ColorConst.BL_WH; gabor = false; break; case (GetItemLists.SD_RG): indx = ColorConst.R_G; gabor = false; break; case (GetItemLists.SD_BY): indx = ColorConst.B_Y; gabor = false; break; case (GetItemLists.SD_MAX): indx = Summarize.MAX; gabor = true; break; case (GetItemLists.SD_MIN): indx = Summarize.MIN; gabor = true; break; case (GetItemLists.SD_MEAN): indx = Summarize.MEAN; gabor = true; break; } if (gabor){ array2 = new double[cortex1.length][cortex1[0].length]; // create the arrays for (int i = 0; i < array2.length; i ++){ // if selecting an orientation for (int j = 0; j < array2[0].length; j ++){ array2[i][j] = sum1.getPointSummary(i, j)[indx]; } } } else { array2 = new double[dog.length][dog[0].length]; // create the arrays for (int i = 0; i < array2.length; i ++){ // if selecting an orientation for (int j = 0; j < array2[0].length; j ++){ array2[i][j] = dog[i][j][indx]; } } } } // get the correlation // double r = Compute.Correl2D(array1, array2); // correlTable.setTableElement(rFmt.format(r),0,0); correlTable.setOutputs(array1, array2); correlPanel.removeAll(); correlPanel.updateUI(); correlPanel.add(correlTable.showCorrel()); correlPanel.updateUI(); adjustSize(); } // set methods /** * Set the data to be used in determining the * correlations * @param double [][][] ctx the cortex data */ public void setCortexData(double [][][] ctx){ cortex1 = ctx; sum1.setColumns(cortex1); } public void setDOG_Data(double [][][] DOG){ dog = DOG; } }