Changeset 4697


Ignore:
Timestamp:
12/14/08 11:22:46 (11 years ago)
Author:
curtis
Message:
  • Improve chi2 error only for selected region, if any.
  • Fix units for a1, a2, t1, t2 components.
Location:
trunk/components/slim-plotter/src/loci/slim
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/components/slim-plotter/src/loci/slim/SlimPlotter.java

    r4641 r4697  
    994994      double[][] fitResults = null; 
    995995      int[] fitFirst = null, fitLast = null, fitIter = null; 
    996       double[] fitA1 = null, fitT1 = null; 
    997       double[] fitA2 = null, fitT2 = null; 
     996      double[] fitA1 = null, fitB1 = null; 
     997      double[] fitA2 = null, fitB2 = null; 
    998998      double[] fitC = null, fitChi2 = null; 
    999999      if (data.allowCurveFit && doRefit) { 
     
    10051005        fitIter = new int[data.channels]; 
    10061006        fitA1 = new double[data.channels]; 
    1007         fitT1 = new double[data.channels]; 
     1007        fitB1 = new double[data.channels]; 
    10081008        fitA2 = new double[data.channels]; 
    1009         fitT2 = new double[data.channels]; 
     1009        fitB2 = new double[data.channels]; 
    10101010        fitC = new double[data.channels]; 
    10111011        fitChi2 = new double[data.channels]; 
     
    10781078          fitChi2[c] = curveFitter.getReducedChiSquaredError(); 
    10791079          fitA1[c] = results[0][0]; 
    1080           fitT1[c] = results[0][1]; 
     1080          fitB1[c] = results[0][1]; 
    10811081          if (data.numExp > 1) { 
    10821082            fitA2[c] = results[1][0]; 
    1083             fitT2[c] = results[1][1]; 
     1083            fitB2[c] = results[1][1]; 
    10841084          } 
    10851085          fitC[c] = fitResults[c][2 * data.numExp]; 
     
    11641164      // CTR TEMP - this is crap; refactor to MVC 
    11651165      int activeC = twoDPane.getActiveC(); 
    1166       a1Param.setText("" + fitA1[activeC]); 
    1167       t1Param.setText("" + fitT1[activeC]); 
    1168       a2Param.setText("" + fitA2[activeC]); 
    1169       t2Param.setText("" + fitT2[activeC]); 
     1166      double aTotal = fitA1[activeC] + fitA2[activeC]; 
     1167      double a1 = 100 * fitA1[activeC] / aTotal; 
     1168      double a2 = 100 * fitA2[activeC] / aTotal; 
     1169      a1Param.setText(a1 + "%"); 
     1170      a2Param.setText(a2 + "%"); 
     1171      double b1 = fitB1[activeC]; 
     1172      double b2 = fitB2[activeC]; 
     1173      float t1 = b1 > 0 ? data.binsToPico((float) (1 / b1)) : Float.NaN; 
     1174      float t2 = b2 > 0 ? data.binsToPico((float) (1 / b2)) : Float.NaN; 
     1175      t1Param.setText("" + t1); 
     1176      t2Param.setText("" + t2); 
    11701177      cParam.setText("" + fitC[activeC]); 
    11711178      chi2.setText("" + fitChi2[activeC]); 
  • trunk/components/slim-plotter/src/loci/slim/TwoDPane.java

    r4641 r4697  
    509509            doCursor(pixelToCursor(iPlot, e.getX(), e.getY()), false, false); 
    510510            iPlot.reAutoScale(); 
     511 
     512            // update renderer to improve entire image 
     513            for (int c=0; c<curveRenderers.length; c++) { 
     514              curveRenderers[c].setMask(null); 
     515            } 
    511516          } 
    512517          else { 
     
    529534              (data.width * data.height) / 1000.0; 
    530535            slim.plotRegion(true, true, true); 
     536 
     537            // update renderer to improve only selected region 
     538            for (int c=0; c<curveRenderers.length; c++) { 
     539              curveRenderers[c].setMask(roiMask); 
     540            } 
    531541          } 
    532542        } 
  • trunk/components/slim-plotter/src/loci/slim/fit/BurnInRenderer.java

    r4640 r4697  
    3737 * 
    3838 * @author Eric Kjellman egkjellman at wisc.edu 
     39 * @author Curtis Rueden ctrueden at wisc.edu 
    3940 */ 
    4041public class BurnInRenderer extends CurveRenderer { 
     
    5051  protected int currentDim; 
    5152  protected double[][] image; 
     53  protected boolean[][] mask; 
     54  protected int maskCount; 
    5255  protected int maxDim; 
    5356  private boolean estimated; 
     
    8891    stalled = new boolean[maxDim][maxDim]; 
    8992    stallCount = 0; 
     93    setMask(null); 
    9094  } 
    9195 
     
    215219          for (int y = 0; y < maxDim; y++) { 
    216220            totalVal += rcseCache[y][x]; 
    217             if (!stalled[y][x] && rcseCache[y][x] > worstVal) { 
     221            if ((mask == null || mask[y][x]) && !stalled[y][x] && 
     222              rcseCache[y][x] > worstVal) 
     223            { 
    218224              worstVal = rcseCache[y][x]; 
    219225              worstX = x; 
     
    261267          stalled[currentY][currentX] = true; 
    262268          stallCount++; 
    263           if (stallCount == maxDim * maxDim) { 
     269          if (stallCount >= maskCount) { 
    264270            // every pixel is stalled; retry everything 
    265271            for (int y=0; y<maxDim; y++) Arrays.fill(stalled[y], false); 
     
    283289  } 
    284290 
     291  public void setMask(boolean[][] mask) { 
     292    if (mask == null) { 
     293      this.mask = null; 
     294      maskCount = maxDim * maxDim; 
     295    } 
     296    else { 
     297      if (mask.length < maxDim) { 
     298        throw new IllegalArgumentException("Invalid mask: mask.length=" + 
     299          mask.length + ", maxDim=" + maxDim); 
     300      } 
     301      int count = 0; 
     302      for (int i=0; i<maxDim; i++) { 
     303        if (mask[i].length < maxDim) { 
     304          throw new IllegalArgumentException("Invalid mask: mask[" + i + 
     305            "].length=" + mask[i].length + ", maxDim=" + maxDim); 
     306        } 
     307        for (int j=0; j<maxDim; j++) if (mask[i][j]) count++; 
     308      } 
     309      this.mask = mask; 
     310      maskCount = count; 
     311    } 
     312    // recount stalled pixels 
     313    int count = 0; 
     314    for (int y=0; y<maxDim; y++) { 
     315      Arrays.fill(stalled[y], false); 
     316      for (int x=0; x<maxDim; x++) { 
     317        if (stalled[y][x]) count++; 
     318      } 
     319    } 
     320    stallCount = count; 
     321  } 
     322 
     323  public boolean[][] getMask() { 
     324    return mask; 
     325  } 
     326 
    285327  public int getImageX() { 
    286328    return (currentX * (maxDim/currentDim)) + ((maxDim/currentDim) / 2); 
  • trunk/components/slim-plotter/src/loci/slim/fit/CurveRenderer.java

    r4481 r4697  
    119119  } 
    120120 
     121  public abstract void setMask(boolean[][] mask); 
     122 
     123  public abstract boolean[][] getMask(); 
     124 
    121125  public abstract int getImageX(); 
    122126 
  • trunk/components/slim-plotter/src/loci/slim/fit/ICurveRenderer.java

    r4481 r4697  
    6868  void setComponentCount(int numExp); 
    6969 
     70  void setMask(boolean[][] mask); 
     71 
     72  boolean[][] getMask(); 
     73 
    7074  int getImageX(); 
    7175 
  • trunk/components/slim-plotter/src/loci/slim/fit/RendererSwitcher.java

    r4481 r4697  
    142142  } 
    143143 
     144  public void setMask(boolean[][] mask) { 
     145    for (int i=0; i<renderers.length; i++) { 
     146      renderers[c].setMask(mask); 
     147    } 
     148  } 
     149 
     150  public boolean[][] getMask() { 
     151    return renderers[c].getMask(); 
     152  } 
     153 
    144154  public int getImageX() { 
    145155    return renderers[c].getImageX(); 
Note: See TracChangeset for help on using the changeset viewer.