Changeset 7654 for trunk/projects


Ignore:
Timestamp:
03/15/11 20:17:02 (9 years ago)
Author:
aivar
Message:

Added new RLD+LMA fit option. Consistency with TRI2. Added excitation handling.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/projects/slim-plugin/src/main/java/loci/slim/ui/UserInterfacePanel.java

    r7308 r7654  
    6060import javax.swing.border.EmptyBorder; 
    6161 
     62import ij.gui.GenericDialog; 
     63 
     64import loci.slim.Excitation; 
     65import loci.slim.ExcitationFileHandler; 
    6266import loci.slim.ui.IUserInterfacePanel.FitAlgorithm; 
    6367import loci.slim.ui.IUserInterfacePanel.FitFunction; 
     
    97101    private static final String SLIM_CURVE_RLD_ALGORITHM = "SLIMCurve RLD"; 
    98102    private static final String SLIM_CURVE_LMA_ALGORITHM = "SLIMCurve LMA"; 
     103    private static final String SLIM_CURVE_RLD_LMA_ALGORITHM = "SLIMCurve RLD+LMA"; 
    99104 
    100105    private static final String SINGLE_EXPONENTIAL = "Single Exponential"; 
     
    102107    private static final String TRIPLE_EXPONENTIAL = "Triple Exponential"; 
    103108    private static final String STRETCHED_EXPONENTIAL = "Stretched Exponential"; 
     109 
     110    private static final String EXCITATION_NONE = "None"; 
     111    private static final String EXCITATION_FILE = "File"; 
     112    private static final String EXCITATION_CREATE = "Use current X Y"; 
    104113     
    105114    private static final String DO_FIT = "Do Fit"; 
     
    110119 
    111120    private static final String REGION_ITEMS[] = { SUM_REGION, ROIS_REGION, PIXEL_REGION, ALL_REGION }; 
    112     private static final String ALGORITHM_ITEMS[] = { JAOLHO_LMA_ALGORITHM, GRAY_RLD_ALGORITHM, GRAY_LMA_ALGORITHM, SLIM_CURVE_RLD_ALGORITHM, SLIM_CURVE_LMA_ALGORITHM }; 
     121    private static final String ALGORITHM_ITEMS[] = { JAOLHO_LMA_ALGORITHM, GRAY_RLD_ALGORITHM, GRAY_LMA_ALGORITHM, SLIM_CURVE_RLD_ALGORITHM, SLIM_CURVE_LMA_ALGORITHM, SLIM_CURVE_RLD_LMA_ALGORITHM }; 
    113122    private static final String FUNCTION_ITEMS[] = { SINGLE_EXPONENTIAL, DOUBLE_EXPONENTIAL, TRIPLE_EXPONENTIAL, STRETCHED_EXPONENTIAL }; 
     123 
     124    private static final String EXCITATION_ITEMS[] = { EXCITATION_NONE, EXCITATION_FILE, EXCITATION_CREATE }; 
    114125     
    115126    public IUserInterfacePanelListener m_listener; 
     127 
     128    private ExcitationPanel m_excitationPanel; 
    116129 
    117130    int m_fittedParameterCount = 0; 
     
    135148    JTextField m_thresholdField; 
    136149    JComboBox m_binningComboBox; 
     150    JComboBox m_excitationComboBox; 
    137151 
    138152    // parameter panel 
     
    145159    JTextField m_tParam1; 
    146160    JCheckBox m_tFix1; 
    147     JTextField m_cParam1; 
    148     JCheckBox m_cFix1; 
     161    JTextField m_zParam1; 
     162    JCheckBox m_zFix1; 
    149163    JTextField m_chiSqParam1; 
    150164    JCheckBox m_startParam1; 
     
    159173    JTextField m_t2Param2; 
    160174    JCheckBox m_t2Fix2; 
    161     JTextField m_cParam2; 
    162     JCheckBox m_cFix2; 
     175    JTextField m_zParam2; 
     176    JCheckBox m_zFix2; 
    163177    JTextField m_chiSqParam2; 
    164178    JCheckBox m_startParam2; 
     
    177191    JTextField m_t3Param3; 
    178192    JCheckBox m_t3Fix3; 
    179     JTextField m_cParam3; 
    180     JCheckBox m_cFix3; 
     193    JTextField m_zParam3; 
     194    JCheckBox m_zFix3; 
    181195    JTextField m_chiSqParam3; 
    182196    JCheckBox m_startParam3; 
     
    189203    JTextField m_hParam4; 
    190204    JCheckBox m_hFix4; 
    191     JTextField m_cParam4; 
    192     JCheckBox m_cFix4; 
     205    JTextField m_zParam4; 
     206    JCheckBox m_zFix4; 
    193207    JTextField m_chiSqParam4; 
    194208    JCheckBox m_startParam4; 
     
    317331        fitPanel.add(algorithmLabel); 
    318332        m_algorithmComboBox = new JComboBox(ALGORITHM_ITEMS); 
    319      m_algorithmComboBox.setSelectedItem(SLIM_CURVE_LMA_ALGORITHM); 
     333     m_algorithmComboBox.setSelectedItem(SLIM_CURVE_RLD_LMA_ALGORITHM); 
    320334        fitPanel.add(m_algorithmComboBox); 
    321335 
     
    354368    } 
    355369 
     370    float[] m_values = null; 
     371 
    356372    /* 
    357373     * Creates a panel that has some settings that control the fit. 
     
    398414        controlPanel.add(m_binningComboBox); 
    399415 
     416        JLabel excitationLabel = new JLabel("Excitation"); 
     417        excitationLabel.setHorizontalAlignment(SwingConstants.RIGHT); 
     418        controlPanel.add(excitationLabel); 
     419        m_excitationComboBox = new JComboBox(EXCITATION_ITEMS); 
     420        m_excitationComboBox.addActionListener( 
     421            new ActionListener() { 
     422                public void actionPerformed(ActionEvent e) { 
     423                    Excitation excitation = null; 
     424 
     425                    String selectedItem = (String) m_excitationComboBox.getSelectedItem(); 
     426                    System.out.println("selected " + selectedItem); 
     427                    if (EXCITATION_NONE.equals(selectedItem)) { 
     428                        if (null != m_excitationPanel) { 
     429                            m_excitationPanel.quit(); 
     430                            m_excitationPanel = null; 
     431                        } 
     432                    } 
     433                    else if (EXCITATION_FILE.equals(selectedItem)) { 
     434                        String fileName = getFileName("Load Excitation File", ""); 
     435                        if (null != fileName) { 
     436                            excitation = ExcitationFileHandler.getInstance().loadExcitation(fileName); 
     437                        } 
     438                        if (null != excitation) { 
     439                            m_values = excitation.getValues(); 
     440                        } 
     441                    } 
     442                    else if (EXCITATION_CREATE.equals(selectedItem)) { 
     443                        String fileName = getFileName("Save Excitation File", ""); 
     444                        if (null != fileName) { 
     445                            if (null != m_values) { 
     446                                excitation = ExcitationFileHandler.getInstance().createExcitation(fileName, m_values); 
     447                            } 
     448                        } 
     449                    } 
     450 
     451                    if (null == excitation) { 
     452                        m_excitationComboBox.setSelectedItem(EXCITATION_NONE); 
     453                    } 
     454                    else { 
     455                        m_excitationComboBox.setSelectedItem(EXCITATION_FILE); 
     456                        m_excitationPanel = new ExcitationPanel(excitation); 
     457                    } 
     458                } 
     459            } 
     460        ); 
     461        controlPanel.add(m_excitationComboBox); 
     462 
    400463        // rows, cols, initX, initY, xPad, yPad 
    401         SpringUtilities.makeCompactGrid(controlPanel, 6, 2, 4, 4, 4, 4); 
     464        SpringUtilities.makeCompactGrid(controlPanel, 7, 2, 4, 4, 4, 4); 
    402465 
    403466        JPanel panel = new JPanel(new BorderLayout()); 
     
    435498        expPanel.add(m_tFix1); 
    436499 
    437         JLabel cLabel1 = new JLabel("C"); 
    438         cLabel1.setHorizontalAlignment(SwingConstants.RIGHT); 
    439         expPanel.add(cLabel1); 
    440         m_cParam1 = new JTextField(9); 
    441         //m_cParam1.setEditable(false); 
    442         expPanel.add(m_cParam1); 
    443         m_cFix1 = new JCheckBox("Fix"); 
    444         //m_cFix1.addItemListener(this); 
    445         expPanel.add(m_cFix1); 
     500        JLabel zLabel1 = new JLabel("Z"); 
     501        zLabel1.setHorizontalAlignment(SwingConstants.RIGHT); 
     502        expPanel.add(zLabel1); 
     503        m_zParam1 = new JTextField(9); 
     504        //m_zParam1.setEditable(false); 
     505        expPanel.add(m_zParam1); 
     506        m_zFix1 = new JCheckBox("Fix"); 
     507        //m_zFix1.addItemListener(this); 
     508        expPanel.add(m_zFix1); 
    446509 
    447510        JLabel chiSqLabel1 = new JLabel("" + CHI + SQUARE); 
     
    459522        //m_a1Param1.setBackground(floatColor); 
    460523        //m_t1Param1.setBackground(floatColor); 
    461         //m_cParam1.setBackground(floatColor); 
     524        //m_zParam1.setBackground(floatColor); 
    462525        //m_chiSqParam1.setBackground(floatColor); 
    463526 
     
    524587        expPanel.add(m_t2Fix2); 
    525588 
    526         JLabel cLabel2 = new JLabel("C"); 
    527         cLabel2.setHorizontalAlignment(SwingConstants.RIGHT); 
    528         expPanel.add(cLabel2); 
    529         m_cParam2 = new JTextField(9); 
    530         //m_cParam2.setEditable(false); 
    531         expPanel.add(m_cParam2); 
    532         m_cFix2 = new JCheckBox("Fix"); 
    533         //m_cFix2.addItemListener(this); 
    534         expPanel.add(m_cFix2); 
     589        JLabel zLabel2 = new JLabel("Z"); 
     590        zLabel2.setHorizontalAlignment(SwingConstants.RIGHT); 
     591        expPanel.add(zLabel2); 
     592        m_zParam2 = new JTextField(9); 
     593        //m_zParam2.setEditable(false); 
     594        expPanel.add(m_zParam2); 
     595        m_zFix2 = new JCheckBox("Fix"); 
     596        //m_zFix2.addItemListener(this); 
     597        expPanel.add(m_zFix2); 
    535598 
    536599        JLabel chiSqLabel2 = new JLabel("" + CHI + SQUARE); 
     
    550613        //m_a2Param2.setBackground(floatColor); 
    551614        //m_t2Param2.setBackground(floatColor); 
    552         //m_cParam2.setBackground(floatColor); 
     615        //m_zParam2.setBackground(floatColor); 
    553616        //m_chiSqParam2.setBackground(floatColor); 
    554617 
     
    634697        expPanel.add(m_t3Fix3); 
    635698 
    636         JLabel cLabel3 = new JLabel("C"); 
    637         cLabel3.setHorizontalAlignment(SwingConstants.RIGHT); 
    638         expPanel.add(cLabel3); 
    639         m_cParam3 = new JTextField(9); 
    640         //m_cParam3.setEditable(false); 
    641         expPanel.add(m_cParam3); 
    642         m_cFix3 = new JCheckBox("Fix"); 
    643         //m_cFix3.addItemListener(this); 
    644         expPanel.add(m_cFix3); 
     699        JLabel zLabel3 = new JLabel("Z"); 
     700        zLabel3.setHorizontalAlignment(SwingConstants.RIGHT); 
     701        expPanel.add(zLabel3); 
     702        m_zParam3 = new JTextField(9); 
     703        //m_zParam3.setEditable(false); 
     704        expPanel.add(m_zParam3); 
     705        m_zFix3 = new JCheckBox("Fix"); 
     706        //m_zFix3.addItemListener(this); 
     707        expPanel.add(m_zFix3); 
    645708 
    646709 
     
    663726        //m_a3Param3.setBackground(floatColor); 
    664727        //m_t3Param3.setBackground(floatColor); 
    665         //m_cParam3.setBackground(floatColor); 
     728        //m_zParam3.setBackground(floatColor); 
    666729        //m_chiSqParam3.setBackground(floatColor); 
    667730 
     
    717780        expPanel.add(m_hFix4); 
    718781 
    719         JLabel cLabel1 = new JLabel("C"); 
    720         cLabel1.setHorizontalAlignment(SwingConstants.RIGHT); 
    721         expPanel.add(cLabel1); 
    722         m_cParam4 = new JTextField(9); 
    723         //m_cParam1.setEditable(false); 
    724         expPanel.add(m_cParam4); 
    725         m_cFix4 = new JCheckBox("Fix"); 
    726         //m_cFix1.addItemListener(this); 
    727         expPanel.add(m_cFix4); 
     782        JLabel zLabel1 = new JLabel("Z"); 
     783        zLabel1.setHorizontalAlignment(SwingConstants.RIGHT); 
     784        expPanel.add(zLabel1); 
     785        m_zParam4 = new JTextField(9); 
     786        //m_zParam1.setEditable(false); 
     787        expPanel.add(m_zParam4); 
     788        m_zFix4 = new JCheckBox("Fix"); 
     789        //m_zFix1.addItemListener(this); 
     790        expPanel.add(m_zFix4); 
    728791 
    729792        JLabel chiSqLabel4 = new JLabel("" + CHI + SQUARE); 
     
    741804        //m_a1Param1.setBackground(floatColor); 
    742805        //m_t1Param1.setBackground(floatColor); 
    743         //m_cParam1.setBackground(floatColor); 
     806        //m_zParam1.setBackground(floatColor); 
    744807        //m_chiSqParam1.setBackground(floatColor); 
    745808 
     
    798861        m_tParam1.setEditable(enable); 
    799862        m_tFix1.setEnabled(enable); 
    800         m_cParam1.setEditable(enable); 
    801         m_cFix1.setEnabled(enable); 
     863        m_zParam1.setEditable(enable); 
     864        m_zFix1.setEnabled(enable); 
    802865 
    803866        // double exponent fit 
     
    810873        m_t2Param2.setEditable(enable); 
    811874        m_t2Fix2.setEnabled(enable); 
    812         m_cParam2.setEditable(enable); 
    813         m_cFix2.setEnabled(enable); 
     875        m_zParam2.setEditable(enable); 
     876        m_zFix2.setEnabled(enable); 
    814877 
    815878        // triple exponent fit 
     
    826889        m_t3Param3.setEditable(enable); 
    827890        m_t3Fix3.setEnabled(enable); 
    828         m_cParam3.setEditable(enable); 
    829         m_cFix3.setEnabled(enable); 
     891        m_zParam3.setEditable(enable); 
     892        m_zFix3.setEnabled(enable); 
    830893 
    831894        // stretched exonent fit 
     
    836899        m_hParam4.setEditable(enable); 
    837900        m_hFix4.setEnabled(enable); 
    838         m_cParam4.setEditable(enable); 
    839         m_cFix4.setEnabled(enable); 
     901        m_zParam4.setEditable(enable); 
     902        m_zFix4.setEnabled(enable); 
    840903 
    841904        if (enable) { 
     
    879942        else if (selected.equals(SLIM_CURVE_LMA_ALGORITHM)) { 
    880943            algorithm = FitAlgorithm.SLIMCURVE_LMA; 
     944        } 
     945        else if (selected.equals(SLIM_CURVE_RLD_LMA_ALGORITHM)) { 
     946            algorithm = FitAlgorithm.SLIMCURVE_RLD_LMA; 
    881947        } 
    882948        return algorithm; 
     
    9841050            parameters[2] = Double.valueOf(m_aParam1.getText()); 
    9851051            parameters[3] = Double.valueOf(m_tParam1.getText()); 
    986             parameters[1] = Double.valueOf(m_cParam1.getText()); 
     1052            parameters[1] = Double.valueOf(m_zParam1.getText()); 
    9871053        } 
    9881054        else if (function.equals(DOUBLE_EXPONENTIAL)) { 
     
    9921058            parameters[4] = Double.valueOf(m_a2Param2.getText()); 
    9931059            parameters[5] = Double.valueOf(m_t2Param2.getText()); 
    994             parameters[1] = Double.valueOf(m_cParam2.getText()); 
     1060            parameters[1] = Double.valueOf(m_zParam2.getText()); 
    9951061        } 
    9961062        else if (function.equals(TRIPLE_EXPONENTIAL)) { 
     
    10021068            parameters[6] = Double.valueOf(m_a3Param3.getText()); 
    10031069            parameters[7] = Double.valueOf(m_t3Param3.getText()); 
    1004             parameters[1] = Double.valueOf(m_cParam3.getText()); 
     1070            parameters[1] = Double.valueOf(m_zParam3.getText()); 
    10051071        } 
    10061072        else if (function.equals(STRETCHED_EXPONENTIAL)) { 
     
    10091075            parameters[3] = Double.valueOf(m_tParam4.getText()); 
    10101076            parameters[4] = Double.valueOf(m_hParam4.getText()); 
    1011             parameters[1] = Double.valueOf(m_cParam4.getText()); 
     1077            parameters[1] = Double.valueOf(m_zParam4.getText()); 
    10121078        } 
    10131079        parameters[0] = 0.0; 
     
    10201086            m_aParam1.setText    ("" + (float) params[2]); 
    10211087            m_tParam1.setText    ("" + (float) params[3]); 
    1022             m_cParam1.setText    ("" + (float) params[1]); 
     1088            m_zParam1.setText    ("" + (float) params[1]); 
    10231089            m_chiSqParam1.setText("" + (float) params[0]); 
    10241090        } 
     
    10281094            m_a2Param2.setText   ("" + (float) params[4]); 
    10291095            m_t2Param2.setText   ("" + (float) params[5]); 
    1030             m_cParam2.setText    ("" + (float) params[1]); 
     1096            m_zParam2.setText    ("" + (float) params[1]); 
    10311097            m_chiSqParam2.setText("" + (float) params[0]); 
    10321098        } 
     
    10381104            m_a3Param3.setText   ("" + (float) params[6]); 
    10391105            m_t3Param3.setText   ("" + (float) params[7]); 
    1040             m_cParam3.setText    ("" + (float) params[1]); 
     1106            m_zParam3.setText    ("" + (float) params[1]); 
    10411107            m_chiSqParam3.setText("" + (float) params[0]); 
    10421108        } 
     
    10451111            m_tParam4.setText    ("" + (float) params[3]); 
    10461112            m_hParam4.setText    ("" + (float) params[4]); 
    1047             m_cParam4.setText    ("" + (float) params[1]); 
     1113            m_zParam4.setText    ("" + (float) params[1]); 
    10481114            m_chiSqParam4.setText("" + (float) params[0]); 
    10491115        } 
     
    10551121                m_aParam1.setText    ("" + (float) params[2]); 
    10561122                m_tParam1.setText    ("" + (float) params[3]); 
    1057                 m_cParam1.setText    ("" + (float) params[1]); 
     1123                m_zParam1.setText    ("" + (float) params[1]); 
    10581124                m_chiSqParam1.setText("" + (float) params[0]); 
    10591125                break; 
     
    10631129                m_a2Param2.setText   ("" + (float) params[4]); 
    10641130                m_t2Param2.setText   ("" + (float) params[5]); 
    1065                 m_cParam2.setText    ("" + (float) params[1]); 
     1131                m_zParam2.setText    ("" + (float) params[1]); 
    10661132                m_chiSqParam2.setText("" + (float) params[0]); 
    10671133                break; 
     
    10731139                m_a3Param3.setText   ("" + (float) params[6]); 
    10741140                m_t3Param3.setText   ("" + (float) params[7]); 
    1075                 m_cParam3.setText    ("" + (float) params[1]); 
     1141                m_zParam3.setText    ("" + (float) params[1]); 
    10761142                m_chiSqParam3.setText("" + (float) params[0]); 
    10771143                break; 
     
    10801146                m_tParam4.setText    ("" + (float) params[1]); 
    10811147                m_hParam4.setText    ("" + (float) params[2]); 
    1082                 m_cParam4.setText    ("" + (float) params[1]); 
     1148                m_zParam4.setText    ("" + (float) params[1]); 
    10831149                m_chiSqParam4.setText("" + (float) params[0]); 
    10841150                break; 
     
    10931159            free[0] = !m_aFix1.isSelected(); 
    10941160            free[1] = !m_tFix1.isSelected(); 
    1095             free[2] = !m_cFix1.isSelected(); 
     1161            free[2] = !m_zFix1.isSelected(); 
    10961162        } 
    10971163        else if (function.equals(DOUBLE_EXPONENTIAL)) { 
     
    11011167            free[2] = !m_a2Fix2.isSelected(); 
    11021168            free[3] = !m_t2Fix2.isSelected(); 
    1103             free[4] = !m_cFix2.isSelected(); 
     1169            free[4] = !m_zFix2.isSelected(); 
    11041170        } 
    11051171        else if (function.equals(TRIPLE_EXPONENTIAL)) { 
     
    11111177            free[4] = !m_a3Fix3.isSelected(); 
    11121178            free[5] = !m_t3Fix3.isSelected(); 
    1113             free[6] = !m_cFix3.isSelected(); 
     1179            free[6] = !m_zFix3.isSelected(); 
    11141180 
    11151181        } 
     
    11191185            free[1] = !m_tFix4.isSelected(); 
    11201186            free[2] = !m_hFix4.isSelected(); 
    1121             free[3] = !m_cFix4.isSelected(); 
     1187            free[3] = !m_zFix4.isSelected(); 
    11221188        } 
    11231189        return free; 
     
    11651231        m_startParam4.setEnabled(enable); 
    11661232    } 
     1233     
     1234    private String getFileName(String title, String defaultFileName) { 
     1235        GenericDialog dialog = new GenericDialog(title); 
     1236        //TODO works with GenericDialogPlus, dialog.addFileField("File:", defaultFile, 24); 
     1237        dialog.addStringField("File", defaultFileName); 
     1238        dialog.showDialog(); 
     1239        if (dialog.wasCanceled()) { 
     1240            return null; 
     1241        } 
     1242 
     1243        return dialog.getNextString(); 
     1244    } 
    11671245} 
Note: See TracChangeset for help on using the changeset viewer.