Changeset 4317


Ignore:
Timestamp:
08/19/08 11:01:47 (12 years ago)
Author:
melissa
Message:

Data browser caching now (mostly) works. Still need to add an options window, and enable channel merging/colorizing.

Location:
trunk/loci
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/loci/formats/gui/CacheIndicator.java

    r4175 r4317  
    7878  public void paintComponent(Graphics g) { 
    7979//    super.paintComponent(g); 
     80 
    8081    g.setColor(Color.BLACK); 
    8182    int xStart = lPad, width = getWidth() - lPad - rPad; 
     
    8788    if (cacheLength == 0) return; 
    8889 
    89     int pixelsPerIndex = (width - 2) / (cacheLength + 1); 
     90    int pixelsPerIndex = (width - 2) / cacheLength; 
    9091    int remainder = (width - 2) - (pixelsPerIndex * cacheLength); 
    9192 
  • trunk/loci/plugins/BFVirtualStack.java

    r4311 r4317  
    8686 
    8787    // set up cache 
    88     int[] len = new int[] {r.getSizeZ(), r.getEffectiveSizeC(), r.getSizeT()}; 
    89     cache = new Cache(new CrosshairStrategy(len), 
    90       new ImageProcessorSource(this), false); 
     88    int[] len = new int[] {r.getEffectiveSizeC(), r.getSizeZ(), r.getSizeT()}; 
     89    CacheStrategy strategy = new CrosshairStrategy(len); 
     90 
     91    // set default ranges 
     92 
     93    strategy.setRange((int) Math.min(r.getSizeZ(), 1), 0); 
     94    strategy.setRange((int) Math.min(r.getSizeC(), 1), 1); 
     95    strategy.setRange((int) Math.min(r.getSizeT(), 1), 2); 
     96    cache = new Cache(strategy, new ImageProcessorSource(r), true); 
     97 
    9198    methodStacks = new Vector[r.getImageCount()]; 
    9299    for (int i=0; i<methodStacks.length; i++) { 
     
    123130    } 
    124131    int[] pos = reader.getZCTCoords(n - 1); 
     132    int z = pos[0]; 
     133    pos[0] = pos[1]; 
     134    pos[1] = z; 
    125135    ImageProcessor ip = null; 
    126136 
    127137    try { 
    128138      ip = (ImageProcessor) cache.getObject(pos); 
     139      cache.setCurrentPos(pos); 
    129140    } 
    130141    catch (CacheException exc) { 
     
    134145    // cache missed 
    135146    try { 
    136       // CTR TODO - fix this 
    137147      if (ip == null) { 
    138148        ip = Util.openProcessors(reader, n - 1)[0]; 
    139149      } 
    140 //      int index = FormatTools.getReorderedIndex(reader, stackOrder, n - 1); 
    141 //      if (merge <= 1) return Util.openProcessor(reader, index); 
    142 //      else { 
    143 //        ImageProcessor[] p = new ImageProcessor[merge]; 
    144 //        int[] zct = FormatTools.getZCTCoords(reader, index * merge); 
    145 //        for (int q=0; q<merge; q++) { 
    146 //          p[q] = Util.openProcessor(reader, FormatTools.getIndex(reader, 
    147 //            zct[0], zct[1] + q, zct[2])); 
    148 //        } 
    149 //        return Util.makeRGB(p).getProcessor(); 
    150 //      } 
    151150    } 
    152151    catch (FormatException exc) { 
  • trunk/loci/plugins/DataBrowser.java

    r4265 r4317  
    5454 * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/loci/plugins/DataBrowser.java">SVN</a></dd></dl> 
    5555 */ 
    56 public class DataBrowser extends StackWindow 
    57   implements ActionListener, ChangeListener, ItemListener 
    58 { 
     56public class DataBrowser extends StackWindow implements ActionListener { 
    5957 
    6058  // -- Fields -- 
    6159 
    6260  protected JSpinner fpsSpin; 
    63   protected Checkbox cBox; 
    64   protected JSpinner cSpin; 
    6561  protected Button animate, options, metadata; 
    6662  protected boolean anim = false; 
     
    115111    Scrollbar tSlider = frameSelector == null ? 
    116112      makeDummySlider() : frameSelector; 
     113    Scrollbar cSlider = channelSelector == null ? 
     114      makeDummySlider() : channelSelector; 
    117115 
    118116    Panel zPanel = makeHeavyPanel(zSlider); 
    119117    Panel tPanel = makeHeavyPanel(tSlider); 
     118    Panel cPanel = makeHeavyPanel(cSlider); 
    120119 
    121120    fpsSpin = new JSpinner(new SpinnerNumberModel(10, 1, 99, 1)); 
     
    131130      BFVirtualStack bfvs = (BFVirtualStack) stack; 
    132131      Cache cache = bfvs.getCache(); 
    133       CacheIndicator zCache = new CacheIndicator(cache, 0, zSlider, 10, 20); 
     132      CacheIndicator zCache = new CacheIndicator(cache, 1, zSlider, 10, 20); 
    134133      zPanel.add(zCache, BorderLayout.SOUTH); 
    135       CacheIndicator tCache = new CacheIndicator(cache, 1, tSlider, 10, 20); 
     134      CacheIndicator tCache = new CacheIndicator(cache, 2, tSlider, 10, 20); 
    136135      tPanel.add(tCache, BorderLayout.SOUTH); 
     136      CacheIndicator cCache = new CacheIndicator(cache, 0, cSlider, 10, 20); 
     137      cPanel.add(cCache, BorderLayout.SOUTH); 
    137138    } 
    138139 
     
    145146    } 
    146147 
    147     int sizeC = channelSelector == null ? 1 : channelSelector.getMaximum() - 1; 
    148     Component cComp; 
    149     if (sizeC < 3) { 
    150       cBox = new Checkbox("Transmitted", sizeC == 2); 
    151       cBox.addItemListener(this); 
    152       if (sizeC != 2) cBox.setEnabled(false); 
    153       cComp = cBox; 
    154     } 
    155     else { 
    156       cSpin = new JSpinner(new SpinnerNumberModel(1, 1, sizeC, 1)); 
    157       cSpin.addChangeListener(this); 
    158       cComp = makeHeavyPanel(cSpin); 
    159     } 
    160  
    161148    options = new Button("Options"); 
    162149    options.addActionListener(this); 
     
    177164 
    178165    controls.add(cLabel, cc.xy(2, 6)); 
    179     controls.add(cComp, cc.xy(4, 6)); 
     166    controls.add(cPanel, cc.xy(4, 6)); 
    180167    controls.add(options, cc.xy(6, 6)); 
    181168    controls.add(metadata, cc.xy(8, 6)); 
     
    317304  } 
    318305 
    319   // -- ChangeListener API methods -- 
    320  
    321   public void stateChanged(ChangeEvent e) { 
    322     Object src = e.getSource(); 
    323     if (src == cSpin) { 
    324       int c = ((Number) cSpin.getValue()).intValue(); 
    325       int z = imp.getSlice(); 
    326       int t = imp.getFrame(); 
    327       setPosition(c, z, t); 
    328     } 
    329   } 
    330  
    331   // -- ItemListener API methods -- 
    332  
    333   public void itemStateChanged(ItemEvent e) { 
    334     Object src = e.getSource(); 
    335     if (src == cBox) { 
    336       int c = cBox.getState() ? 1 : 2; 
    337       int z = imp.getSlice(); 
    338       int t = imp.getFrame(); 
    339       setPosition(c, z, t); 
    340     } 
    341   } 
    342  
    343306  // -- Helper methods -- 
    344307 
  • trunk/loci/plugins/ImageProcessorSource.java

    r4265 r4317  
    2828import ij.ImageStack; 
    2929import ij.process.ImageProcessor; 
     30import java.io.IOException; 
     31import loci.formats.FormatException; 
     32import loci.formats.IFormatReader; 
    3033import loci.formats.cache.CacheException; 
    3134import loci.formats.cache.ICacheSource; 
    3235 
    3336/** 
    34  * Retrieves ImageJ image processors from an ImagePlus object. 
     37 * Retrieves ImageJ image processors from an image reader. 
    3538 * 
    3639 * <dl><dt><b>Source code:</b></dt> 
     
    4245  // -- Fields -- 
    4346 
    44   /** ImageStack object from which to draw ImageProcessors. */ 
    45   protected ImageStack stack; 
     47  /** Image reader from which to draw ImageProcessors. */ 
     48  protected IFormatReader reader; 
    4649 
    4750  // -- Constructors -- 
    4851 
    49   public ImageProcessorSource(ImageStack stack) throws CacheException { 
    50     this.stack = stack; 
     52  public ImageProcessorSource(IFormatReader reader) throws CacheException { 
     53    this.reader = reader; 
    5154  } 
    5255 
     
    5457 
    5558  /* @see loci.formats.cache.ICacheSource#getObject(int) */ 
    56   public int getObjectCount() { return stack.getSize(); } 
     59  public int getObjectCount() { return reader.getImageCount(); } 
    5760 
    5861  /* @see loci.formats.cache.ICacheSource#getObject(int) */ 
    5962  public Object getObject(int index) throws CacheException { 
    60     //return new ImageProcessor[] {stack.getProcessor(index)}; 
     63    // assumes that channels are separated 
    6164    ImageProcessor ip = null; 
    62     /* 
    6365    try { 
    6466      ip = Util.openProcessors(reader, index)[0]; 
     
    7072      throw new CacheException(exc); 
    7173    } 
    72     */ 
    7374    return ip; 
    7475  } 
  • trunk/loci/plugins/Importer.java

    r4315 r4317  
    432432          stackOrder = ImporterOptions.ORDER_XYZCT; 
    433433        } 
    434         if (options.isViewImage5D() || 
    435           options.isViewHyperstack() || options.isViewBrowser()) 
     434        if (options.isViewImage5D() || options.isViewHyperstack() || 
     435          options.isViewBrowser()) 
    436436        { 
    437437          stackOrder = ImporterOptions.ORDER_XYCZT; 
    438438        } 
     439 
     440        ((DimensionSwapper) r).setOutputOrder(stackOrder); 
    439441 
    440442        store.setPixelsDimensionOrder(stackOrder, i, 0); 
     
    462464            //ru.setVar("stackOrder", stackOrder); 
    463465            //ru.setVar("merge", merge); 
    464             stackB = (ImageStack) ru.exec( 
    465               "stackB = new BFVirtualStack(id, r)"); 
     466            stackB = (ImageStack) ru.exec("stackB = new BFVirtualStack(id, r)"); 
    466467            for (int j=0; j<num[i]; j++) { 
    467468              String label = constructSliceLabel(j, r, 
     
    491492            IJ.showProgress((double) q++ / total); 
    492493 
    493             int ndx = FormatTools.getReorderedIndex(r, stackOrder, j); 
     494            int ndx = j; 
     495            //int ndx = FormatTools.getReorderedIndex(r, stackOrder, j); 
    494496 
    495497            String label = constructSliceLabel(ndx, r, retrieve, i, 
     
    695697    if (!concatenate && mergeChannels) imp.show(); 
    696698 
    697     if (mergeChannels && options.isWindowless()) { 
    698       IJ.runPlugIn("loci.plugins.Colorizer", "stack_order=" + stackOrder + 
    699         " merge=true merge_option=[" + options.getMergeOption() + "] " + 
    700         "hyper_stack=" + options.isViewHyperstack() + " "); 
    701     } 
    702     else if (mergeChannels) { 
    703       IJ.runPlugIn("loci.plugins.Colorizer", "stack_order=" + stackOrder + 
    704         " merge=true hyper_stack=" + options.isViewHyperstack() + " "); 
     699    if (!options.isViewBrowser()) { 
     700      if (mergeChannels && options.isWindowless()) { 
     701        IJ.runPlugIn("loci.plugins.Colorizer", "stack_order=" + stackOrder + 
     702          " merge=true merge_option=[" + options.getMergeOption() + "] " + 
     703          "hyper_stack=" + options.isViewHyperstack() + " "); 
     704      } 
     705      else if (mergeChannels) { 
     706        IJ.runPlugIn("loci.plugins.Colorizer", "stack_order=" + stackOrder + 
     707          " merge=true hyper_stack=" + options.isViewHyperstack() + " "); 
     708      } 
    705709    } 
    706710 
     
    759763        if (options.isViewBrowser()) new DataBrowser(imp); 
    760764        else imp.show(); 
    761         if (splitC || splitZ || splitT) { 
     765        if ((splitC || splitZ || splitT) && !options.isViewBrowser()) { 
    762766          IJ.runPlugIn("loci.plugins.Slicer", "slice_z=" + splitZ + 
    763767            " slice_c=" + splitC + " slice_t=" + splitT + 
     
    785789          } 
    786790        } 
    787         else if (colorize) { 
     791        else if (colorize && !options.isViewBrowser()) { 
    788792          IJ.runPlugIn("loci.plugins.Colorizer", "stack_order=" + stackOrder + 
    789793            " merge=false colorize=true ndx=0 hyper_stack=" + 
  • trunk/loci/plugins/ImporterOptions.java

    r4265 r4317  
    992992      else if (s.equals(VIEW_BROWSER)) { 
    993993        orderChoice.select(ORDER_XYCZT); 
     994        virtualBox.setState(true); 
    994995        changed.add(orderChoice); 
     996        changed.add(virtualBox); 
    995997      } 
    996998      else if (s.equals(VIEW_VISBIO)) { 
     
    10101012      String s = orderChoice.getSelectedItem(); 
    10111013      String item = stackChoice.getSelectedItem(); 
    1012       if (!s.equals(ORDER_XYCZT) && 
    1013         (item.equals(VIEW_HYPERSTACK) || item.equals(VIEW_BROWSER))) 
     1014      if (!s.equals(ORDER_XYCZT) && (item.equals(VIEW_HYPERSTACK) || 
     1015        item.equals(VIEW_BROWSER))) 
    10141016      { 
    10151017        stackChoice.select(VIEW_STANDARD); 
Note: See TracChangeset for help on using the changeset viewer.