Changeset 7650


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

Fixed bugs in ROI fitting, et. al.

File:
1 edited

Legend:

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

    r7616 r7650  
    4747import java.awt.Color; 
    4848import java.awt.Rectangle; 
     49import java.awt.event.FocusEvent; 
     50import java.awt.event.FocusListener; 
    4951import java.util.ArrayList; 
    5052import java.util.prefs.Preferences; 
     
    618620 
    619621        // show decay and update UI parameters 
    620         showDecayGraph(uiPanel, dataArray); 
     622        showDecayGraph("Summed ", uiPanel, dataArray, 0); 
    621623        uiPanel.setParameters(dataArray[0].getParams()); 
    622624    } 
     
    634636        double yFitted[]; 
    635637         
    636         int roiNumber = 0; 
     638        int roiNumber = 1; 
    637639        for (Roi roi: getRois()) { 
    638             ++roiNumber; 
    639640            curveFitData = new CurveFitData(); 
    640641            curveFitData.setParams(params.clone()); 
     
    658659            curveFitData.setYFitted(yFitted); 
    659660            curveFitDataList.add(curveFitData); 
     661            ++roiNumber; 
    660662        } 
    661663         
     
    663665        ICurveFitData dataArray[] = curveFitDataList.toArray(new ICurveFitData[0]); 
    664666        getCurveFitter(uiPanel).fitData(dataArray, m_startBin, m_stopBin); 
    665          
    666         showDecayGraph(uiPanel, dataArray); 
     667 
     668        // show the decay graphs 
     669        double min = Double.MAX_VALUE; 
     670        double max = Double.MIN_VALUE; 
     671        roiNumber = 1; 
     672        for (Roi roi: getRois()) { 
     673            showDecayGraph("Roi " + roiNumber, uiPanel, dataArray, roiNumber - 1); 
     674            double lifetime = dataArray[roiNumber - 1].getParams()[3]; 
     675            if (lifetime < min) { 
     676                min = lifetime; 
     677            } 
     678            if (lifetime > max) { 
     679                max = lifetime; 
     680            } 
     681            ++roiNumber; 
     682        } 
    667683         
    668684        // show colorized lifetimes 
     
    671687        int i = 0; 
    672688        for (Roi roi: getRois()) { 
    673             double lifetime = dataArray[i++].getParams()[1]; 
    674             imageProcessor.setColor(lifetimeColorMap(MAXIMUM_LIFETIME, lifetime)); 
     689            double lifetime = dataArray[i++].getParams()[3]; 
     690 
     691            System.out.println("lifetime is " + lifetime); 
     692            System.out.println("min " + min + " max " + max); 
     693            System.out.println("color is " + lifetimeColorMap(min,max, lifetime)); 
     694             
     695            imageProcessor.setColor(lifetimeColorMap(min, max, lifetime)); 
    675696 
    676697            Rectangle bounds = roi.getBounds(); 
     
    719740        getCurveFitter(uiPanel).fitData(dataArray, m_startBin, m_stopBin); 
    720741         
    721         showDecayGraph(uiPanel, dataArray); 
     742        showDecayGraph("Pixel " + x + " " + y, uiPanel, dataArray, 0); 
    722743 
    723744        // update UI parameters 
     
    11351156     * used in fitEachPixel. 
    11361157     * 
     1158     * @param min 
    11371159     * @param max 
    11381160     * @param lifetime 
     
    11401162     */ 
    11411163    //TODO make consistent with fitEachPixel's DataColorizer 
    1142      private Color lifetimeColorMap(double max, double lifetime) { 
     1164    //TODO this needs to use LUTs 
     1165     private Color lifetimeColorMap(double min, double max, double lifetime) { 
     1166        // adjust for minimum 
     1167        max -= min; 
     1168        lifetime -= min; 
     1169 
    11431170        Color returnColor = Color.BLACK; 
    11441171        if (lifetime > 0.0) { 
     
    11501177            } 
    11511178            else returnColor = Color.RED; 
     1179        } 
     1180        else if (lifetime == 0.0) { 
     1181            returnColor = Color.BLUE; 
    11521182        } 
    11531183        return returnColor; 
     
    12231253                curveFitter = new SLIMCurveFitter(SLIMCurveFitter.AlgorithmType.LMA); 
    12241254                break; 
     1255            case SLIMCURVE_RLD_LMA: 
     1256                curveFitter = new SLIMCurveFitter(SLIMCurveFitter.AlgorithmType.RLD_LMA); 
     1257                break; 
    12251258        } 
    12261259        ICurveFitter.FitFunction fitFunction = null; 
     
    12531286        switch (fitFunction) { 
    12541287            case SINGLE_EXPONENTIAL: 
    1255                 // incoming UI order is A, T, C 
    1256                 // SLIMCurve wants C, A, T 
     1288                // incoming UI order is A, T, Z 
     1289                // SLIMCurve wants Z, A, T 
    12571290                translated[0] = free[2]; 
    12581291                translated[1] = free[0]; 
     
    12601293                break; 
    12611294            case DOUBLE_EXPONENTIAL: 
    1262                 // incoming UI order is A1 T1 A2 T2 C 
    1263                 // SLIMCurve wants C A1 T1 A2 T2 
     1295                // incoming UI order is A1 T1 A2 T2 Z 
     1296                // SLIMCurve wants Z A1 T1 A2 T2 
    12641297                translated[0] = free[4]; 
    12651298                translated[1] = free[0]; 
     
    12691302                break; 
    12701303            case TRIPLE_EXPONENTIAL: 
    1271                 // incoming UI order is A1 T1 A2 T2 A3 T3 C 
    1272                 // SLIMCurve wants C A1 T1 A2 T2 A3 T3 
     1304                // incoming UI order is A1 T1 A2 T2 A3 T3 Z 
     1305                // SLIMCurve wants Z A1 T1 A2 T2 A3 T3 
    12731306                translated[0] = free[6]; 
    12741307                translated[1] = free[0]; 
     
    12801313                break; 
    12811314            case STRETCHED_EXPONENTIAL: 
    1282                 // incoming UI order is A T H C 
    1283                 // SLIMCurve wants C A T H 
     1315                // incoming UI order is A T H Z 
     1316                // SLIMCurve wants Z A T H 
    12841317                translated[0] = free[3]; 
    12851318                translated[1] = free[0]; 
     
    12931326    /* 
    12941327     * Helper function for the fit.  Shows the decay curve. 
    1295      *  
     1328     * 
     1329     * @param title 
     1330     * @param uiPanel gets updates on dragged/start stop 
    12961331     * @param dataArray array of fitted data 
    1297      */ 
    1298     private void showDecayGraph(final IUserInterfacePanel uiPanel, ICurveFitData dataArray[]) { 
    1299         if (0 < dataArray.length) { 
    1300             //TODO need to be able to examine any fitted pixel; for now just show the first.  // was last 
    1301             DecayGraph decayGraph = new DecayGraph(m_startBin, m_stopBin, m_timeBins, m_timeRange, dataArray[0]); //dataArray.length - 1]); 
     1332     * @param index to show 
     1333     */ 
     1334    private void showDecayGraph(String title, final IUserInterfacePanel uiPanel, ICurveFitData dataArray[], int index) { 
     1335        if (index < dataArray.length) { 
     1336            DecayGraph decayGraph = new DecayGraph(title, m_startBin, m_stopBin, m_timeBins, m_timeRange, dataArray[index]); 
    13021337            decayGraph.setStartStopListener( 
    13031338                new IStartStopListener() { 
     
    13111346            frame.setLocationRelativeTo(uiPanel.getFrame()); 
    13121347            frame.setVisible(true); 
     1348            frame.addFocusListener( 
     1349                new FocusListener() { 
     1350                    public void focusGained(FocusEvent e) { 
     1351                        System.out.println("focus gained " + e); 
     1352                    } 
     1353                    public void focusLost(FocusEvent e) { 
     1354 
     1355                    } 
     1356            }); 
    13131357        }         
    13141358    } 
Note: See TracChangeset for help on using the changeset viewer.