Ignore:
Timestamp:
03/28/12 17:37:17 (8 years ago)
Author:
aivar
Message:

SLIM Plugin: Working on cursor problems.

Location:
trunk/projects/slim-plugin/src/main/java/loci/slim
Files:
1 added
7 edited

Legend:

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

    r7930 r7936  
    387387                public void estimateCursors() { 
    388388                    double xInc = m_timeRange; 
     389                     
    389390                    double[] prompt = null; 
    390                     double[] decay = null; 
     391                    if (null != m_excitationPanel) { 
     392                        prompt = m_excitationPanel.getRawValues(); 
     393                    } 
     394                    double[] decay = new double[m_bins]; 
     395                    for (int b = 0; b < m_bins; ++b) { 
     396                        decay[b] = getData(m_cursor, m_channel, m_x, m_y, b); 
     397                    } 
     398                     
    391399                    double chiSqTarget = m_uiPanel.getChiSquareTarget(); 
    392                     if (_fittingCursor.getHasPrompt()) { 
     400                    if (null != prompt && _fittingCursor.getHasPrompt()) { 
    393401                        double[] results = CursorEstimator.estimateCursors 
    394402                                (xInc, prompt, decay, chiSqTarget); 
    395                         double promptBaseline = results[CursorEstimator.PROMPT_BASELINE]; 
    396                         double promptStart    = results[CursorEstimator.PROMPT_START]; 
    397                         double promptStop     = results[CursorEstimator.PROMPT_STOP]; 
    398                         double transientStart = results[CursorEstimator.TRANSIENT_START]; 
    399                         double dataStart      = results[CursorEstimator.DATA_START]; 
    400                         double transientStop  = results[CursorEstimator.TRANSIENT_STOP]; 
     403                         
     404                        // want all the fitting cursor listeners to get everything at once 
    401405                        _fittingCursor.suspendNotifications(); 
    402406                        _fittingCursor.setHasPrompt(true); 
    403                         _fittingCursor.setPromptBaselineValue(promptBaseline); 
    404                         _fittingCursor.setPromptStartValue   (promptStart); 
    405                         _fittingCursor.setPromptStopValue    (promptStop); 
    406                         _fittingCursor.setTransientStartValue(transientStart); 
    407                         _fittingCursor.setDataStartValue     (dataStart); 
    408                         _fittingCursor.setTransientStopValue (transientStop); 
     407                        _fittingCursor.setPromptStartBin 
     408                                ((int) results[CursorEstimator.PROMPT_START]); 
     409                        _fittingCursor.setPromptStopBin 
     410                                ((int) results[CursorEstimator.PROMPT_STOP]); 
     411                        _fittingCursor.setPromptBaselineValue 
     412                                (results[CursorEstimator.PROMPT_BASELINE]); 
     413                        _fittingCursor.setTransientStartBin 
     414                                ((int) results[CursorEstimator.TRANSIENT_START]); 
     415                        _fittingCursor.setDataStartBin 
     416                                ((int) results[CursorEstimator.DATA_START]); 
     417                        _fittingCursor.setTransientStopBin 
     418                                ((int) results[CursorEstimator.TRANSIENT_STOP]); 
    409419                        _fittingCursor.sendNotifications(); 
    410420                    } 
    411                     else { 
    412                         //TODO ARG cursors still has that confusion between double and int! 
    413                         /* 
    414                         double[] results = CursorEstimator.estimateDecayCursors 
     421                    else 
     422                    { 
     423                        int[] results = CursorEstimator.estimateDecayCursors 
    415424                                (xInc, decay); 
    416                         double transientStart = results[CursorEstimator.TRANSIENT_START]; 
    417                         double dataStart      = results[CursorEstimator.DATA_START]; 
    418                         double transientStop  = results[CursorEstimator.TRANSIENT_STOP]; 
    419                         _fittingCursor.setTransientStartValue(transientStart); 
    420                         _fittingCursor.setDataStartValue     (dataStart); 
    421                         _fittingCursor.suspendNotifications(false); 
    422                         _fittingCursor.setTransientStopValue (transientStop);*/ 
     425                         
     426                        // want all the fitting cursor listeners to get everything at once 
     427                        _fittingCursor.suspendNotifications(); 
     428                        _fittingCursor.setHasPrompt(false); 
     429                        _fittingCursor.setTransientStartBin(results[CursorEstimator.TRANSIENT_START]); 
     430                        _fittingCursor.setDataStartBin(results[CursorEstimator.DATA_START]); 
     431                        _fittingCursor.setTransientStopBin(results[CursorEstimator.TRANSIENT_STOP]); 
     432                        _fittingCursor.sendNotifications(); 
    423433                    } 
    424434                } 
     
    10821092            curveFitData.setTransEndIndex(m_stopBin); 
    10831093            yFitted = new double[m_bins]; 
    1084             curveFitData.setYFitted(yFitted); 
    1085              
    1086             // for TRI2 compatibility: 
    1087             if (FitAlgorithm.SLIMCURVE_RLD_LMA.equals(uiPanel.getFunction())) { //TODO ARG UGLY 
    1088                 // these lines give TRI2 compatible fit results 
    1089                 int estimateStartIndex = 
    1090                         CursorEstimator.getEstimateStartIndex 
    1091                             (yCount, m_startBin, m_stopBin); 
    1092                 curveFitData.setTransEstimateStartIndex(estimateStartIndex); 
    1093                 curveFitData.setIgnorePromptForIntegralEstimate(true); 
    1094             }          
     1094            curveFitData.setYFitted(yFitted);       
    10951095 
    10961096            // use zero for current channel if it's the only one 
     
    11641164                curveFitData.setDataStartIndex(m_startBin); 
    11651165                curveFitData.setTransEndIndex(m_stopBin); 
    1166                 if (FitAlgorithm.SLIMCURVE_RLD_LMA.equals(uiPanel.getFunction())) { 
    1167                     // these lines give TRI2 compatible fit results 
    1168                     int estimateStartIndex = 
    1169                             CursorEstimator.getEstimateStartIndex 
    1170                                 (yCount, m_startBin, m_stopBin); 
    1171                     curveFitData.setTransEstimateStartIndex(estimateStartIndex); 
    1172                     curveFitData.setIgnorePromptForIntegralEstimate(true); 
    1173                 } 
    1174                  
    11751166                 
    11761167                yFitted = new double[m_bins]; 
     
    12941285            } 
    12951286            System.out.println("PHOTONS " + photons); 
    1296  
    1297 //TODO ARG 3/12             
    1298 int transStartIndex = _fittingCursor.getTransientStartBin(); 
    1299 int dataStartIndex = _fittingCursor.getDataStartBin(); 
    1300 int transStopIndex = _fittingCursor.getTransientStopBin(); 
    1301              
    1302            
    1303              
    1304              
    1305              
    1306              
    13071287             
    13081288            curveFitData.setYCount(yCount); 
    1309             curveFitData.setTransStartIndex(transStartIndex); //TODO ARG 0); 
    1310             curveFitData.setDataStartIndex(dataStartIndex); //TODO ARG m_startBin); 
    1311             curveFitData.setTransEndIndex(transStopIndex); //TODO ARG m_stopBin); 
     1289            int transStartIndex = _fittingCursor.getTransientStartBin(); 
     1290            int dataStartIndex = _fittingCursor.getDataStartBin(); 
     1291            int transStopIndex = _fittingCursor.getTransientStopBin(); 
     1292            curveFitData.setTransStartIndex(transStartIndex); 
     1293            curveFitData.setDataStartIndex(dataStartIndex); 
     1294            curveFitData.setTransEndIndex(transStopIndex); 
    13121295            System.out.println("uiPanel.getFunction is " + uiPanel.getAlgorithm() + " SLIMCURVE_RLD_LMA is " + FitAlgorithm.SLIMCURVE_RLD_LMA); 
    1313             if (FitAlgorithm.SLIMCURVE_RLD_LMA.equals(uiPanel.getAlgorithm())) { 
    1314                 // these lines give TRI2 compatible fit results 
    1315                 int estimateStartIndex = 
    1316                         CursorEstimator.getEstimateStartIndex 
    1317                             (yCount, m_startBin, m_stopBin); 
    1318                 System.out.append("m_startBin was " + m_startBin + " now estimageStartIndex is " + estimateStartIndex); 
    1319                 curveFitData.setTransEstimateStartIndex(estimateStartIndex); 
    1320                 curveFitData.setIgnorePromptForIntegralEstimate(true); 
    1321             } 
    13221296            
    13231297            yFitted = new double[m_bins]; 
  • trunk/projects/slim-plugin/src/main/java/loci/slim/fitting/callable/FittingEngineCallable.java

    r7930 r7936  
    3535package loci.slim.fitting.callable; 
    3636 
     37import loci.slim.fitting.cursor.FitterEstimator; 
    3738import loci.slim.fitting.params.FitResults; 
    3839import loci.slim.fitting.params.ILocalFitParams; 
     
    6970    @Override 
    7071    public IFitResults call() { 
     72        _curveFitter.setEstimator(_globalParams.getEstimator()); 
    7173        _curveFitter.setFitAlgorithm(_globalParams.getFitAlgorithm()); 
    7274        _curveFitter.setFitFunction(_globalParams.getFitFunction()); 
     
    8587        curveFitData.setParams(_localParams.getParams().clone()); // params is overwritten 
    8688        curveFitData.setYFitted(_localParams.getYFitted()); 
    87         if (_globalParams.getTRI2Compatible()) { 
    88             if (FitAlgorithm.SLIMCURVE_RLD_LMA.equals(_globalParams.getFitFunction())) { 
    89                 // these lines give TRI2 compatible fit results 
    90                 int estimateStartIndex = 
    91                         CursorEstimator.getEstimateStartIndex 
    92                             (_localParams.getY(), _localParams.getFitStart(), _localParams.getFitStop()); 
    93                 curveFitData.setTransEstimateStartIndex(estimateStartIndex); 
    94                 curveFitData.setIgnorePromptForIntegralEstimate(true); 
    95             } 
    96         } 
    9789         
    9890        ICurveFitData[] curveFitDataArray = new ICurveFitData[] { curveFitData }; 
  • trunk/projects/slim-plugin/src/main/java/loci/slim/fitting/cursor/FittingCursor.java

    r7930 r7936  
    233233     */ 
    234234    public int getPromptStartBin() { 
    235         return (int) Math.floor(_promptStartValue / _inc); 
     235        return (int) Math.ceil(_promptStartValue / _inc); 
    236236    } 
    237237 
     
    329329     */ 
    330330    public int getPromptStopBin() { 
    331         return (int) Math.ceil(_promptStopValue / _inc); 
     331        return (int) Math.floor(_promptStopValue / _inc) + 1; 
    332332    } 
    333333 
     
    463463     */ 
    464464    public int getTransientStartBin() { 
    465         return (int) Math.floor(_transientStartValue / _inc); 
     465        return (int) Math.ceil(_transientStartValue / _inc); 
    466466    } 
    467467 
     
    543543     */ 
    544544    public int getDataStartBin() { 
    545         return (int) Math.floor(_dataStartValue / _inc); 
     545        return (int) Math.ceil(_dataStartValue / _inc); 
    546546    } 
    547547 
     
    624624     */ 
    625625    public int getTransientStopBin() { 
    626         return (int) Math.ceil(_transientStopValue / _inc); 
     626        return (int) Math.floor(_transientStopValue / _inc) + 1; 
    627627    } 
    628628 
  • trunk/projects/slim-plugin/src/main/java/loci/slim/fitting/params/GlobalFitParams.java

    r7892 r7936  
    3838import loci.curvefitter.ICurveFitter.FitFunction; 
    3939import loci.curvefitter.ICurveFitter.NoiseModel; 
     40import loci.curvefitter.IFitterEstimator; 
    4041 
    4142/** 
     
    4647 */ 
    4748public class GlobalFitParams implements IGlobalFitParams { 
    48     private boolean _compatible; 
     49    private IFitterEstimator _estimator; 
    4950    private FitAlgorithm _fitAlgorithm; 
    5051    private FitFunction _fitFunction; 
     
    6061 
    6162    @Override 
    62     public void setTRI2Compatible(boolean compatible) { 
    63         _compatible = compatible; 
     63    public void setEstimator(IFitterEstimator estimator) { 
     64        _estimator = estimator; 
    6465    } 
    6566 
    6667    @Override 
    67     public boolean getTRI2Compatible() { 
    68         return _compatible; 
     68    public IFitterEstimator getEstimator() { 
     69        return _estimator; 
    6970    } 
    7071  
  • trunk/projects/slim-plugin/src/main/java/loci/slim/fitting/params/IGlobalFitParams.java

    r7892 r7936  
    3838import loci.curvefitter.ICurveFitter.FitFunction; 
    3939import loci.curvefitter.ICurveFitter.NoiseModel; 
     40import loci.curvefitter.IFitterEstimator; 
    4041 
    4142/** 
     
    4748public interface IGlobalFitParams { 
    4849     
    49     public void setTRI2Compatible(boolean compatible); 
     50    public void setEstimator(IFitterEstimator estimator); 
    5051     
    51     public boolean getTRI2Compatible(); 
     52    public IFitterEstimator getEstimator(); 
    5253     
    5354    public void setFitAlgorithm(FitAlgorithm fitAlgorithm); 
  • trunk/projects/slim-plugin/src/main/java/loci/slim/heuristics/CursorEstimator.java

    r7930 r7936  
    4040import loci.curvefitter.ICurveFitter.FitAlgorithm; 
    4141import loci.curvefitter.ICurveFitter.NoiseModel; 
     42import loci.curvefitter.IFitterEstimator; 
    4243import loci.curvefitter.SLIMCurveFitter; 
    4344 
     
    313314            curveFitData.setTransStartIndex(0); 
    314315            curveFitData.setDataStartIndex(fitStart); 
    315             curveFitData.setTransEstimateStartIndex(fitStart); //TODO ARG this shit has to go; was an early way to handle TRI2 quirkiness; w/b better to call quirky estimator routines from SLIMCurveFitter rather than having these oddball variables to kludge in quirkiness 
    316316            curveFitData.setTransEndIndex(fitStop);             
    317317            curveFitData.setChiSquareTarget(chiSqTarget); 
     
    458458 
    459459    /** 
    460      * Calculates the start index to use for a triple integral/RLD estimate 
    461      * fit before a LMA fit. 
    462      *  
    463      * Based on expParameterEstimation from TRFitting.c. 
    464      *  
    465      * @param trans 
    466      * @param transFitStartIndex 
    467      * @param transEndIndex 
    468      * @return  
    469      */ 
    470     public static int getEstimateStartIndex(double[] trans, int transFitStartIndex, int transEndIndex) { 
    471         System.out.println("transFitStartIndex is " + transFitStartIndex + " transEndIndex is " + transEndIndex); 
    472         System.out.println("finMax is " + findMax(trans, transFitStartIndex, transEndIndex)); 
    473         int transEstimateStartIndex = /*transFitStartIndex +*/ findMax(trans, transFitStartIndex, transEndIndex); 
    474         return transEstimateStartIndex; 
    475     } 
    476  
    477     /** 
    478460     * "Get initial estimates for the params that go forward to Marquardt". 
    479461     * (Based on expParameterEstimation from TRfitting.c.) 
  • trunk/projects/slim-plugin/src/main/java/loci/slim/ui/ExcitationPanel.java

    r7930 r7936  
    108108        this.setVisible(false); 
    109109    } 
     110     
     111    public double[] getRawValues() { 
     112        return _excitation.getValues(); 
     113    } 
    110114 
    111115    /** 
Note: See TracChangeset for help on using the changeset viewer.