Changeset 3960


Ignore:
Timestamp:
04/20/08 14:15:10 (12 years ago)
Author:
melissa
Message:

Added option to swap dimension labels.

Location:
trunk/loci/plugins
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/loci/plugins/Importer.java

    r3926 r3960  
    132132    boolean specifyRanges = options.isSpecifyRanges(); 
    133133    boolean cropOnImport = options.doCrop(); 
     134    boolean swapDimensions = options.isSwapDimensions(); 
    134135 
    135136    // -- Step 4: analyze and read from data source -- 
     
    161162 
    162163      if (groupFiles) r = new FileStitcher(r, true); 
    163       r = new ChannelSeparator(r); 
     164      r = new DimensionSwapper(new ChannelSeparator(r)); 
    164165      r.setId(id); 
    165166 
     
    249250      if (options.openAllSeries()) Arrays.fill(series, true); 
    250251 
    251       // -- Step 4c: prompt for the range of planes to import, if necessary -- 
     252      // -- Step 4c: prompt for dimension swapping parameters, if necessary -- 
     253 
     254      if (swapDimensions) { 
     255        options.promptSwap((DimensionSwapper) r, series); 
     256 
     257        for (int i=0; i<seriesCount; i++) { 
     258          r.setSeries(i); 
     259          num[i] = r.getImageCount(); 
     260          sizeC[i] = r.getEffectiveSizeC(); 
     261          sizeZ[i] = r.getSizeZ(); 
     262          sizeT[i] = r.getSizeT(); 
     263          certain[i] = r.isOrderCertain(); 
     264          cBegin[i] = zBegin[i] = tBegin[i] = 0; 
     265          cEnd[i] = sizeC[i] - 1; 
     266          zEnd[i] = sizeZ[i] - 1; 
     267          tEnd[i] = sizeT[i] - 1; 
     268          cStep[i] = zStep[i] = tStep[i] = 1; 
     269        } 
     270      } 
     271 
     272      // -- Step 4d: prompt for the range of planes to import, if necessary -- 
    252273 
    253274      if (specifyRanges) { 
     
    330351      } 
    331352 
    332       // -- Step 4e: read pixel data -- 
     353      // -- Step 4f: read pixel data -- 
    333354 
    334355      IJ.showStatus("Reading " + currentFile); 
  • trunk/loci/plugins/ImporterOptions.java

    r3927 r3960  
    115115  public static final String PREF_FIRST = "bioformats.firstTime"; 
    116116  public static final String PREF_THUMBNAIL = "bioformats.forceThumbnails"; 
     117  public static final String PREF_SWAP = "bioformats.swapDimensions"; 
    117118 
    118119  // labels for user dialog; when trimmed these double as argument & macro keys 
     
    135136  public static final String LABEL_VIRTUAL = "Use_virtual_stack"; 
    136137  public static final String LABEL_ALL_SERIES = "Open_all_series"; 
     138  public static final String LABEL_SWAP = "Swap_dimensions"; 
    137139 
    138140  public static final String LABEL_MERGE_OPTION = "Merging Options"; 
     
    161163  private Checkbox allSeriesBox; 
    162164  private Checkbox cropBox; 
     165  private Checkbox swapBox; 
    163166 
    164167  // -- Fields - core options -- 
     
    180183  private boolean virtual; 
    181184  private boolean openAllSeries; 
     185  private boolean swapDimensions; 
    182186 
    183187  private String mergeOption; 
     
    216220  public boolean openAllSeries() { return openAllSeries; } 
    217221  public boolean doCrop() { return crop; } 
     222  public boolean isSwapDimensions() { return swapDimensions; } 
    218223 
    219224  public boolean isViewNone() { return VIEW_NONE.equals(stackFormat); } 
     
    258263  public void setOpenAllSeries(boolean b) { openAllSeries = b; } 
    259264  public void setCrop(boolean b) { crop = b; } 
     265  public void setSwapDimensions(boolean b) { swapDimensions = b; } 
    260266 
    261267  /** Loads default option values from IJ_Prefs.txt. */ 
     
    276282    virtual = Prefs.get(PREF_VIRTUAL, false); 
    277283    openAllSeries = Prefs.get(PREF_ALL_SERIES, false); 
     284    swapDimensions = Prefs.get(PREF_SWAP, false); 
    278285 
    279286    mergeOption = Prefs.get(PREF_MERGE_OPTION, MERGE_DEFAULT); 
     
    302309    Prefs.set(PREF_VIRTUAL, virtual); 
    303310    Prefs.set(PREF_ALL_SERIES, openAllSeries); 
     311    Prefs.set(PREF_SWAP, swapDimensions); 
    304312 
    305313    Prefs.set(PREF_MERGE_OPTION, mergeOption); 
     
    351359      virtual = getMacroValue(arg, LABEL_VIRTUAL, virtual); 
    352360      openAllSeries = getMacroValue(arg, LABEL_ALL_SERIES, openAllSeries); 
     361      swapDimensions = getMacroValue(arg, LABEL_SWAP, swapDimensions); 
    353362 
    354363      mergeOption = Macro.getValue(arg, LABEL_MERGE_OPTION, mergeOption); 
     
    550559    gd.addCheckbox(LABEL_VIRTUAL, virtual); 
    551560    gd.addCheckbox(LABEL_ALL_SERIES, openAllSeries); 
     561    gd.addCheckbox(LABEL_SWAP, swapDimensions); 
    552562 
    553563    // extract GUI components from dialog and add listeners 
     
    575585      virtualBox = (Checkbox) boxes.get(11); 
    576586      allSeriesBox = (Checkbox) boxes.get(12); 
     587      swapBox = (Checkbox) boxes.get(13); 
    577588      for (int i=0; i<boxes.size(); i++) { 
    578589        ((Checkbox) boxes.get(i)).addItemListener(this); 
     
    598609    virtual = gd.getNextBoolean(); 
    599610    openAllSeries = gd.getNextBoolean(); 
     611    swapDimensions = gd.getNextBoolean(); 
    600612 
    601613    return STATUS_OK; 
     
    883895  } 
    884896 
     897  /** Prompt for dimension swapping options. */ 
     898  public int promptSwap(DimensionSwapper r, boolean[] series) { 
     899    GenericDialog gd = new GenericDialog("Dimension swapping options"); 
     900 
     901    int oldSeries = r.getSeries(); 
     902    String[] labels = new String[] {"Z", "C", "T"}; 
     903    for (int n=0; n<r.getSeriesCount(); n++) { 
     904      if (!series[n]) continue; 
     905      r.setSeries(n); 
     906 
     907      gd.addMessage("Series " + n + ":\n"); 
     908 
     909      int[] axisSizes = new int[] {r.getSizeZ(), r.getSizeC(), r.getSizeT()}; 
     910 
     911      for (int i=0; i<labels.length; i++) { 
     912        gd.addChoice(axisSizes[i] + "_planes", labels, labels[i]); 
     913      } 
     914    } 
     915    gd.showDialog(); 
     916    if (gd.wasCanceled()) return STATUS_CANCELED; 
     917 
     918    for (int n=0; n<r.getSeriesCount(); n++) { 
     919      r.setSeries(n); 
     920      String z = gd.getNextChoice(); 
     921      String c = gd.getNextChoice(); 
     922      String t = gd.getNextChoice(); 
     923 
     924      if (z.equals(t) || z.equals(c) || c.equals(t)) { 
     925        IJ.error("Invalid swapping options - each axis can be used only once."); 
     926        return promptSwap(r, series); 
     927      } 
     928 
     929      String originalOrder = r.getDimensionOrder(); 
     930      StringBuffer sb = new StringBuffer(); 
     931      sb.append("XY"); 
     932      for (int i=2; i<originalOrder.length(); i++) { 
     933        if (originalOrder.charAt(i) == 'Z') sb.append(z); 
     934        else if (originalOrder.charAt(i) == 'C') sb.append(c); 
     935        else if (originalOrder.charAt(i) == 'T') sb.append(t); 
     936      } 
     937 
     938      r.swapDimensions(sb.toString()); 
     939    } 
     940    r.setSeries(oldSeries); 
     941 
     942    return STATUS_OK; 
     943  } 
     944 
    885945  // -- ItemListener API methods -- 
    886946 
Note: See TracChangeset for help on using the changeset viewer.