Changeset 7044


Ignore:
Timestamp:
10/07/10 17:28:56 (9 years ago)
Author:
curtis
Message:

Backport latest Bio-Formats trunk to Maven branch.

Location:
branches/maven/projects/bio-formats/src/main
Files:
276 edited
6 copied

Legend:

Unmodified
Added
Removed
  • branches/maven/projects/bio-formats/src/main/java/loci/formats

  • branches/maven/projects/bio-formats/src/main/java/loci/formats/AxisGuesser.java

    r6026 r7044  
    3838 * 
    3939 * <dl><dt><b>Source code:</b></dt> 
    40  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/AxisGuesser.java">Trac</a>, 
    41  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/AxisGuesser.java">SVN</a></dd></dl> 
     40 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/AxisGuesser.java">Trac</a>, 
     41 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/AxisGuesser.java">SVN</a></dd></dl> 
    4242 * 
    4343 * @author Curtis Rueden ctrueden at wisc.edu 
     
    307307  } 
    308308 
     309  // -- Static API methods -- 
     310 
     311  /** Returns a best guess of the given label's axis type. */ 
     312  public static int getAxisType(String label) { 
     313    String lowerLabel = label.toLowerCase(); 
     314    for (String p : Z) { 
     315      if (p.equals(lowerLabel) || lowerLabel.endsWith(p)) return Z_AXIS; 
     316    } 
     317    for (String p : C) { 
     318      if (p.equals(lowerLabel) || lowerLabel.endsWith(p)) return C_AXIS; 
     319    } 
     320    for (String p : T) { 
     321      if (p.equals(lowerLabel) || lowerLabel.endsWith(p)) return T_AXIS; 
     322    } 
     323    for (String p : S) { 
     324      if (p.equals(lowerLabel) || lowerLabel.endsWith(p)) return S_AXIS; 
     325    } 
     326    return UNKNOWN_AXIS; 
     327  } 
     328 
    309329  // -- Main method -- 
    310330 
     
    314334      new Location(System.getProperty("user.dir")).listFiles()[0] : 
    315335      new Location(args[0]); 
    316     LOGGER.debug("File = {}", file.getAbsoluteFile()); 
     336    LOGGER.info("File = {}", file.getAbsoluteFile()); 
    317337    String pat = FilePattern.findPattern(file); 
    318     if (pat == null) LOGGER.debug("No pattern found."); 
     338    if (pat == null) LOGGER.info("No pattern found."); 
    319339    else { 
    320       LOGGER.debug("Pattern = {}", pat); 
     340      LOGGER.info("Pattern = {}", pat); 
    321341      FilePattern fp = new FilePattern(pat); 
    322342      if (fp.isValid()) { 
    323         LOGGER.debug("Pattern is valid."); 
     343        LOGGER.info("Pattern is valid."); 
    324344        String id = fp.getFiles()[0]; 
    325345        if (!new Location(id).exists()) { 
    326           LOGGER.debug("File '{}' does not exist.", id); 
     346          LOGGER.info("File '{}' does not exist.", id); 
    327347        } 
    328348        else { 
    329349          // read dimensional information from first file 
    330           LOGGER.debug("Reading first file "); 
     350          LOGGER.info("Reading first file "); 
    331351          ImageReader reader = new ImageReader(); 
    332352          reader.setId(id); 
     
    337357          boolean certain = reader.isOrderCertain(); 
    338358          reader.close(); 
    339           LOGGER.debug("[done]"); 
    340           LOGGER.debug("\tdimOrder = {} ({})", 
     359          LOGGER.info("[done]"); 
     360          LOGGER.info("\tdimOrder = {} ({})", 
    341361            dimOrder, certain ? "certain" : "uncertain"); 
    342           LOGGER.debug("\tsizeZ = {}", sizeZ); 
    343           LOGGER.debug("\tsizeT = {}", sizeT); 
    344           LOGGER.debug("\tsizeC = {}", sizeC); 
     362          LOGGER.info("\tsizeZ = {}", sizeZ); 
     363          LOGGER.info("\tsizeT = {}", sizeT); 
     364          LOGGER.info("\tsizeC = {}", sizeC); 
    345365 
    346366          // guess axes 
     
    354374          String newOrder = ag.getAdjustedOrder(); 
    355375          boolean isCertain = ag.isCertain(); 
    356           LOGGER.debug("Axis types:"); 
     376          LOGGER.info("Axis types:"); 
    357377          for (int i=0; i<blocks.length; i++) { 
    358378            String axis; 
     
    370390                axis = "?"; 
    371391            } 
    372             LOGGER.debug("\t{}\t{} (prefix = {})", 
     392            LOGGER.info("\t{}\t{} (prefix = {})", 
    373393              new Object[] {blocks[i], axis, prefixes[i]}); 
    374394          } 
    375395          if (!dimOrder.equals(newOrder)) { 
    376             LOGGER.debug("Adjusted dimension order = {} ({})", 
     396            LOGGER.info("Adjusted dimension order = {} ({})", 
    377397              newOrder, isCertain ? "certain" : "uncertain"); 
    378398          } 
    379399        } 
    380400      } 
    381       else LOGGER.debug("Pattern is invalid: {}", fp.getErrorMessage()); 
     401      else LOGGER.info("Pattern is invalid: {}", fp.getErrorMessage()); 
    382402    } 
    383403  } 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/ChannelFiller.java

    r6679 r7044  
    3636 * 
    3737 * <dl><dt><b>Source code:</b></dt> 
    38  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/ChannelFiller.java">Trac</a>, 
    39  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/ChannelFiller.java">SVN</a></dd></dl> 
     38 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/ChannelFiller.java">Trac</a>, 
     39 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/ChannelFiller.java">SVN</a></dd></dl> 
    4040 */ 
    4141public class ChannelFiller extends ReaderWrapper { 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/ChannelMerger.java

    r5191 r7044  
    3030 * 
    3131 * <dl><dt><b>Source code:</b></dt> 
    32  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/ChannelMerger.java">Trac</a>, 
    33  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/ChannelMerger.java">SVN</a></dd></dl> 
     32 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/ChannelMerger.java">Trac</a>, 
     33 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/ChannelMerger.java">SVN</a></dd></dl> 
    3434 */ 
    3535public class ChannelMerger extends ReaderWrapper { 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/ChannelSeparator.java

    r6607 r7044  
    3030 * 
    3131 * <dl><dt><b>Source code:</b></dt> 
    32  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/ChannelSeparator.java">Trac</a>, 
    33  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/ChannelSeparator.java">SVN</a></dd></dl> 
     32 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/ChannelSeparator.java">Trac</a>, 
     33 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/ChannelSeparator.java">SVN</a></dd></dl> 
    3434 */ 
    3535public class ChannelSeparator extends ReaderWrapper { 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/ClassList.java

    r6333 r7044  
    3939 * 
    4040 * <dl><dt><b>Source code:</b></dt> 
    41  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/ClassList.java">Trac</a>, 
    42  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/ClassList.java">SVN</a></dd></dl> 
     41 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/ClassList.java">Trac</a>, 
     42 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/ClassList.java">SVN</a></dd></dl> 
    4343 * 
    4444 * @author Curtis Rueden ctrueden at wisc.edu 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/CoreMetadata.java

    r6473 r7044  
    3030 * 
    3131 * <dl><dt><b>Source code:</b></dt> 
    32  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/CoreMetadata.java">Trac</a>, 
    33  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/CoreMetadata.java">SVN</a></dd></dl> 
     32 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/CoreMetadata.java">Trac</a>, 
     33 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/CoreMetadata.java">SVN</a></dd></dl> 
    3434 */ 
    3535public class CoreMetadata { 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/DelegateReader.java

    r6128 r7044  
    3737 * 
    3838 * <dl><dt><b>Source code:</b></dt> 
    39  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/DelegateReader.java">Trac</a>, 
    40  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/DelegateReader.java">SVN</a></dd></dl> 
     39 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/DelegateReader.java">Trac</a>, 
     40 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/DelegateReader.java">SVN</a></dd></dl> 
    4141 */ 
    4242public abstract class DelegateReader extends FormatReader { 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/DimensionSwapper.java

    r6757 r7044  
    3434 * 
    3535 * <dl><dt><b>Source code:</b></dt> 
    36  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/DimensionSwapper.java">Trac</a>, 
    37  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/DimensionSwapper.java">SVN</a></dd></dl> 
     36 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/DimensionSwapper.java">Trac</a>, 
     37 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/DimensionSwapper.java">SVN</a></dd></dl> 
    3838 */ 
    3939public class DimensionSwapper extends ReaderWrapper { 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/FileInfo.java

    r6141 r7044  
    2828 * 
    2929 * <dl><dt><b>Source code:</b></dt> 
    30  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/FileInfo.java">Trac</a>, 
    31  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/FileInfo.java">SVN</a></dd></dl> 
     30 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/FileInfo.java">Trac</a>, 
     31 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/FileInfo.java">SVN</a></dd></dl> 
    3232 */ 
    3333public class FileInfo { 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/FilePattern.java

    r6263 r7044  
    3030import java.util.List; 
    3131 
     32import loci.common.DataTools; 
    3233import loci.common.Location; 
    3334 
     
    4849 * 
    4950 * <dl><dt><b>Source code:</b></dt> 
    50  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/FilePattern.java">Trac</a>, 
    51  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/FilePattern.java">SVN</a></dd></dl> 
     51 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/FilePattern.java">Trac</a>, 
     52 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/FilePattern.java">SVN</a></dd></dl> 
    5253 * 
    5354 * @author Curtis Rueden ctrueden at wisc.edu 
     
    349350   */ 
    350351  public static String findPattern(String name, String dir, String[] nameList) { 
     352    return findPattern(name, dir, nameList, null); 
     353  } 
     354 
     355  /** 
     356   * Identifies the group pattern from a given file within that group. 
     357   * @param name The filename to use as a template for the match. 
     358   * @param dir The directory prefix to use for matching files. 
     359   * @param nameList The names through which to search for matching files. 
     360   * @param excludeAxes The list of axis types which should be excluded from the 
     361   *  pattern. 
     362   */ 
     363  public static String findPattern(String name, String dir, String[] nameList, 
     364    int[] excludeAxes) 
     365  { 
     366    if (excludeAxes == null) excludeAxes = new int[0]; 
     367 
    351368    if (dir == null) dir = ""; // current directory 
    352369    else if (!dir.equals("") && !dir.endsWith(File.separator)) { 
     
    390407    for (int i=0; i<q; i++) { 
    391408      int last = i > 0 ? endList[i - 1] : 0; 
    392       sb.append(name.substring(last, indexList[i])); 
     409      String prefix = name.substring(last, indexList[i]); 
     410      int axisType = AxisGuesser.getAxisType(prefix); 
     411      if (DataTools.containsValue(excludeAxes, axisType)) { 
     412        sb.append(name.substring(last, endList[i])); 
     413        continue; 
     414      } 
     415 
     416      sb.append(prefix); 
    393417      String pre = name.substring(0, indexList[i]); 
    394418      String post = name.substring(endList[i]); 
     
    403427      } 
    404428      boolean fix = true; 
    405       for (int j=0; j<list.length; j++) { 
    406         if (list[j].length() != len) { 
     429      for (String s : list) { 
     430        if (s.length() != len) { 
    407431          fix = false; 
    408432          break; 
     
    419443          int jx = indexList[i] + j; 
    420444          char c = name.charAt(jx); 
    421           for (int k=0; k<list.length; k++) { 
    422             if (list[k].charAt(jx) != c) { 
     445          for (String s : list) { 
     446            if (s.charAt(jx) != c) { 
    423447              same[j] = false; 
    424448              break; 
     
    464488    } 
    465489    sb.append(q > 0 ? name.substring(endList[q - 1]) : name); 
    466     String pat = sb.toString(); 
    467  
    468     // NB: Due to variations in axis length, the file pattern detected can 
    469     // depend on the file name given as the basis of detection. 
    470     // 
    471     // To work around this problem, we redetect the pattern using the first 
    472     // file in the pattern if it differs from the current base file name. 
    473     // 
    474     // For details, see Trac ticket #19: 
    475     // https://skyking.microscopy.wisc.edu/trac/java/ticket/19 
    476     String first = pat.substring(dir.length()); 
    477     first = first.replaceAll("<([0-9]+)-[0-9]+(:[0-9]+)?>", "$1"); 
    478     if (!name.equals(first)) { 
    479       String pattern = findPattern(first, dir, nameList); 
    480       if (pattern != null) return pattern; 
    481     } 
    482  
    483     return pat; 
     490    return sb.toString(); 
     491  } 
     492 
     493  public static String[] findSeriesPatterns(String base) { 
     494    Location file = new Location(base).getAbsoluteFile(); 
     495    Location parent = file.getParentFile(); 
     496    String[] list = parent.list(true); 
     497    return findSeriesPatterns(base, parent.getAbsolutePath(), list); 
     498  } 
     499 
     500  public static String[] findSeriesPatterns(String base, String dir, 
     501    String[] nameList) 
     502  { 
     503    String baseSuffix = base.substring(base.lastIndexOf(File.separator) + 1); 
     504    baseSuffix = baseSuffix.substring(baseSuffix.indexOf(".") + 1); 
     505 
     506    ArrayList<String> patterns = new ArrayList<String>(); 
     507    int[] exclude = new int[] {AxisGuesser.S_AXIS}; 
     508    for (String name : nameList) { 
     509      String pattern = findPattern(name, dir, nameList, exclude); 
     510      int start = pattern.lastIndexOf(File.separator) + 1; 
     511      if (start < 0) start = 0; 
     512      String patternSuffix = pattern.substring(start); 
     513      patternSuffix = patternSuffix.substring(patternSuffix.indexOf(".") + 1); 
     514 
     515      if (!patterns.contains(pattern) && (!new Location(pattern).exists() || 
     516        base.equals(pattern)) && patternSuffix.equals(baseSuffix)) 
     517      { 
     518        patterns.add(pattern); 
     519      } 
     520    } 
     521    String[] s = patterns.toArray(new String[patterns.size()]); 
     522    Arrays.sort(s); 
     523    return s; 
    484524  } 
    485525 
     
    588628      // test file pattern detection based on the given file on disk 
    589629      Location file = new Location(args[0]); 
    590       LOGGER.debug("File = {}", file.getAbsoluteFile()); 
     630      LOGGER.info("File = {}", file.getAbsoluteFile()); 
    591631      pat = findPattern(file); 
    592632    } 
     
    609649      pat = findPattern(nameList[1], null, nameList); 
    610650    } 
    611     if (pat == null) LOGGER.debug("No pattern found."); 
     651    if (pat == null) LOGGER.info("No pattern found."); 
    612652    else { 
    613       LOGGER.debug("Pattern = {}", pat); 
     653      LOGGER.info("Pattern = {}", pat); 
    614654      FilePattern fp = new FilePattern(pat); 
    615655      if (fp.isValid()) { 
    616         LOGGER.debug("Pattern is valid."); 
    617         LOGGER.debug("Files:"); 
     656        LOGGER.info("Pattern is valid."); 
     657        LOGGER.info("Files:"); 
    618658        String[] ids = fp.getFiles(); 
    619659        for (int i=0; i<ids.length; i++) { 
    620           LOGGER.debug("  #{}: {}", i, ids[i]); 
    621         } 
    622       } 
    623       else LOGGER.debug("Pattern is invalid: {}", fp.getErrorMessage()); 
     660          LOGGER.info("  #{}: {}", i, ids[i]); 
     661        } 
     662      } 
     663      else LOGGER.info("Pattern is invalid: {}", fp.getErrorMessage()); 
    624664    } 
    625665  } 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/FileStitcher.java

    r6301 r7044  
    4949 * 
    5050 * <dl><dt><b>Source code:</b></dt> 
    51  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/FileStitcher.java">Trac</a>, 
    52  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/FileStitcher.java">SVN</a></dd></dl> 
     51 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/FileStitcher.java">Trac</a>, 
     52 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/FileStitcher.java">SVN</a></dd></dl> 
    5353 */ 
    54 public class FileStitcher implements IFormatReader { 
     54public class FileStitcher extends ReaderWrapper { 
    5555 
    5656  // -- Constants -- 
     
    6060 
    6161  // -- Fields -- 
    62  
    63   /** 
    64    * FormatReader to use as a template for constituent readers. 
    65    * 
    66    * The constituent readers must be dimension swappers so that the 
    67    * file stitcher can reorganize the dimension order as needed based on 
    68    * the result of the axis guessing algorithm. 
    69    * 
    70    * @see AxisGuesser#getAdjustedOrder() 
    71    */ 
    72   private DimensionSwapper reader; 
    7362 
    7463  /** 
     
    7867  private boolean patternIds = false; 
    7968 
    80   /** Current file pattern string. */ 
    81   private String currentId; 
    82  
    83   /** File pattern object used to build the list of files. */ 
    84   private FilePattern fp; 
    85  
    86   /** Axis guesser object used to guess which dimensional axes are which. */ 
    87   private AxisGuesser[] ag; 
    88  
    89   /** The matching files. */ 
    90   private String[][] files; 
    91  
    92   /** Used files list. Only initialized in certain cases, upon request. */ 
    93   private String[] usedFiles; 
    94  
    95   /** Reader used for each file. */ 
    96   private DimensionSwapper[][] readers; 
    97  
    98   /** Blank image bytes, for use when image counts vary between files. */ 
    99   private byte[][] blankBytes; 
    100  
    101   /** Blank thumbnail bytes, for use when image counts vary between files. */ 
    102   private byte[][] blankThumbBytes; 
    103  
    104   /** Number of images per file. */ 
    105   private int[] imagesPerFile; 
    106  
    10769  /** Dimensional axis lengths per file. */ 
    10870  private int[] sizeZ, sizeC, sizeT; 
     
    11779  private int series; 
    11880 
    119   private String[] originalOrder; 
    120  
    121   private String[] seriesBlocks; 
    122   private Vector<String[]> fileVector; 
    123   private Vector<String> seriesNames; 
    124   private boolean seriesInFile; 
    125  
    12681  private boolean noStitch; 
    12782 
    12883  private MetadataStore store; 
     84 
     85  private ExternalSeries[] externals; 
    12986 
    13087  // -- Constructors -- 
     
    176133    if (noStitch) return reader; 
    177134    int[] q = computeIndices(no); 
    178     int sno = seriesInFile ? 0 : getSeries(); 
    179135    int fno = q[0]; 
    180     IFormatReader r = readers[sno][fno]; 
    181     if (seriesInFile) r.setSeries(getSeries()); 
     136    return getReader(getSeries(), fno); 
     137  } 
     138 
     139  /** 
     140   * Gets the reader that should be used with the given series and image plane. 
     141   */ 
     142  public DimensionSwapper getReader(int series, int no) { 
     143    if (noStitch) return (DimensionSwapper) reader; 
     144    DimensionSwapper r = externals[getExternalSeries(series)].getReaders()[no]; 
     145    initReader(series, no); 
    182146    return r; 
    183147  } 
     
    202166   */ 
    203167  public int[] getAxisTypes() { 
    204     FormatTools.assertId(currentId, true, 2); 
    205     return ag[getSeries()].getAxisTypes(); 
     168    FormatTools.assertId(getCurrentFile(), true, 2); 
     169    return externals[getExternalSeries()].getAxisGuesser().getAxisTypes(); 
    206170  } 
    207171 
     
    217181   */ 
    218182  public void setAxisTypes(int[] axes) throws FormatException { 
    219     FormatTools.assertId(currentId, true, 2); 
    220     ag[getSeries()].setAxisTypes(axes); 
     183    FormatTools.assertId(getCurrentFile(), true, 2); 
     184    externals[getExternalSeries()].getAxisGuesser().setAxisTypes(axes); 
    221185    computeAxisLengths(); 
    222186  } 
     
    224188  /** Gets the file pattern object used to build the list of files. */ 
    225189  public FilePattern getFilePattern() { 
    226     FormatTools.assertId(currentId, true, 2); 
    227     return fp; 
     190    FormatTools.assertId(getCurrentFile(), true, 2); 
     191    return externals[getExternalSeries()].getFilePattern(); 
    228192  } 
    229193 
     
    233197   */ 
    234198  public AxisGuesser getAxisGuesser() { 
    235     FormatTools.assertId(currentId, true, 2); 
    236     return ag[getSeries()]; 
     199    FormatTools.assertId(getCurrentFile(), true, 2); 
     200    return externals[getExternalSeries()].getAxisGuesser(); 
     201  } 
     202 
     203  public FilePattern findPattern(String id) { 
     204    return new FilePattern(FilePattern.findPattern(id)); 
    237205  } 
    238206 
     
    241209   * stitcher. Takes both ID map entries and the patternIds flag into account. 
    242210   */ 
    243   public FilePattern findPattern(String id) { 
     211  public String[] findPatterns(String id) { 
    244212    if (!patternIds) { 
    245       // find the containing pattern 
     213      // find the containing patterns 
    246214      HashMap<String, Object> map = Location.getIdMap(); 
    247       String pattern = null; 
    248215      if (map.containsKey(id)) { 
    249216        // search ID map for pattern, rather than files on disk 
    250217        String[] idList = new String[map.size()]; 
    251218        map.keySet().toArray(idList); 
    252         pattern = FilePattern.findPattern(id, null, idList); 
     219        return FilePattern.findSeriesPatterns(id, null, idList); 
    253220      } 
    254221      else { 
    255222        // id is an unmapped file path; look to similar files on disk 
    256         pattern = FilePattern.findPattern(new Location(id)); 
    257       } 
    258       if (pattern != null) id = pattern; 
    259     } 
    260     return new FilePattern(id); 
    261   } 
    262  
    263   // -- IMetadataConfigurable API methods -- 
    264  
    265   /* (non-Javadoc) 
    266    * @see loci.formats.IMetadataConfigurable#getSupportedMetadataLevels() 
    267    */ 
    268   public Set<MetadataLevel> getSupportedMetadataLevels() { 
    269     return reader.getSupportedMetadataLevels(); 
    270   } 
    271  
    272   /* (non-Javadoc) 
    273    * @see loci.formats.IMetadataConfigurable#getMetadataOptions() 
    274    */ 
    275   public MetadataOptions getMetadataOptions() { 
    276     return reader.getMetadataOptions(); 
    277   } 
    278  
    279   /* (non-Javadoc) 
    280    * @see loci.formats.IMetadataConfigurable#setMetadataOptions(loci.formats.in.MetadataOptions) 
    281    */ 
    282   public void setMetadataOptions(MetadataOptions options) { 
    283     reader.setMetadataOptions(options); 
     223        return FilePattern.findSeriesPatterns(id); 
     224      } 
     225    } 
     226    patternIds = false; 
     227    String[] patterns = findPatterns(new FilePattern(id).getFiles()[0]); 
     228    patternIds = true; 
     229    return patterns; 
    284230  } 
    285231 
    286232  // -- IFormatReader API methods -- 
    287  
    288   /* @see IFormatReader#isThisType(String, boolean) */ 
    289   public boolean isThisType(String name, boolean open) { 
    290     return reader.isThisType(name, open); 
    291   } 
    292  
    293   /* @see IFormatReader#isThisType(byte[]) */ 
    294   public boolean isThisType(byte[] block) { 
    295     return reader.isThisType(block); 
    296   } 
    297  
    298   /* @see IFormatReader#isThisType(RandomAccessInputStream) */ 
    299   public boolean isThisType(RandomAccessInputStream stream) throws IOException { 
    300     return reader.isThisType(stream); 
    301   } 
    302233 
    303234  /* @see IFormatReader#getImageCount() */ 
    304235  public int getImageCount() { 
    305     FormatTools.assertId(currentId, true, 2); 
     236    FormatTools.assertId(getCurrentFile(), true, 2); 
    306237    return noStitch ? reader.getImageCount() : core[getSeries()].imageCount; 
    307238  } 
     
    309240  /* @see IFormatReader#isRGB() */ 
    310241  public boolean isRGB() { 
    311     FormatTools.assertId(currentId, true, 2); 
     242    FormatTools.assertId(getCurrentFile(), true, 2); 
    312243    return noStitch ? reader.isRGB() : core[getSeries()].rgb; 
    313244  } 
     
    315246  /* @see IFormatReader#getSizeX() */ 
    316247  public int getSizeX() { 
    317     FormatTools.assertId(currentId, true, 2); 
     248    FormatTools.assertId(getCurrentFile(), true, 2); 
    318249    return noStitch ? reader.getSizeX() : core[getSeries()].sizeX; 
    319250  } 
     
    321252  /* @see IFormatReader#getSizeY() */ 
    322253  public int getSizeY() { 
    323     FormatTools.assertId(currentId, true, 2); 
     254    FormatTools.assertId(getCurrentFile(), true, 2); 
    324255    return noStitch ? reader.getSizeY() : core[getSeries()].sizeY; 
    325256  } 
     
    327258  /* @see IFormatReader#getSizeZ() */ 
    328259  public int getSizeZ() { 
    329     FormatTools.assertId(currentId, true, 2); 
     260    FormatTools.assertId(getCurrentFile(), true, 2); 
    330261    return noStitch ? reader.getSizeZ() : core[getSeries()].sizeZ; 
    331262  } 
     
    333264  /* @see IFormatReader#getSizeC() */ 
    334265  public int getSizeC() { 
    335     FormatTools.assertId(currentId, true, 2); 
     266    FormatTools.assertId(getCurrentFile(), true, 2); 
    336267    return noStitch ? reader.getSizeC() : core[getSeries()].sizeC; 
    337268  } 
     
    339270  /* @see IFormatReader#getSizeT() */ 
    340271  public int getSizeT() { 
    341     FormatTools.assertId(currentId, true, 2); 
     272    FormatTools.assertId(getCurrentFile(), true, 2); 
    342273    return noStitch ? reader.getSizeT() : core[getSeries()].sizeT; 
    343274  } 
     
    345276  /* @see IFormatReader#getPixelType() */ 
    346277  public int getPixelType() { 
    347     FormatTools.assertId(currentId, true, 2); 
     278    FormatTools.assertId(getCurrentFile(), true, 2); 
    348279    return noStitch ? reader.getPixelType() : core[getSeries()].pixelType; 
    349280  } 
     
    351282  /* @see IFormatReader#getBitsPerPixel() */ 
    352283  public int getBitsPerPixel() { 
    353     FormatTools.assertId(currentId, true, 2); 
     284    FormatTools.assertId(getCurrentFile(), true, 2); 
    354285    return noStitch ? reader.getBitsPerPixel() : core[getSeries()].bitsPerPixel; 
    355   } 
    356  
    357   /* @see IFormatReader#getEffectiveSizeC() */ 
    358   public int getEffectiveSizeC() { 
    359     FormatTools.assertId(currentId, true, 2); 
    360     return getImageCount() / (getSizeZ() * getSizeT()); 
    361   } 
    362  
    363   /* @see IFormatReader#getRGBChannelCount() */ 
    364   public int getRGBChannelCount() { 
    365     FormatTools.assertId(currentId, true, 2); 
    366     return getSizeC() / getEffectiveSizeC(); 
    367286  } 
    368287 
    369288  /* @see IFormatReader#isIndexed() */ 
    370289  public boolean isIndexed() { 
    371     FormatTools.assertId(currentId, true, 2); 
     290    FormatTools.assertId(getCurrentFile(), true, 2); 
    372291    return noStitch ? reader.isIndexed() : core[getSeries()].indexed; 
    373292  } 
     
    375294  /* @see IFormatReader#isFalseColor() */ 
    376295  public boolean isFalseColor() { 
    377     FormatTools.assertId(currentId, true, 2); 
     296    FormatTools.assertId(getCurrentFile(), true, 2); 
    378297    return noStitch ? reader.isFalseColor() : core[getSeries()].falseColor; 
    379298  } 
     
    381300  /* @see IFormatReader#get8BitLookupTable() */ 
    382301  public byte[][] get8BitLookupTable() throws FormatException, IOException { 
    383     FormatTools.assertId(currentId, true, 2); 
     302    FormatTools.assertId(getCurrentFile(), true, 2); 
    384303    return noStitch ? reader.get8BitLookupTable() : 
    385       readers[seriesInFile ? 0 : getSeries()][0].get8BitLookupTable(); 
     304      getReader(getSeries(), 0).get8BitLookupTable(); 
    386305  } 
    387306 
    388307  /* @see IFormatReader#get16BitLookupTable() */ 
    389308  public short[][] get16BitLookupTable() throws FormatException, IOException { 
    390     FormatTools.assertId(currentId, true, 2); 
     309    FormatTools.assertId(getCurrentFile(), true, 2); 
    391310    return noStitch ? reader.get16BitLookupTable() : 
    392       readers[seriesInFile ? 0 : getSeries()][0].get16BitLookupTable(); 
     311      getReader(getSeries(), 0).get16BitLookupTable(); 
    393312  } 
    394313 
    395314  /* @see IFormatReader#getChannelDimLengths() */ 
    396315  public int[] getChannelDimLengths() { 
    397     FormatTools.assertId(currentId, true, 2); 
     316    FormatTools.assertId(getCurrentFile(), true, 2); 
    398317    if (noStitch) return reader.getChannelDimLengths(); 
    399318    if (core[getSeries()].cLengths == null) { 
     
    405324  /* @see IFormatReader#getChannelDimTypes() */ 
    406325  public String[] getChannelDimTypes() { 
    407     FormatTools.assertId(currentId, true, 2); 
     326    FormatTools.assertId(getCurrentFile(), true, 2); 
    408327    if (noStitch) return reader.getChannelDimTypes(); 
    409328    if (core[getSeries()].cTypes == null) { 
     
    415334  /* @see IFormatReader#getThumbSizeX() */ 
    416335  public int getThumbSizeX() { 
    417     FormatTools.assertId(currentId, true, 2); 
     336    FormatTools.assertId(getCurrentFile(), true, 2); 
    418337    return noStitch ? reader.getThumbSizeX() : 
    419       readers[seriesInFile ? 0 : getSeries()][0].getThumbSizeX(); 
     338      getReader(getSeries(), 0).getThumbSizeX(); 
    420339  } 
    421340 
    422341  /* @see IFormatReader#getThumbSizeY() */ 
    423342  public int getThumbSizeY() { 
    424     FormatTools.assertId(currentId, true, 2); 
     343    FormatTools.assertId(getCurrentFile(), true, 2); 
    425344    return noStitch ? reader.getThumbSizeY() : 
    426       readers[seriesInFile ? 0 : getSeries()][0].getThumbSizeY(); 
     345      getReader(getSeries(), 0).getThumbSizeY(); 
    427346  } 
    428347 
    429348  /* @see IFormatReader#isLittleEndian() */ 
    430349  public boolean isLittleEndian() { 
    431     FormatTools.assertId(currentId, true, 2); 
     350    FormatTools.assertId(getCurrentFile(), true, 2); 
    432351    return noStitch ? reader.isLittleEndian() : 
    433       readers[seriesInFile ? 0 : getSeries()][0].isLittleEndian(); 
     352      getReader(getSeries(), 0).isLittleEndian(); 
    434353  } 
    435354 
    436355  /* @see IFormatReader#getDimensionOrder() */ 
    437356  public String getDimensionOrder() { 
    438     FormatTools.assertId(currentId, true, 2); 
     357    FormatTools.assertId(getCurrentFile(), true, 2); 
    439358    if (noStitch) return reader.getDimensionOrder(); 
    440     return originalOrder[getSeries()]; 
     359    return core[getSeries()].dimensionOrder; 
    441360  } 
    442361 
    443362  /* @see IFormatReader#isOrderCertain() */ 
    444363  public boolean isOrderCertain() { 
    445     FormatTools.assertId(currentId, true, 2); 
     364    FormatTools.assertId(getCurrentFile(), true, 2); 
    446365    return noStitch ? reader.isOrderCertain() : core[getSeries()].orderCertain; 
    447366  } 
     
    449368  /* @see IFormatReader#isThumbnailSeries() */ 
    450369  public boolean isThumbnailSeries() { 
    451     FormatTools.assertId(currentId, true, 2); 
     370    FormatTools.assertId(getCurrentFile(), true, 2); 
    452371    return noStitch ? reader.isThumbnailSeries() : core[getSeries()].thumbnail; 
    453372  } 
     
    455374  /* @see IFormatReader#isInterleaved() */ 
    456375  public boolean isInterleaved() { 
    457     FormatTools.assertId(currentId, true, 2); 
     376    FormatTools.assertId(getCurrentFile(), true, 2); 
    458377    return noStitch ? reader.isInterleaved() : 
    459       readers[seriesInFile ? 0 : getSeries()][0].isInterleaved(); 
     378      getReader(getSeries(), 0).isInterleaved(); 
    460379  } 
    461380 
    462381  /* @see IFormatReader#isInterleaved(int) */ 
    463382  public boolean isInterleaved(int subC) { 
    464     FormatTools.assertId(currentId, true, 2); 
     383    FormatTools.assertId(getCurrentFile(), true, 2); 
    465384    return noStitch ? reader.isInterleaved(subC) : 
    466       readers[seriesInFile ? 0 : getSeries()][0].isInterleaved(subC); 
     385      getReader(getSeries(), 0).isInterleaved(subC); 
    467386  } 
    468387 
     
    483402    throws FormatException, IOException 
    484403  { 
    485     FormatTools.assertId(currentId, true, 2); 
    486     IFormatReader r = getReader(no); 
    487     int ino = getAdjustedIndex(no); 
    488     if (ino < r.getImageCount()) return r.openBytes(ino, x, y, w, h); 
    489  
    490     // return a blank image to cover for the fact that 
    491     // this file does not contain enough image planes 
    492     int sno = getSeries(); 
    493     if (blankBytes[sno] == null) { 
    494       int bytes = FormatTools.getBytesPerPixel(getPixelType()); 
    495       blankBytes[sno] = new byte[w * h * bytes * getRGBChannelCount()]; 
    496     } 
    497     return blankBytes[sno]; 
     404    int bpp = FormatTools.getBytesPerPixel(getPixelType()); 
     405    int ch = getRGBChannelCount(); 
     406    byte[] buf = new byte[w * h * ch * bpp]; 
     407    return openBytes(no, buf, x, y, w, h); 
    498408  } 
    499409 
     
    502412    throws FormatException, IOException 
    503413  { 
    504     FormatTools.assertId(currentId, true, 2); 
    505  
    506     IFormatReader r = getReader(no); 
    507     int ino = getAdjustedIndex(no); 
     414    FormatTools.assertId(getCurrentFile(), true, 2); 
     415 
     416    int[] pos = computeIndices(no); 
     417    IFormatReader r = getReader(getSeries(), pos[0]); 
     418    int ino = pos[1]; 
     419 
    508420    if (ino < r.getImageCount()) return r.openBytes(ino, buf, x, y, w, h); 
    509421 
     
    518430    throws FormatException, IOException 
    519431  { 
    520     FormatTools.assertId(currentId, true, 2); 
     432    FormatTools.assertId(getCurrentFile(), true, 2); 
    521433 
    522434    IFormatReader r = getReader(no); 
     
    529441  /* @see IFormatReader#openThumbBytes(int) */ 
    530442  public byte[] openThumbBytes(int no) throws FormatException, IOException { 
    531     FormatTools.assertId(currentId, true, 2); 
     443    FormatTools.assertId(getCurrentFile(), true, 2); 
    532444 
    533445    IFormatReader r = getReader(no); 
     
    537449    // return a blank image to cover for the fact that 
    538450    // this file does not contain enough image planes 
    539     int sno = getSeries(); 
    540     if (blankThumbBytes[sno] == null) { 
    541       int bytes = FormatTools.getBytesPerPixel(getPixelType()); 
    542       blankThumbBytes[sno] = new byte[getThumbSizeX() * getThumbSizeY() * 
    543         bytes * getRGBChannelCount()]; 
    544     } 
    545     return blankThumbBytes[sno]; 
     451    return externals[getExternalSeries()].getBlankThumbBytes(); 
     452  } 
     453 
     454  /* @see IFormatReader#close() */ 
     455  public void close() throws IOException { 
     456    close(false); 
    546457  } 
    547458 
    548459  /* @see IFormatReader#close(boolean) */ 
    549460  public void close(boolean fileOnly) throws IOException { 
    550     if (readers == null) reader.close(fileOnly); 
    551     else { 
    552       for (int i=0; i<readers.length; i++) { 
    553         for (int j=0; j<readers[i].length; j++) { 
    554           if (readers[i][j] != null) readers[i][j].close(fileOnly); 
     461    if (reader != null) reader.close(fileOnly); 
     462    if (externals != null) { 
     463      for (ExternalSeries s : externals) { 
     464        for (DimensionSwapper r : s.getReaders()) { 
     465          if (r != null) r.close(fileOnly); 
    555466        } 
    556467      } 
     
    558469    if (!fileOnly) { 
    559470      noStitch = false; 
    560       readers = null; 
    561       blankBytes = null; 
    562       currentId = null; 
    563       fp = null; 
    564       ag = null; 
    565       files = null; 
    566       usedFiles = null; 
    567       blankThumbBytes = null; 
    568       imagesPerFile = null; 
     471      externals = null; 
    569472      sizeZ = sizeC = sizeT = null; 
    570473      lenZ = lenC = lenT = null; 
    571474      core = null; 
    572475      series = 0; 
    573       seriesBlocks = null; 
    574       fileVector = null; 
    575       seriesNames = null; 
    576       seriesInFile = false; 
    577476      store = null; 
    578       originalOrder = null; 
    579477    } 
    580478  } 
     
    582480  /* @see IFormatReader#getSeriesCount() */ 
    583481  public int getSeriesCount() { 
    584     FormatTools.assertId(currentId, true, 2); 
     482    FormatTools.assertId(getCurrentFile(), true, 2); 
    585483    return noStitch ? reader.getSeriesCount() : core.length; 
    586484  } 
     
    588486  /* @see IFormatReader#setSeries(int) */ 
    589487  public void setSeries(int no) { 
    590     FormatTools.assertId(currentId, true, 2); 
     488    FormatTools.assertId(getCurrentFile(), true, 2); 
    591489    int n = reader.getSeriesCount(); 
    592490    if (n > 1) reader.setSeries(no); 
     
    596494  /* @see IFormatReader#getSeries() */ 
    597495  public int getSeries() { 
    598     FormatTools.assertId(currentId, true, 2); 
    599     return seriesInFile || noStitch ? reader.getSeries() : series; 
     496    FormatTools.assertId(getCurrentFile(), true, 2); 
     497    return reader.getSeries() > 0 ? reader.getSeries() : series; 
    600498  } 
    601499 
     
    603501  public void setGroupFiles(boolean group) { 
    604502    reader.setGroupFiles(group); 
    605     if (readers != null) { 
    606       for (int i=0; i<readers.length; i++) { 
    607         for (int j=0; j<readers[i].length; j++) { 
    608           readers[i][j].setGroupFiles(group); 
     503    if (externals != null) { 
     504      for (ExternalSeries s : externals) { 
     505        for (DimensionSwapper r : s.getReaders()) { 
     506          r.setGroupFiles(group); 
    609507        } 
    610508      } 
    611509    } 
    612   } 
    613  
    614   /* @see IFormatReader#isGroupFiles() */ 
    615   public boolean isGroupFiles() { 
    616     return reader.isGroupFiles(); 
    617   } 
    618  
    619   /* @see IFormatReader#fileGroupOption(String) */ 
    620   public int fileGroupOption(String id) throws FormatException, IOException { 
    621     return reader.fileGroupOption(id); 
    622   } 
    623  
    624   /* @see IFormatReader#isMetadataComplete() */ 
    625   public boolean isMetadataComplete() { 
    626     return reader.isMetadataComplete(); 
    627510  } 
    628511 
    629512  /* @see IFormatReader#setNormalized(boolean) */ 
    630513  public void setNormalized(boolean normalize) { 
    631     FormatTools.assertId(currentId, false, 2); 
    632     if (readers == null) reader.setNormalized(normalize); 
     514    FormatTools.assertId(getCurrentFile(), false, 2); 
     515    if (externals == null) reader.setNormalized(normalize); 
    633516    else { 
    634       for (int i=0; i<readers.length; i++) { 
    635         for (int j=0; j<readers[i].length; j++) { 
    636           readers[i][j].setNormalized(normalize); 
     517      for (ExternalSeries s : externals) { 
     518        for (DimensionSwapper r : s.getReaders()) { 
     519          r.setNormalized(normalize); 
    637520        } 
    638521      } 
    639522    } 
    640523  } 
    641  
    642   /* @see IFormatReader#isNormalized() */ 
    643   public boolean isNormalized() { return reader.isNormalized(); } 
    644524 
    645525  /** 
     
    648528   */ 
    649529  public void setMetadataCollected(boolean collect) { 
    650     FormatTools.assertId(currentId, false, 2); 
    651     if (readers == null) reader.setMetadataCollected(collect); 
     530    FormatTools.assertId(getCurrentFile(), false, 2); 
     531    if (externals == null) reader.setMetadataCollected(collect); 
    652532    else { 
    653       for (int i=0; i<readers.length; i++) { 
    654         for (int j=0; j<readers[i].length; j++) { 
    655           readers[i][j].setMetadataCollected(collect); 
     533      for (ExternalSeries s : externals) { 
     534        for (DimensionSwapper r : s.getReaders()) { 
     535          r.setMetadataCollected(collect); 
    656536        } 
    657537      } 
    658538    } 
    659   } 
    660  
    661   /** 
    662    * @deprecated 
    663    * @see IFormatReader#isMetadataCollected() 
    664    */ 
    665   public boolean isMetadataCollected() { 
    666     return reader.isMetadataCollected(); 
    667539  } 
    668540 
    669541  /* @see IFormatReader#setOriginalMetadataPopulated(boolean) */ 
    670542  public void setOriginalMetadataPopulated(boolean populate) { 
    671     FormatTools.assertId(currentId, false, 1); 
    672     if (readers == null) reader.setOriginalMetadataPopulated(populate); 
     543    FormatTools.assertId(getCurrentFile(), false, 1); 
     544    if (externals == null) reader.setOriginalMetadataPopulated(populate); 
    673545    else { 
    674       for (int i=0; i<readers.length; i++) { 
    675         for (int j=0; j<readers[i].length; j++) { 
    676           readers[i][j].setOriginalMetadataPopulated(populate); 
     546      for (ExternalSeries s : externals) { 
     547        for (DimensionSwapper r : s.getReaders()) { 
     548          r.setOriginalMetadataPopulated(populate); 
    677549        } 
    678550      } 
    679551    } 
    680   } 
    681  
    682   /* @see IFormatReader#isOriginalMetadataPopulated() */ 
    683   public boolean isOriginalMetadataPopulated() { 
    684     return reader.isOriginalMetadataPopulated(); 
    685552  } 
    686553 
    687554  /* @see IFormatReader#getUsedFiles() */ 
    688555  public String[] getUsedFiles() { 
    689     FormatTools.assertId(currentId, true, 2); 
     556    FormatTools.assertId(getCurrentFile(), true, 2); 
    690557 
    691558    if (noStitch) return reader.getUsedFiles(); 
     
    695562    // when each constituent file does not itself have multiple used files 
    696563 
    697     if (reader.getUsedFiles().length > 1) { 
    698       // each constituent file has multiple used files; we must build the list 
    699       // this could happen with, e.g., a stitched collection of ICS/IDS pairs 
    700       // we have no datasets structured this way, so this logic is untested 
    701       if (usedFiles == null) { 
    702         String[][][] used = new String[files.length][][]; 
    703         int total = 0; 
    704         for (int i=0; i<files.length; i++) { 
    705           used[i] = new String[files[i].length][]; 
    706           for (int j=0; j<files[i].length; j++) { 
    707             try { 
    708               initReader(i, j); 
    709             } 
    710             catch (FormatException exc) { 
    711               LOGGER.info("", exc); 
    712               return null; 
    713             } 
    714             catch (IOException exc) { 
    715               LOGGER.info("", exc); 
    716               return null; 
    717             } 
    718             used[i][j] = readers[i][j].getUsedFiles(); 
    719             total += used[i][j].length; 
    720           } 
    721         } 
    722         usedFiles = new String[total]; 
    723         for (int i=0, off=0; i<used.length; i++) { 
    724           for (int j=0; j<used[i].length; j++) { 
    725             System.arraycopy(used[i][j], 0, usedFiles, off, used[i][j].length); 
    726             off += used[i][j].length; 
    727           } 
    728         } 
    729       } 
    730       return usedFiles; 
    731     } 
    732     // assume every constituent file has no other used files 
    733     // this logic could fail if the first constituent has no extra used files, 
    734     // but later constituents do; in practice, this scenario seems unlikely 
    735     Vector<String> v = new Vector<String>(); 
    736     for (int i=0; i<files.length; i++) { 
    737       for (int j=0; j<files[i].length; j++) { 
    738         v.add(files[i][j]); 
    739       } 
    740     } 
    741     return v.toArray(new String[0]); 
     564    Vector<String> files = new Vector<String>(); 
     565    for (ExternalSeries s : externals) { 
     566      String[] f = s.getFiles(); 
     567      for (String file : f) { 
     568        if (!files.contains(file)) files.add(file); 
     569      } 
     570    } 
     571    return files.toArray(new String[files.size()]); 
    742572  } 
    743573 
     
    760590  /* @see IFormatReader#getAdvancedUsedFiles(boolean) */ 
    761591  public FileInfo[] getAdvancedUsedFiles(boolean noPixels) { 
     592    if (noStitch) return reader.getAdvancedUsedFiles(noPixels); 
    762593    String[] files = getUsedFiles(noPixels); 
    763594    if (files == null) return null; 
     
    767598      infos[i].filename = files[i]; 
    768599      try { 
    769         infos[i].reader = reader.unwrap().getClass(); 
     600        infos[i].reader = ((DimensionSwapper) reader).unwrap().getClass(); 
    770601      } 
    771602      catch (FormatException e) { 
     
    782613  /* @see IFormatReader#getAdvancedSeriesUsedFiles(boolean) */ 
    783614  public FileInfo[] getAdvancedSeriesUsedFiles(boolean noPixels) { 
     615    if (noStitch) return reader.getAdvancedSeriesUsedFiles(noPixels); 
    784616    String[] files = getSeriesUsedFiles(noPixels); 
    785617    if (files == null) return null; 
     
    789621      infos[i].filename = files[i]; 
    790622      try { 
    791         infos[i].reader = reader.unwrap().getClass(); 
     623        infos[i].reader = ((DimensionSwapper) reader).unwrap().getClass(); 
    792624      } 
    793625      catch (FormatException e) { 
     
    802634  } 
    803635 
    804   /* @see IFormatReader#getCurrentFile() */ 
    805   public String getCurrentFile() { return currentId; } 
    806  
    807636  /* @see IFormatReader#getIndex(int, int, int) */ 
    808637  public int getIndex(int z, int c, int t) { 
    809     FormatTools.assertId(currentId, true, 2); 
     638    FormatTools.assertId(getCurrentFile(), true, 2); 
    810639    return FormatTools.getIndex(this, z, c, t); 
    811640  } 
     
    813642  /* @see IFormatReader#getZCTCoords(int) */ 
    814643  public int[] getZCTCoords(int index) { 
    815     FormatTools.assertId(currentId, true, 2); 
     644    FormatTools.assertId(getCurrentFile(), true, 2); 
    816645    return noStitch ? reader.getZCTCoords(index) : 
    817646      FormatTools.getZCTCoords(core[getSeries()].dimensionOrder, 
     
    819648  } 
    820649 
    821   /* @see IFormatReader#getMetadataValue(String) */ 
    822   public Object getMetadataValue(String field) { 
    823     FormatTools.assertId(currentId, true, 2); 
    824     return reader.getMetadataValue(field); 
    825   } 
    826  
    827   /* @see IFormatReader#getGlobalMetadata() */ 
    828   public Hashtable<String, Object> getGlobalMetadata() { 
    829     FormatTools.assertId(currentId, true, 2); 
    830     return reader.getGlobalMetadata(); 
    831   } 
    832  
    833650  /* @see IFormatReader#getSeriesMetadata() */ 
    834651  public Hashtable<String, Object> getSeriesMetadata() { 
    835     FormatTools.assertId(currentId, true, 2); 
    836     return reader.getSeriesMetadata(); 
    837   } 
    838  
    839   /** @deprecated */ 
    840   public Hashtable<String, Object> getMetadata() { 
    841     FormatTools.assertId(currentId, true ,2); 
    842     return reader.getMetadata(); 
     652    FormatTools.assertId(getCurrentFile(), true, 2); 
     653    return noStitch ? reader.getSeriesMetadata() : 
     654      core[getSeries()].seriesMetadata; 
    843655  } 
    844656 
    845657  /* @see IFormatReader#getCoreMetadata() */ 
    846658  public CoreMetadata[] getCoreMetadata() { 
    847     FormatTools.assertId(currentId, true, 2); 
     659    FormatTools.assertId(getCurrentFile(), true, 2); 
    848660    return noStitch ? reader.getCoreMetadata() : core; 
    849   } 
    850  
    851   /* @see IFormatReader#setMetadataFiltered(boolean) */ 
    852   public void setMetadataFiltered(boolean filter) { 
    853     FormatTools.assertId(currentId, false, 2); 
    854     reader.setMetadataFiltered(filter); 
    855   } 
    856  
    857   /* @see IFormatReader#isMetadataFiltered() */ 
    858   public boolean isMetadataFiltered() { 
    859     return reader.isMetadataFiltered(); 
    860661  } 
    861662 
    862663  /* @see IFormatReader#setMetadataStore(MetadataStore) */ 
    863664  public void setMetadataStore(MetadataStore store) { 
    864     FormatTools.assertId(currentId, false, 2); 
     665    FormatTools.assertId(getCurrentFile(), false, 2); 
    865666    reader.setMetadataStore(store); 
     667    this.store = store; 
    866668  } 
    867669 
    868670  /* @see IFormatReader#getMetadataStore() */ 
    869671  public MetadataStore getMetadataStore() { 
    870     FormatTools.assertId(currentId, true, 2); 
     672    FormatTools.assertId(getCurrentFile(), true, 2); 
    871673    return noStitch ? reader.getMetadataStore() : store; 
    872674  } 
     
    874676  /* @see IFormatReader#getMetadataStoreRoot() */ 
    875677  public Object getMetadataStoreRoot() { 
    876     FormatTools.assertId(currentId, true, 2); 
     678    FormatTools.assertId(getCurrentFile(), true, 2); 
    877679    return noStitch ? reader.getMetadataStoreRoot() : store.getRoot(); 
    878680  } 
     
    881683  public IFormatReader[] getUnderlyingReaders() { 
    882684    List<IFormatReader> list = new ArrayList<IFormatReader>(); 
    883     for (int i=0; i<readers.length; i++) { 
    884       for (int j=0; j<readers[i].length; j++) { 
    885         list.add(readers[i][j]); 
     685    for (ExternalSeries s : externals) { 
     686      for (DimensionSwapper r : s.getReaders()) { 
     687        list.add(r); 
    886688      } 
    887689    } 
     
    889691  } 
    890692 
    891   /* @see IFormatReader#isSingleFile(String) */ 
    892   public boolean isSingleFile(String id) throws FormatException, IOException { 
    893     return reader.isSingleFile(id); 
    894   } 
    895  
    896   /* @see IFormatReader#hasCompanionFiles() */ 
    897   public boolean hasCompanionFiles() { 
    898     return reader.hasCompanionFiles(); 
    899   } 
    900  
    901   /* @see IFormatReader#getPossibleDomains(String) */ 
    902   public String[] getPossibleDomains(String id) 
    903     throws FormatException, IOException 
    904   { 
    905     return reader.getPossibleDomains(id); 
    906   } 
    907  
    908   /* @see IFormatReader#getDomains(String) */ 
    909   public String[] getDomains() { 
    910     return reader.getDomains(); 
    911   } 
    912  
    913   // -- IFormatHandler API methods -- 
    914  
    915   /* @see IFormatHandler#isThisType(String) */ 
    916   public boolean isThisType(String name) { 
    917     return reader.isThisType(name); 
    918   } 
    919  
    920   /* @see IFormatHandler#getFormat() */ 
    921   public String getFormat() { 
    922     FormatTools.assertId(currentId, true, 2); 
    923     return reader.getFormat(); 
    924   } 
    925  
    926   /* @see IFormatHandler#getSuffixes() */ 
    927   public String[] getSuffixes() { 
    928     return reader.getSuffixes(); 
    929   } 
    930  
    931   /* @see IFormatHandler#getNativeDataType() */ 
    932   public Class<?> getNativeDataType() { 
    933     FormatTools.assertId(currentId, true, 2); 
    934     return reader.getNativeDataType(); 
    935   } 
    936  
    937   /* @see IFormatHandler#setId(String) */ 
     693  /* @see IFormatReader#setId(String) */ 
    938694  public void setId(String id) throws FormatException, IOException { 
    939     if (!id.equals(currentId)) initFile(id); 
    940   } 
    941  
    942   /* @see IFormatHandler#close() */ 
    943   public void close() throws IOException { close(false); } 
     695    close(); 
     696    initFile(id); 
     697  } 
    944698 
    945699  // -- Internal FormatReader API methods -- 
     
    949703    LOGGER.debug("initFile: {}", id); 
    950704 
    951     close(); 
    952     currentId = id; 
    953  
    954     fp = findPattern(currentId); 
     705    String[] patterns = findPatterns(id); 
     706    externals = new ExternalSeries[patterns.length]; 
     707 
     708    for (int i=0; i<externals.length; i++) { 
     709      externals[i] = new ExternalSeries(new FilePattern(patterns[i])); 
     710    } 
     711 
     712    FilePattern fp = new FilePattern(patterns[0]); 
    955713 
    956714    boolean mustGroup = false; 
     
    969727        reader.setId(fp.getFiles()[0]); 
    970728      } 
    971       else reader.setId(currentId); 
     729      else reader.setId(id); 
    972730      return; 
    973731    } 
     732    reader.close(); 
     733    reader.setGroupFiles(false); 
    974734 
    975735    if (!fp.isValid()) { 
     
    977737    } 
    978738    reader.setId(fp.getFiles()[0]); 
     739 
     740    String msg = " Please rename your files or disable file stitching."; 
     741    if (reader.getSeriesCount() > 1 && 
     742      (externals.length > 1 || fp.getFiles().length > 1)) 
     743    { 
     744      throw new FormatException("Unsupported grouping: File pattern contains " + 
     745        "multiple files and each file contains multiple series." + msg); 
     746    } 
     747 
    979748    if (reader.getUsedFiles().length > 1) { 
    980749      noStitch = true; 
     
    987756 
    988757    // use the dimension order recommended by the axis guesser 
    989     reader.swapDimensions(guesser.getAdjustedOrder()); 
     758    ((DimensionSwapper) reader).swapDimensions(guesser.getAdjustedOrder()); 
    990759 
    991760    // if this is a multi-series dataset, we need some special logic 
    992     int seriesCount = reader.getSeriesCount(); 
    993     seriesInFile = true; 
    994     if (guesser.getAxisCountS() > 0) { 
    995       int[] axes = guesser.getAxisTypes(); 
    996  
    997       seriesInFile = false; 
    998  
    999       String[] blockPrefixes = fp.getPrefixes(); 
    1000       Vector<String> sBlock = new Vector<String>(); 
    1001  
    1002       for (int i=0; i<axes.length; i++) { 
    1003         if (axes[i] == AxisGuesser.S_AXIS) sBlock.add(blockPrefixes[i]); 
    1004       } 
    1005  
    1006       seriesBlocks = sBlock.toArray(new String[0]); 
    1007       fileVector = new Vector<String[]>(); 
    1008       seriesNames = new Vector<String>(); 
    1009  
    1010       String file = fp.getFiles()[0]; 
    1011       Location dir = new Location(file).getAbsoluteFile().getParentFile(); 
    1012       String dpath = dir.getAbsolutePath(); 
    1013       String[] fs = dir.list(); 
    1014  
    1015       String ext = ""; 
    1016       if (file.indexOf(".") != -1) { 
    1017         ext = file.substring(file.lastIndexOf(".") + 1); 
    1018       } 
    1019  
    1020       Vector<String> tmpFiles = new Vector<String>(); 
    1021       for (int i=0; i<fs.length; i++) { 
    1022         if (fs[i].endsWith(ext)) tmpFiles.add(fs[i]); 
    1023       } 
    1024  
    1025       setFiles(tmpFiles.toArray(new String[0]), seriesBlocks[0], 
    1026         fp.getFirst()[0], fp.getLast()[0], fp.getStep()[0], dpath, 0); 
    1027  
    1028       seriesCount = fileVector.size(); 
    1029       files = new String[seriesCount][]; 
    1030  
    1031       for (int i=0; i<seriesCount; i++) { 
    1032         files[i] = fileVector.get(i); 
    1033       } 
     761    int seriesCount = externals.length; 
     762    if (externals.length == 1) { 
     763      seriesCount = reader.getSeriesCount(); 
    1034764    } 
    1035765 
    1036766    // verify that file pattern is valid and matches existing files 
    1037     String msg = " Please rename your files or disable file stitching."; 
    1038767    if (!fp.isValid()) { 
    1039768      throw new FormatException("Invalid " + 
    1040769        (patternIds ? "file pattern" : "filename") + 
    1041         " (" + currentId + "): " + fp.getErrorMessage() + msg); 
    1042     } 
    1043     if (files == null) { 
    1044       files = new String[1][]; 
    1045       files[0] = fp.getFiles(); 
    1046     } 
     770        " (" + id + "): " + fp.getErrorMessage() + msg); 
     771    } 
     772    String[] files = fp.getFiles(); 
    1047773 
    1048774    if (files == null) { 
     
    1050776        fp.getPattern() + "). " + msg); 
    1051777    } 
     778 
    1052779    for (int i=0; i<files.length; i++) { 
    1053       for (int j=0; j<files[i].length; j++) { 
    1054         String file = files[i][j]; 
    1055  
    1056         // HACK: skip file existence check for fake files 
    1057         if (file.toLowerCase().endsWith(".fake")) continue; 
    1058  
    1059         if (!new Location(file).exists()) { 
    1060           throw new FormatException("File #" + i + 
    1061             " (" + file + ") does not exist."); 
    1062         } 
     780      String file = files[i]; 
     781 
     782      // HACK: skip file existence check for fake files 
     783      if (file.toLowerCase().endsWith(".fake")) continue; 
     784 
     785      if (!new Location(file).exists()) { 
     786        throw new FormatException("File #" + i + 
     787          " (" + file + ") does not exist."); 
    1063788      } 
    1064789    } 
     
    1066791    // determine reader type for these files; assume all are the same type 
    1067792    Class<? extends IFormatReader> readerClass = 
    1068       reader.unwrap(files[0][0]).getClass(); 
    1069  
    1070     // construct list of readers for all files 
    1071     readers = new DimensionSwapper[files.length][]; 
    1072     for (int i=0; i<readers.length; i++) { 
    1073       readers[i] = new DimensionSwapper[files[i].length]; 
    1074       for (int j=0; j<readers[i].length; j++) { 
    1075         readers[i][j] = i == 0 && j == 0 ? reader : 
    1076           (DimensionSwapper) reader.duplicate(readerClass); 
    1077       } 
    1078     } 
    1079  
    1080     ag = new AxisGuesser[seriesCount]; 
    1081     blankBytes = new byte[seriesCount][]; 
    1082     blankThumbBytes = new byte[seriesCount][]; 
    1083     imagesPerFile = new int[seriesCount]; 
     793      ((DimensionSwapper) reader).unwrap(files[0]).getClass(); 
     794 
    1084795    sizeZ = new int[seriesCount]; 
    1085796    sizeC = new int[seriesCount]; 
     
    1090801    lenT = new int[seriesCount][]; 
    1091802 
    1092     originalOrder = new String[seriesCount]; 
    1093  
    1094803    // analyze first file; assume each file has the same parameters 
    1095804    core = new CoreMetadata[seriesCount]; 
    1096     int oldSeries = reader.getSeries(); 
    1097     IFormatReader rr = reader; 
     805    int oldSeries = getSeries(); 
    1098806    for (int i=0; i<seriesCount; i++) { 
    1099       if (seriesInFile) rr.setSeries(i); 
    1100       else { 
    1101         initReader(i, 0); 
    1102         rr = readers[i][0]; 
    1103       } 
     807      IFormatReader rr = getReader(i, 0); 
    1104808 
    1105809      core[i] = new CoreMetadata(); 
     
    1111815      // NB: core.sizeT populated in computeAxisLengths below 
    1112816      core[i].pixelType = rr.getPixelType(); 
    1113       imagesPerFile[i] = rr.getImageCount(); 
    1114       core[i].imageCount = 
    1115         imagesPerFile[i] * files[seriesInFile ? 0 : i].length; 
     817 
     818      ExternalSeries external = externals[getExternalSeries(i)]; 
     819      core[i].imageCount = rr.getImageCount() * external.getFiles().length; 
    1116820      core[i].thumbSizeX = rr.getThumbSizeX(); 
    1117821      core[i].thumbSizeY = rr.getThumbSizeY(); 
     
    1119823      // NB: core.cTypes[i] populated in computeAxisLengths below 
    1120824      core[i].dimensionOrder = rr.getDimensionOrder(); 
    1121       originalOrder[i] = rr.getDimensionOrder(); 
    1122825      // NB: core.orderCertain[i] populated below 
    1123826      core[i].rgb = rr.isRGB(); 
     
    1132835      certain[i] = rr.isOrderCertain(); 
    1133836    } 
    1134     reader.setSeries(oldSeries); 
    1135  
    1136     // guess at dimensions corresponding to file numbering 
    1137     for (int i=0; i<seriesCount; i++) { 
    1138       ag[i] = new AxisGuesser(fp, core[i].dimensionOrder, 
    1139         sizeZ[i], sizeT[i], sizeC[i], certain[i]); 
    1140     } 
    1141837 
    1142838    // order may need to be adjusted 
    1143839    for (int i=0; i<seriesCount; i++) { 
    1144840      setSeries(i); 
    1145       core[i].dimensionOrder = ag[i].getAdjustedOrder(); 
    1146       core[i].orderCertain = ag[i].isCertain(); 
     841      AxisGuesser ag = externals[getExternalSeries()].getAxisGuesser(); 
     842      core[i].dimensionOrder = ag.getAdjustedOrder(); 
     843      core[i].orderCertain = ag.isCertain(); 
    1147844      computeAxisLengths(); 
    1148845    } 
     
    1152849    store = reader.getMetadataStore(); 
    1153850    // don't overwrite pixel info if files aren't actually grouped 
    1154     if (!seriesInFile || files.length > 1 || files[0].length > 1) { 
     851    if (!noStitch && externals.length > 1) { 
    1155852      MetadataTools.populatePixels(store, this); 
    1156     } 
    1157     for (int i=0; i<core.length; i++) { 
    1158       if (seriesNames != null && !seriesInFile) { 
    1159         store.setImageName(seriesNames.get(i), i); 
     853      for (int i=0; i<getSeriesCount(); i++) { 
     854        store.setImageName(externals[i].getFilePattern().getPattern(), i); 
    1160855      } 
    1161856    } 
     
    1163858 
    1164859  // -- Helper methods -- 
     860 
     861  private int getExternalSeries() { 
     862    return getExternalSeries(getSeries()); 
     863  } 
     864 
     865  private int getExternalSeries(int currentSeries) { 
     866    if (reader.getSeriesCount() > 1) return 0; 
     867    return currentSeries; 
     868  } 
    1165869 
    1166870  /** Computes axis length arrays, and total axis lengths. */ 
    1167871  protected void computeAxisLengths() throws FormatException { 
    1168     int sno = seriesInFile ? 0 : getSeries(); 
    1169  
    1170     FilePattern p = new FilePattern(FilePattern.findPattern(files[sno][0], 
    1171       new Location(files[sno][0]).getAbsoluteFile().getParentFile().getPath(), 
    1172       files[sno])); 
     872    int sno = getSeries(); 
     873    ExternalSeries s = externals[getExternalSeries()]; 
     874    FilePattern p = s.getFilePattern(); 
    1173875 
    1174876    int[] count = p.getCount(); 
    1175877 
    1176     try { 
    1177       initReader(sno, 0); 
    1178     } 
    1179     catch (IOException e) { 
    1180       throw new FormatException(e); 
    1181     } 
    1182  
    1183     ag[getSeries()] = new AxisGuesser(p, readers[sno][0].getDimensionOrder(), 
    1184       readers[sno][0].getSizeZ(), readers[sno][0].getSizeT(), 
    1185       readers[sno][0].getSizeC(), readers[sno][0].isOrderCertain()); 
    1186     sno = getSeries(); 
    1187     int[] axes = ag[sno].getAxisTypes(); 
    1188     int numZ = ag[sno].getAxisCountZ(); 
    1189     int numC = ag[sno].getAxisCountC(); 
    1190     int numT = ag[sno].getAxisCountT(); 
     878    initReader(sno, 0); 
     879 
     880    AxisGuesser ag = s.getAxisGuesser(); 
     881    int[] axes = ag.getAxisTypes(); 
     882    int numZ = ag.getAxisCountZ(); 
     883    int numC = ag.getAxisCountC(); 
     884    int numT = ag.getAxisCountT(); 
    1191885 
    1192886    core[sno].sizeZ = sizeZ[sno]; 
     
    1260954   */ 
    1261955  protected int[] computeIndices(int no) throws FormatException, IOException { 
     956    if (noStitch) return new int[] {0, no}; 
    1262957    int sno = getSeries(); 
    1263  
    1264     int[] axes = ag[sno].getAxisTypes(); 
    1265     int[] count = fp.getCount(); 
     958    ExternalSeries s = externals[getExternalSeries()]; 
     959 
     960    int[] axes = s.getAxisGuesser().getAxisTypes(); 
     961    int[] count = s.getFilePattern().getCount(); 
    1266962 
    1267963    // get Z, C and T positions 
     
    1277973    int[] tmpT = new int[posT.length]; 
    1278974    System.arraycopy(posT, 0, tmpT, 0, tmpT.length); 
    1279  
    1280     for (int i=0; i<3; i++) { 
    1281       char originalAxis = core[sno].dimensionOrder.charAt(i + 2); 
    1282       char newAxis = originalOrder[sno].charAt(i + 2); 
    1283  
    1284       if (newAxis != originalAxis) { 
    1285         int src = -1; 
    1286         if (originalAxis == 'Z') src = tmpZ[tmpZ.length - 1]; 
    1287         else if (originalAxis == 'C') src = tmpC[tmpC.length - 1]; 
    1288         else if (originalAxis == 'T') src = tmpT[tmpT.length - 1]; 
    1289  
    1290         if (newAxis == 'Z') posZ[posZ.length - 1] = src; 
    1291         else if (newAxis == 'C') posC[posC.length - 1] = src; 
    1292         else if (newAxis == 'T') posT[posT.length - 1] = src; 
    1293       } 
    1294     } 
    1295975 
    1296976    // convert Z, C and T position lists into file index and image index 
     
    1308988 
    1309989    int fno = FormatTools.positionToRaster(count, pos); 
    1310  
    1311     if (seriesInFile) sno = 0; 
    1312  
    1313     // configure the reader, in case we haven't done this one yet 
    1314     initReader(sno, fno); 
     990    DimensionSwapper r = getReader(sno, fno); 
    1315991 
    1316992    int ino; 
    1317     if (posZ[0] < readers[sno][fno].getSizeZ() && 
    1318       posC[0] < readers[sno][fno].getSizeC() && 
    1319       posT[0] < readers[sno][fno].getSizeT()) 
     993    if (posZ[0] < r.getSizeZ() && posC[0] < r.getSizeC() && 
     994      posT[0] < r.getSizeT()) 
    1320995    { 
    1321       if (readers[sno][fno].isRGB() && 
    1322         (posC[0] * readers[sno][fno].getRGBChannelCount() >= lenC[sno][0])) 
     996      if (r.isRGB() && (posC[0] * r.getRGBChannelCount() >= lenC[sno][0])) { 
     997        posC[0] /= lenC[sno][0]; 
     998      } 
     999      ino = FormatTools.getIndex(r, posZ[0], posC[0], posT[0]); 
     1000    } 
     1001    else ino = Integer.MAX_VALUE; // coordinates out of range 
     1002 
     1003    return new int[] {fno, ino}; 
     1004  } 
     1005 
     1006  protected void initReader(int sno, int fno) { 
     1007    int external = getExternalSeries(sno); 
     1008    DimensionSwapper r = externals[external].getReaders()[fno]; 
     1009    try { 
     1010      if (r.getCurrentFile() == null) { 
     1011        r.setGroupFiles(false); 
     1012      } 
     1013      r.setId(externals[external].getFiles()[fno]); 
     1014      r.setSeries(reader.getSeriesCount() > 1 ? sno : 0); 
     1015      String newOrder = ((DimensionSwapper) reader).getInputOrder(); 
     1016      if ((externals[external].getFiles().length > 1 || !r.isOrderCertain()) && 
     1017        (r.getRGBChannelCount() == 1 || 
     1018        newOrder.indexOf("C") == r.getDimensionOrder().indexOf("C"))) 
    13231019      { 
    1324         posC[0] /= lenC[sno][0]; 
    1325       } 
    1326       ino = FormatTools.getIndex(readers[sno][fno], posZ[0], posC[0], posT[0]); 
    1327     } 
    1328     else ino = Integer.MAX_VALUE; // coordinates out of range 
    1329  
    1330     return new int[] {fno, ino}; 
    1331   } 
    1332  
    1333   /** 
    1334    * Gets a list of readers to include in relation to the given C position. 
    1335    * @return Array with indices corresponding to the list of readers, and 
    1336    *   values indicating the internal channel index to use for that reader. 
    1337    */ 
    1338   protected int[] getIncludeList(int theC) throws FormatException, IOException { 
    1339     int[] include = new int[readers.length]; 
    1340     Arrays.fill(include, -1); 
    1341     for (int t=0; t<sizeT[getSeries()]; t++) { 
    1342       for (int z=0; z<sizeZ[getSeries()]; z++) { 
    1343         int no = getIndex(z, theC, t); 
    1344         int[] q = computeIndices(no); 
    1345         int fno = q[0], ino = q[1]; 
    1346         include[fno] = ino; 
    1347       } 
    1348     } 
    1349     return include; 
    1350   } 
    1351  
    1352   protected void initReader(int sno, int fno) 
    1353     throws FormatException, IOException 
    1354   { 
    1355     if (files[sno][fno].equals(readers[sno][fno].getCurrentFile())) { 
    1356       return; 
    1357     } 
    1358     readers[sno][fno].setId(files[sno][fno]); 
    1359     readers[sno][fno].setSeries(seriesInFile ? getSeries() : 0); 
    1360     readers[sno][fno].swapDimensions(reader.getInputOrder()); 
    1361   } 
    1362  
    1363   private FilePattern getPattern(String[] f, String dir, String block) { 
    1364     Vector<String> v = new Vector<String>(); 
    1365     for (int i=0; i<f.length; i++) { 
    1366       if (f[i].indexOf(File.separator) != -1) { 
    1367         f[i] = f[i].substring(f[i].lastIndexOf(File.separator) + 1); 
    1368       } 
    1369       if (dir.endsWith(File.separator)) f[i] = dir + f[i]; 
    1370       else f[i] = dir + File.separator + f[i]; 
    1371       if (f[i].indexOf(block) != -1 && new Location(f[i]).exists()) { 
    1372         v.add(f[i].substring(f[i].lastIndexOf(File.separator) + 1)); 
    1373       } 
    1374     } 
    1375     f = v.toArray(new String[0]); 
    1376     return new FilePattern(FilePattern.findPattern(f[0], dir, f)); 
    1377   } 
    1378  
    1379   private void setFiles(String[] list, String prefix, BigInteger first, 
    1380     BigInteger last, BigInteger step, String dir, int blockNum) 
    1381   { 
    1382     long f = first.longValue(); 
    1383     long l = last.longValue(); 
    1384     long s = step.longValue(); 
    1385     for (long i=f; i<=l; i+=s) { 
    1386       FilePattern newPattern = getPattern(list, dir, prefix + i); 
    1387       if (blockNum == seriesBlocks.length - 1) { 
    1388         fileVector.add(newPattern.getFiles()); 
    1389         String name = newPattern.getPattern(); 
    1390         if (name.indexOf(File.separator) != -1) { 
    1391           name = name.substring(name.lastIndexOf(File.separator) + 1); 
    1392         } 
    1393         seriesNames.add(name); 
    1394       } 
    1395       else { 
    1396         String next = seriesBlocks[blockNum + 1]; 
    1397         String[] blocks = newPattern.getPrefixes(); 
    1398         BigInteger fi = null; 
    1399         BigInteger la = null; 
    1400         BigInteger st = null; 
    1401         for (int q=0; q<blocks.length; q++) { 
    1402           if (blocks[q].indexOf(next) != -1) { 
    1403             fi = newPattern.getFirst()[q]; 
    1404             la = newPattern.getLast()[q]; 
    1405             st = newPattern.getStep()[q]; 
    1406             break; 
    1407           } 
    1408         } 
    1409  
    1410         setFiles(newPattern.getFiles(), next, fi, la, st, dir, blockNum + 1); 
    1411       } 
    1412     } 
     1020        r.swapDimensions(newOrder); 
     1021      } 
     1022      r.setOutputOrder(newOrder); 
     1023    } 
     1024    catch (FormatException e) { 
     1025      LOGGER.debug("", e); 
     1026    } 
     1027    catch (IOException e) { 
     1028      LOGGER.debug("", e); 
     1029    } 
     1030  } 
     1031 
     1032  // -- Helper classes -- 
     1033 
     1034  class ExternalSeries { 
     1035    private DimensionSwapper[] readers; 
     1036    private String[] files; 
     1037    private FilePattern pattern; 
     1038    private byte[] blankThumbBytes; 
     1039    private String originalOrder; 
     1040    private AxisGuesser ag; 
     1041    private int imagesPerFile; 
     1042 
     1043    public ExternalSeries(FilePattern pattern) 
     1044      throws FormatException, IOException 
     1045    { 
     1046      this.pattern = pattern; 
     1047      files = this.pattern.getFiles(); 
     1048 
     1049      readers = new DimensionSwapper[files.length]; 
     1050      for (int i=0; i<readers.length; i++) { 
     1051        readers[i] = new DimensionSwapper(); 
     1052        readers[i].setGroupFiles(false); 
     1053      } 
     1054      readers[0].setId(files[0]); 
     1055 
     1056      ag = new AxisGuesser(this.pattern, readers[0].getDimensionOrder(), 
     1057        readers[0].getSizeZ(), readers[0].getSizeT(), 
     1058        readers[0].getSizeC(), readers[0].isOrderCertain()); 
     1059 
     1060      blankThumbBytes = new byte[FormatTools.getPlaneSize(readers[0], 
     1061        readers[0].getThumbSizeX(), readers[0].getThumbSizeY())]; 
     1062 
     1063      originalOrder = readers[0].getDimensionOrder(); 
     1064      imagesPerFile = readers[0].getImageCount(); 
     1065    } 
     1066 
     1067    public DimensionSwapper[] getReaders() { 
     1068      return readers; 
     1069    } 
     1070 
     1071    public FilePattern getFilePattern() { 
     1072      return pattern; 
     1073    } 
     1074 
     1075    public String getOriginalOrder() { 
     1076      return originalOrder; 
     1077    } 
     1078 
     1079    public AxisGuesser getAxisGuesser() { 
     1080      return ag; 
     1081    } 
     1082 
     1083    public byte[] getBlankThumbBytes() { 
     1084      return blankThumbBytes; 
     1085    } 
     1086 
     1087    public String[] getFiles() { 
     1088      return files; 
     1089    } 
     1090 
     1091    public int getImagesPerFile() { 
     1092      return imagesPerFile; 
     1093    } 
     1094 
    14131095  } 
    14141096 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/FormatException.java

    r4953 r7044  
    2929 * 
    3030 * <dl><dt><b>Source code:</b></dt> 
    31  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/FormatException.java">Trac</a>, 
    32  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/FormatException.java">SVN</a></dd></dl> 
     31 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/FormatException.java">Trac</a>, 
     32 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/FormatException.java">SVN</a></dd></dl> 
    3333 */ 
    3434public class FormatException extends Exception { 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/FormatHandler.java

    r6688 r7044  
    3535 * 
    3636 * <dl><dt><b>Source code:</b></dt> 
    37  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/FormatHandler.java">Trac</a>, 
    38  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/FormatHandler.java">SVN</a></dd></dl> 
     37 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/FormatHandler.java">Trac</a>, 
     38 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/FormatHandler.java">SVN</a></dd></dl> 
    3939 */ 
    4040public abstract class FormatHandler implements IFormatHandler { 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/FormatReader.java

    r6655 r7044  
    103103 * 
    104104 * <dl><dt><b>Source code:</b></dt> 
    105  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/FormatReader.java">Trac</a>, 
    106  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/FormatReader.java">SVN</a></dd></dl> 
     105 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/FormatReader.java">Trac</a>, 
     106 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/FormatReader.java">SVN</a></dd></dl> 
    107107 */ 
    108108public abstract class FormatReader extends FormatHandler 
     
    238238    key = key.trim(); 
    239239 
    240     boolean string = value instanceof String; 
     240    boolean string = value instanceof String || value instanceof Character; 
    241241    boolean simple = string || 
    242242      value instanceof Number || 
    243       value instanceof Boolean || 
    244       value instanceof Character; 
     243      value instanceof Boolean; 
    245244 
    246245    // string value, if passed in value is a string 
    247     String val = string ? (String) value : null; 
    248  
    249     if (filterMetadata) { 
     246    String val = string ? String.valueOf(value) : null; 
     247 
     248    if (filterMetadata || 
     249      (saveOriginalMetadata && (getMetadataStore() instanceof OMEXMLMetadata))) 
     250    { 
    250251      // filter out complex data types 
    251252      if (!simple) return; 
     
    277278 
    278279      if (string) value = val; 
    279     } 
    280  
    281     if (saveOriginalMetadata && simple && meta.equals(metadata)) { 
    282       MetadataStore store = getMetadataStore(); 
    283       if (store instanceof OMEXMLMetadata) { 
    284         try { 
    285           if (factory == null) factory = new ServiceFactory(); 
    286           if (service == null) { 
    287             service = factory.getInstance(OMEXMLService.class); 
    288           } 
    289           service.populateOriginalMetadata( 
    290             (OMEXMLMetadata) store, key, value.toString()); 
    291         } 
    292         catch (DependencyException e) { 
    293           LOGGER.warn("OMEXMLService not available.", e); 
    294         } 
    295       } 
    296280    } 
    297281 
     
    951935  } 
    952936 
     937  /* @see IFormatReader#getSeriesMetadataValue(String) */ 
     938  public Object getSeriesMetadataValue(String field) { 
     939    FormatTools.assertId(currentId, true, 1); 
     940    return getSeriesMeta(field); 
     941  } 
     942 
    953943  /* @see IFormatReader#getGlobalMetadata() */ 
    954944  public Hashtable<String, Object> getGlobalMetadata() { 
     
    10651055  /* @see IFormatHandler#setId(String) */ 
    10661056  public void setId(String id) throws FormatException, IOException { 
    1067     if (!id.equals(currentId)) initFile(id); 
     1057    if (!id.equals(currentId)) { 
     1058      initFile(id); 
     1059 
     1060      if (saveOriginalMetadata) { 
     1061        MetadataStore store = getMetadataStore(); 
     1062        if (store instanceof OMEXMLMetadata) { 
     1063          try { 
     1064            if (factory == null) factory = new ServiceFactory(); 
     1065            if (service == null) { 
     1066              service = factory.getInstance(OMEXMLService.class); 
     1067            } 
     1068            service.populateOriginalMetadata( 
     1069              (OMEXMLMetadata) store, metadata); 
     1070          } 
     1071          catch (DependencyException e) { 
     1072            LOGGER.warn("OMEXMLService not available.", e); 
     1073          } 
     1074        } 
     1075      } 
     1076    } 
    10681077  } 
    10691078 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/FormatTools.java

    r6684 r7044  
    3838 * 
    3939 * <dl><dt><b>Source code:</b></dt> 
    40  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/FormatTools.java">Trac</a>, 
    41  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/FormatTools.java">SVN</a></dd></dl> 
     40 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/FormatTools.java">Trac</a>, 
     41 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/FormatTools.java">SVN</a></dd></dl> 
    4242 */ 
    4343public final class FormatTools { 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/FormatWriter.java

    r6753 r7044  
    3939 * 
    4040 * <dl><dt><b>Source code:</b></dt> 
    41  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/FormatWriter.java">Trac</a>, 
    42  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/FormatWriter.java">SVN</a></dd></dl> 
     41 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/FormatWriter.java">Trac</a>, 
     42 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/FormatWriter.java">SVN</a></dd></dl> 
    4343 */ 
    4444public abstract class FormatWriter extends FormatHandler 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/IFormatHandler.java

    r6141 r7044  
    3030 * 
    3131 * <dl><dt><b>Source code:</b></dt> 
    32  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/IFormatHandler.java">Trac</a>, 
    33  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/IFormatHandler.java">SVN</a></dd></dl> 
     32 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/IFormatHandler.java">Trac</a>, 
     33 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/IFormatHandler.java">SVN</a></dd></dl> 
    3434 */ 
    3535public interface IFormatHandler { 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/IFormatReader.java

    r6570 r7044  
    3434 * 
    3535 * <dl><dt><b>Source code:</b></dt> 
    36  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/IFormatReader.java">Trac</a>, 
    37  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/IFormatReader.java">SVN</a></dd></dl> 
     36 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/IFormatReader.java">Trac</a>, 
     37 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/IFormatReader.java">SVN</a></dd></dl> 
    3838 */ 
    3939public interface IFormatReader extends IFormatHandler, IMetadataConfigurable { 
     
    398398 
    399399  /** 
     400   * Obtains the specified metadata field's value for the current series 
     401   * in the current file. 
     402   * @param field the name associated with the metadata field 
     403   * @return the value, or null if the field doesn't exist 
     404   */ 
     405  Object getSeriesMetadataValue(String field); 
     406 
     407  /** 
    400408   * Obtains the hashtable containing the metadata field/value pairs from 
    401409   * the current file. 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/IFormatWriter.java

    r6747 r7044  
    3333 * 
    3434 * <dl><dt><b>Source code:</b></dt> 
    35  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/IFormatWriter.java">Trac</a>, 
    36  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/IFormatWriter.java">SVN</a></dd></dl> 
     35 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/IFormatWriter.java">Trac</a>, 
     36 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/IFormatWriter.java">SVN</a></dd></dl> 
    3737 */ 
    3838public interface IFormatWriter extends IFormatHandler { 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/IMetadataConfigurable.java

    r6069 r7044  
    3434 * 
    3535 * <dl><dt><b>Source code:</b></dt> 
    36  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/IMetadataConfigurable.java">Trac</a>, 
    37  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/IMetadataConfigurable.java">SVN</a></dd></dl> 
     36 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/IMetadataConfigurable.java">Trac</a>, 
     37 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/IMetadataConfigurable.java">SVN</a></dd></dl> 
    3838 */ 
    3939public interface IMetadataConfigurable{ 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/ImageReader.java

    r6764 r7044  
    4747 * 
    4848 * <dl><dt><b>Source code:</b></dt> 
    49  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/ImageReader.java">Trac</a>, 
    50  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/ImageReader.java">SVN</a></dd></dl> 
     49 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/ImageReader.java">Trac</a>, 
     50 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/ImageReader.java">SVN</a></dd></dl> 
    5151 * 
    5252 * @author Curtis Rueden ctrueden at wisc.edu 
     
    457457  } 
    458458 
     459  /* @see IFormatReader#getSeriesMetadataValue(String) */ 
     460  public Object getSeriesMetadataValue(String field) { 
     461    return getReader().getSeriesMetadataValue(field); 
     462  } 
     463 
    459464  /* @see IFormatReader#getGlobalMetadata() */ 
    460465  public Hashtable<String, Object> getGlobalMetadata() { 
     
    550555  /* @see IFormatReader#getCurrentFile() */ 
    551556  public String getCurrentFile() { 
     557    if (currentId == null) return null; 
    552558    return getReader().getCurrentFile(); 
    553559  } 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/ImageTools.java

    r6679 r7044  
    3434 * 
    3535 * <dl><dt><b>Source code:</b></dt> 
    36  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/ImageTools.java">Trac</a>, 
    37  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/ImageTools.java">SVN</a></dd></dl> 
     36 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/ImageTools.java">Trac</a>, 
     37 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/ImageTools.java">SVN</a></dd></dl> 
    3838 * 
    3939 * @author Curtis Rueden ctrueden at wisc.edu 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/ImageWriter.java

    r6747 r7044  
    4242 * 
    4343 * <dl><dt><b>Source code:</b></dt> 
    44  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/ImageWriter.java">Trac</a>, 
    45  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/ImageWriter.java">SVN</a></dd></dl> 
     44 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/ImageWriter.java">Trac</a>, 
     45 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/ImageWriter.java">SVN</a></dd></dl> 
    4646 * 
    4747 * @author Curtis Rueden ctrueden at wisc.edu 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/MetadataTools.java

    r6719 r7044  
    3636import loci.formats.meta.MetadataRetrieve; 
    3737import loci.formats.meta.MetadataStore; 
     38import loci.formats.ome.OMEXMLMetadataImpl; 
    3839import loci.formats.services.OMEXMLService; 
    3940 
     
    5960 * 
    6061 * <dl><dt><b>Source code:</b></dt> 
    61  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/MetadataTools.java">Trac</a>, 
    62  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/MetadataTools.java">SVN</a></dd></dl> 
     62 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/MetadataTools.java">Trac</a>, 
     63 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/MetadataTools.java">SVN</a></dd></dl> 
    6364 */ 
    6465public final class MetadataTools { 
     
    125126          new ServiceFactory().getInstance(OMEXMLService.class); 
    126127        if (service.isOMEXMLRoot(store.getRoot())) { 
     128          MetadataStore baseStore = r.getMetadataStore(); 
     129          if (service.isOMEXMLMetadata(baseStore)) { 
     130            ((OMEXMLMetadataImpl) baseStore).resolveReferences(); 
     131          } 
     132 
    127133          OME root = (OME) store.getRoot(); 
    128134          BinData bin = root.getImage(i).getPixels().getBinData(0); 
     
    148154        for (int c=0; c<r.getEffectiveSizeC(); c++) { 
    149155          store.setChannelID(createLSID("Channel", i, c), i, c); 
    150           store.setChannelSamplesPerPixel(new PositiveInteger(sampleCount), i, c); 
     156          store.setChannelSamplesPerPixel( 
     157            new PositiveInteger(sampleCount), i, c); 
    151158        } 
    152159      } 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/MinMaxCalculator.java

    r6482 r7044  
    3434 * 
    3535 * <dl><dt><b>Source code:</b></dt> 
    36  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/MinMaxCalculator.java">Trac</a>, 
    37  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/MinMaxCalculator.java">SVN</a></dd></dl> 
     36 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/MinMaxCalculator.java">Trac</a>, 
     37 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/MinMaxCalculator.java">SVN</a></dd></dl> 
    3838 */ 
    3939public class MinMaxCalculator extends ReaderWrapper { 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/MissingLibraryException.java

    r5552 r7044  
    2929 * 
    3030 * <dl><dt><b>Source code:</b></dt> 
    31  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/MissingLibraryException.java">Trac</a>, 
    32  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/MissingLibraryException.java">SVN</a></dd></dl> 
     31 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/MissingLibraryException.java">Trac</a>, 
     32 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/MissingLibraryException.java">SVN</a></dd></dl> 
    3333 */ 
    3434public class MissingLibraryException extends FormatException { 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/NumberFilter.java

    r5142 r7044  
    3232 * 
    3333 * <dl><dt><b>Source code:</b></dt> 
    34  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/NumberFilter.java">Trac</a>, 
    35  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/NumberFilter.java">SVN</a></dd></dl> 
     34 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/NumberFilter.java">Trac</a>, 
     35 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/NumberFilter.java">SVN</a></dd></dl> 
    3636 */ 
    3737public class NumberFilter implements FileFilter { 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/ReaderWrapper.java

    r6445 r7044  
    3939 * 
    4040 * <dl><dt><b>Source code:</b></dt> 
    41  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/ReaderWrapper.java">Trac</a>, 
    42  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/ReaderWrapper.java">SVN</a></dd></dl> 
     41 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/ReaderWrapper.java">Trac</a>, 
     42 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/ReaderWrapper.java">SVN</a></dd></dl> 
    4343 */ 
    4444public abstract class ReaderWrapper implements IFormatReader { 
     
    397397  public Object getMetadataValue(String field) { 
    398398    return reader.getMetadataValue(field); 
     399  } 
     400 
     401  public Object getSeriesMetadataValue(String field) { 
     402    return reader.getSeriesMetadataValue(field); 
    399403  } 
    400404 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/UnknownFormatException.java

    r5524 r7044  
    2929 * 
    3030 * <dl><dt><b>Source code:</b></dt> 
    31  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/UnknownFormatException.java">Trac</a>, 
    32  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/UnknownFormatException.java">SVN</a></dd></dl> 
     31 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/UnknownFormatException.java">Trac</a>, 
     32 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/UnknownFormatException.java">SVN</a></dd></dl> 
    3333 */ 
    3434public class UnknownFormatException extends FormatException { 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/WriterWrapper.java

    r6747 r7044  
    3535 * 
    3636 * <dl><dt><b>Source code:</b></dt> 
    37  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/WriterWrapper.java">Trac</a>, 
    38  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/WriterWrapper.java">SVN</a></dd></dl> 
     37 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/WriterWrapper.java">Trac</a>, 
     38 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/WriterWrapper.java">SVN</a></dd></dl> 
    3939 */ 
    4040public abstract class WriterWrapper implements IFormatWriter { 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/cache/ByteArraySource.java

    r5093 r7044  
    3434 * 
    3535 * <dl><dt><b>Source code:</b></dt> 
    36  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/cache/ByteArraySource.java">Trac</a>, 
    37  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/cache/ByteArraySource.java">SVN</a></dd></dl> 
     36 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/cache/ByteArraySource.java">Trac</a>, 
     37 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/cache/ByteArraySource.java">SVN</a></dd></dl> 
    3838 */ 
    3939public class ByteArraySource extends CacheSource { 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/cache/Cache.java

    r6141 r7044  
    4040 * 
    4141 * <dl><dt><b>Source code:</b></dt> 
    42  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/cache/Cache.java">Trac</a>, 
    43  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/cache/Cache.java">SVN</a></dd></dl> 
     42 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/cache/Cache.java">Trac</a>, 
     43 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/cache/Cache.java">SVN</a></dd></dl> 
    4444 */ 
    4545public class Cache implements CacheReporter { 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/cache/CacheEvent.java

    r4953 r7044  
    3030 * 
    3131 * <dl><dt><b>Source code:</b></dt> 
    32  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/cache/CacheEvent.java">Trac</a>, 
    33  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/cache/CacheEvent.java">SVN</a></dd></dl> 
     32 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/cache/CacheEvent.java">Trac</a>, 
     33 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/cache/CacheEvent.java">SVN</a></dd></dl> 
    3434 */ 
    3535public class CacheEvent { 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/cache/CacheException.java

    r4953 r7044  
    3131 * 
    3232 * <dl><dt><b>Source code:</b></dt> 
    33  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/cache/CacheException.java">Trac</a>, 
    34  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/cache/CacheException.java">SVN</a></dd></dl> 
     33 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/cache/CacheException.java">Trac</a>, 
     34 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/cache/CacheException.java">SVN</a></dd></dl> 
    3535 */ 
    3636public class CacheException extends FormatException { 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/cache/CacheListener.java

    r4953 r7044  
    2828 * 
    2929 * <dl><dt><b>Source code:</b></dt> 
    30  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/cache/CacheListener.java">Trac</a>, 
    31  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/cache/CacheListener.java">SVN</a></dd></dl> 
     30 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/cache/CacheListener.java">Trac</a>, 
     31 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/cache/CacheListener.java">SVN</a></dd></dl> 
    3232 */ 
    3333public interface CacheListener { 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/cache/CacheReporter.java

    r4953 r7044  
    2828 * 
    2929 * <dl><dt><b>Source code:</b></dt> 
    30  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/cache/CacheReporter.java">Trac</a>, 
    31  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/cache/CacheReporter.java">SVN</a></dd></dl> 
     30 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/cache/CacheReporter.java">Trac</a>, 
     31 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/cache/CacheReporter.java">SVN</a></dd></dl> 
    3232 */ 
    3333public interface CacheReporter { 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/cache/CacheSource.java

    r5093 r7044  
    3535 * 
    3636 * <dl><dt><b>Source code:</b></dt> 
    37  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/cache/CacheSource.java">Trac</a>, 
    38  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/cache/CacheSource.java">SVN</a></dd></dl> 
     37 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/cache/CacheSource.java">Trac</a>, 
     38 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/cache/CacheSource.java">SVN</a></dd></dl> 
    3939 */ 
    4040public abstract class CacheSource implements ICacheSource { 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/cache/CacheStrategy.java

    r5093 r7044  
    3434 * 
    3535 * <dl><dt><b>Source code:</b></dt> 
    36  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/cache/CacheStrategy.java">Trac</a>, 
    37  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/cache/CacheStrategy.java">SVN</a></dd></dl> 
     36 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/cache/CacheStrategy.java">Trac</a>, 
     37 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/cache/CacheStrategy.java">SVN</a></dd></dl> 
    3838 */ 
    3939public abstract class CacheStrategy 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/cache/CacheUpdater.java

    r6026 r7044  
    3232 * 
    3333 * <dl><dt><b>Source code:</b></dt> 
    34  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/cache/CacheUpdater.java">Trac</a>, 
    35  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/cache/CacheUpdater.java">SVN</a></dd></dl> 
     34 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/cache/CacheUpdater.java">Trac</a>, 
     35 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/cache/CacheUpdater.java">SVN</a></dd></dl> 
    3636 */ 
    3737public class CacheUpdater extends Thread { 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/cache/CrosshairStrategy.java

    r4953 r7044  
    5252 * 
    5353 * <dl><dt><b>Source code:</b></dt> 
    54  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/cache/CrosshairStrategy.java">Trac</a>, 
    55  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/cache/CrosshairStrategy.java">SVN</a></dd></dl> 
     54 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/cache/CrosshairStrategy.java">Trac</a>, 
     55 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/cache/CrosshairStrategy.java">SVN</a></dd></dl> 
    5656 */ 
    5757public class CrosshairStrategy extends CacheStrategy { 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/cache/ICacheSource.java

    r4953 r7044  
    3232 * 
    3333 * <dl><dt><b>Source code:</b></dt> 
    34  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/cache/ICacheSource.java">Trac</a>, 
    35  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/cache/ICacheSource.java">SVN</a></dd></dl> 
     34 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/cache/ICacheSource.java">Trac</a>, 
     35 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/cache/ICacheSource.java">SVN</a></dd></dl> 
    3636 */ 
    3737public interface ICacheSource { 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/cache/ICacheStrategy.java

    r4953 r7044  
    3232 * 
    3333 * <dl><dt><b>Source code:</b></dt> 
    34  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/cache/ICacheStrategy.java">Trac</a>, 
    35  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/cache/ICacheStrategy.java">SVN</a></dd></dl> 
     34 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/cache/ICacheStrategy.java">Trac</a>, 
     35 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/cache/ICacheStrategy.java">SVN</a></dd></dl> 
    3636 */ 
    3737public interface ICacheStrategy extends CacheReporter { 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/cache/RectangleStrategy.java

    r4953 r7044  
    5353 * 
    5454 * <dl><dt><b>Source code:</b></dt> 
    55  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/cache/RectangleStrategy.java">Trac</a>, 
    56  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/cache/RectangleStrategy.java">SVN</a></dd></dl> 
     55 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/cache/RectangleStrategy.java">Trac</a>, 
     56 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/cache/RectangleStrategy.java">SVN</a></dd></dl> 
    5757 */ 
    5858public class RectangleStrategy extends CacheStrategy { 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/codec/Base64Codec.java

    r6495 r7044  
    3535 * 
    3636 * <dl><dt><b>Source code:</b></dt> 
    37  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/codec/Base64Codec.java">Trac</a>, 
    38  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/codec/Base64Codec.java">SVN</a></dd></dl> 
     37 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/codec/Base64Codec.java">Trac</a>, 
     38 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/codec/Base64Codec.java">SVN</a></dd></dl> 
    3939 * 
    4040 * @author Melissa Linkert melissa at glencoesoftware.com 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/codec/BaseCodec.java

    r6026 r7044  
    4242 * 
    4343 * <dl><dt><b>Source code:</b></dt> 
    44  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/codec/BaseCodec.java">Trac</a>, 
    45  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/codec/BaseCodec.java">SVN</a></dd></dl> 
     44 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/codec/BaseCodec.java">Trac</a>, 
     45 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/codec/BaseCodec.java">SVN</a></dd></dl> 
    4646 * 
    4747 * @author Eric Kjellman egkjellman at wisc.edu 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/codec/BitBuffer.java

    r6026 r7044  
    3232 * A class for reading arbitrary numbers of bits from a byte array. 
    3333 * <dl><dt><b>Source code:</b></dt> 
    34  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/codec/BitBuffer.java">Trac</a>, 
    35  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/codec/BitBuffer.java">SVN</a></dd></dl> 
     34 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/codec/BitBuffer.java">Trac</a>, 
     35 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/codec/BitBuffer.java">SVN</a></dd></dl> 
    3636 * 
    3737 * @author Eric Kjellman egkjellman at wisc.edu 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/codec/BitWriter.java

    r6026 r7044  
    3232 * A class for writing arbitrary numbers of bits to a byte array. 
    3333 * <dl><dt><b>Source code:</b></dt> 
    34  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/codec/BitWriter.java">Trac</a>, 
    35  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/codec/BitWriter.java">SVN</a></dd></dl> 
     34 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/codec/BitWriter.java">Trac</a>, 
     35 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/codec/BitWriter.java">SVN</a></dd></dl> 
    3636 * 
    3737 * @author Curtis Rueden ctrueden at wisc.edu 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/codec/ByteVector.java

    r4953 r7044  
    2727 * A growable array of bytes. 
    2828 * <dl><dt><b>Source code:</b></dt> 
    29  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/codec/ByteVector.java">Trac</a>, 
    30  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/codec/ByteVector.java">SVN</a></dd></dl> 
     29 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/codec/ByteVector.java">Trac</a>, 
     30 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/codec/ByteVector.java">SVN</a></dd></dl> 
    3131 * 
    3232 * @author Wayne Rasband wsr at nih.gov 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/codec/Codec.java

    r5093 r7044  
    4545 * 
    4646 * <dl><dt><b>Source code:</b></dt> 
    47  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/codec/Codec.java">Trac</a>, 
    48  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/codec/Codec.java">SVN</a></dd></dl> 
     47 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/codec/Codec.java">Trac</a>, 
     48 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/codec/Codec.java">SVN</a></dd></dl> 
    4949 * 
    5050 * @author Eric Kjellman egkjellman at wisc.edu 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/codec/CodecOptions.java

    r5329 r7044  
    2828 * 
    2929 * <dl><dt><b>Source code:</b></dt> 
    30  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/codec/CodecOptions.java">Trac</a>, 
    31  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/codec/CodecOptions.java">SVN</a></dd></dl> 
     30 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/codec/CodecOptions.java">Trac</a>, 
     31 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/codec/CodecOptions.java">SVN</a></dd></dl> 
    3232 */ 
    3333public class CodecOptions { 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/codec/HuffmanCodec.java

    r6495 r7044  
    3333 * 
    3434 * <dl><dt><b>Source code:</b></dt> 
    35  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/codec/HuffmanCodec.java">Trac</a>, 
    36  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/codec/HuffmanCodec.java">SVN</a></dd></dl> 
     35 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/codec/HuffmanCodec.java">Trac</a>, 
     36 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/codec/HuffmanCodec.java">SVN</a></dd></dl> 
    3737 * 
    3838 * @author Melissa Linkert melissa at glencoesoftware.com 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/codec/HuffmanCodecOptions.java

    r4953 r7044  
    2828 * 
    2929 * <dl><dt><b>Source code:</b></dt> 
    30  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/codec/HuffmanCodecOptions.java">Trac</a>, 
    31  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/codec/HuffmanCodecOptions.java">SVN</a></dd></dl> 
     30 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/codec/HuffmanCodecOptions.java">Trac</a>, 
     31 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/codec/HuffmanCodecOptions.java">SVN</a></dd></dl> 
    3232 */ 
    3333public class HuffmanCodecOptions extends CodecOptions { 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/codec/JPEG2000Codec.java

    r6153 r7044  
    4848 * <dl> 
    4949 * <dt><b>Source code:</b></dt> 
    50  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/codec/JPEG2000Codec.java" 
    51  * >Trac</a>, <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/loci/formats/codec/JPEGCodec.java" 
     50 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/codec/JPEG2000Codec.java" 
     51 * >Trac</a>, <a href="http://dev.loci.wisc.edu/svn/java/trunk/loci/formats/codec/JPEGCodec.java" 
    5252 * >SVN</a></dd> 
    5353 * </dl> 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/codec/JPEG2000CodecOptions.java

    r5329 r7044  
    2828 * 
    2929 * <dl><dt><b>Source code:</b></dt> 
    30  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/codec/JPEG2000CodecOptions.java">Trac</a>, 
    31  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/codec/JPEG2000CodecOptions.java">SVN</a></dd></dl> 
     30 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/codec/JPEG2000CodecOptions.java">Trac</a>, 
     31 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/codec/JPEG2000CodecOptions.java">SVN</a></dd></dl> 
    3232 */ 
    3333public class JPEG2000CodecOptions extends CodecOptions { 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/codec/JPEGCodec.java

    r5191 r7044  
    4141 * 
    4242 * <dl><dt><b>Source code:</b></dt> 
    43  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/codec/JPEGCodec.java">Trac</a>, 
    44  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/codec/JPEGCodec.java">SVN</a></dd></dl> 
     43 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/codec/JPEGCodec.java">Trac</a>, 
     44 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/codec/JPEGCodec.java">SVN</a></dd></dl> 
    4545 */ 
    4646public class JPEGCodec extends BaseCodec { 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/codec/LZOCodec.java

    r6495 r7044  
    3434 * 
    3535 * <dl><dt><b>Source code:</b></dt> 
    36  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/codec/LZOCodec.java">Trac</a>, 
    37  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/codec/LZOCodec.java">SVN</a></dd></dl> 
     36 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/codec/LZOCodec.java">Trac</a>, 
     37 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/codec/LZOCodec.java">SVN</a></dd></dl> 
    3838 * 
    3939 * @author Melissa Linkert melissa at glencoesoftware.com 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/codec/LZWCodec.java

    r5093 r7044  
    6666 * 
    6767 * <dl><dt><b>Source code:</b></dt> 
    68  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/codec/LZWCodec.java">Trac</a>, 
    69  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/codec/LZWCodec.java">SVN</a></dd></dl> 
     68 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/codec/LZWCodec.java">Trac</a>, 
     69 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/codec/LZWCodec.java">SVN</a></dd></dl> 
    7070 * 
    7171 * @author Mikhail Kovtun mikhail.kovtun at duke.edu 
     
    328328            // write string[curr_code] to output 
    329329            // -- but here we are sure that string consists of a single byte 
     330            if (currOutPos >= output.length - 1) break; 
    330331            output[currOutPos++] = newBytes[currCode]; 
    331332            oldCode = currCode; 
     
    337338          int i = currOutPos + outLength; 
    338339          int tablePos = currCode; 
     340          if (i > output.length) break; 
    339341          while (i > currOutPos) { 
    340342            output[--i] = newBytes[tablePos]; 
     
    355357          int i = currOutPos + outLength; 
    356358          int tablePos = oldCode; 
     359          if (i > output.length) break; 
    357360          while (i > currOutPos) { 
    358361            output[--i] = newBytes[tablePos]; 
     
    361364          currOutPos += outLength; 
    362365          // 2) Write firstByte(string[old_code]) to output 
     366          if (currOutPos >= output.length - 1) break; 
    363367          output[currOutPos++] = output[i]; 
    364368          // 3) Add string[old_code]+firstByte(string[old_code]) to the table 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/codec/LosslessJPEGCodec.java

    r6495 r7044  
    3535 * 
    3636 * <dl><dt><b>Source code:</b></dt> 
    37  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/codec/LosslessJPEGCodec.java">Trac</a>, 
    38  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/codec/LosslessJPEGCodec.java">SVN</a></dd></dl> 
     37 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/codec/LosslessJPEGCodec.java">Trac</a>, 
     38 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/codec/LosslessJPEGCodec.java">SVN</a></dd></dl> 
    3939 * 
    4040 * @author Melissa Linkert melissa at glencoesoftware.com 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/codec/LuraWaveCodec.java

    r6153 r7044  
    4545 * 
    4646 * <dl><dt><b>Source code:</b></dt> 
    47  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/codec/LuraWaveCodec.java">Trac</a>, 
    48  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/codec/LuraWaveCodec.java">SVN</a></dd></dl> 
     47 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/codec/LuraWaveCodec.java">Trac</a>, 
     48 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/codec/LuraWaveCodec.java">SVN</a></dd></dl> 
    4949 * 
    5050 * @author Curtis Rueden ctrueden at wisc.edu 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/codec/MJPBCodec.java

    r6349 r7044  
    3333 * 
    3434 * <dl><dt><b>Source code:</b></dt> 
    35  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/codec/MJPBCodec.java">Trac</a>, 
    36  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/codec/MJPBCodec.java">SVN</a></dd></dl> 
     35 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/codec/MJPBCodec.java">Trac</a>, 
     36 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/codec/MJPBCodec.java">SVN</a></dd></dl> 
    3737 */ 
    3838public class MJPBCodec extends BaseCodec { 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/codec/MJPBCodecOptions.java

    r4953 r7044  
    2828 * 
    2929 * <dl><dt><b>Source code:</b></dt> 
    30  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/codec/MJPBCodecOptions.java">Trac</a>, 
    31  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/codec/MJPBCodecOptions.java">SVN</a></dd></dl> 
     30 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/codec/MJPBCodecOptions.java">Trac</a>, 
     31 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/codec/MJPBCodecOptions.java">SVN</a></dd></dl> 
    3232 */ 
    3333public class MJPBCodecOptions extends CodecOptions { 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/codec/MSRLECodec.java

    r5093 r7044  
    3333 * 
    3434 * <dl><dt><b>Source code:</b></dt> 
    35  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/codec/MSRLECodec.java">Trac</a>, 
    36  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/codec/MSRLECodec.java">SVN</a></dd></dl> 
     35 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/codec/MSRLECodec.java">Trac</a>, 
     36 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/codec/MSRLECodec.java">SVN</a></dd></dl> 
    3737 */ 
    3838public class MSRLECodec extends BaseCodec { 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/codec/MSVideoCodec.java

    r5093 r7044  
    3636 * 
    3737 * <dl><dt><b>Source code:</b></dt> 
    38  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/codec/MSVideoCodec.java">Trac</a>, 
    39  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/codec/MSVideoCodec.java">SVN</a></dd></dl> 
     38 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/codec/MSVideoCodec.java">Trac</a>, 
     39 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/codec/MSVideoCodec.java">SVN</a></dd></dl> 
    4040 */ 
    4141public class MSVideoCodec extends BaseCodec { 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/codec/NikonCodec.java

    r6495 r7044  
    3838 * 
    3939 * <dl><dt><b>Source code:</b></dt> 
    40  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/codec/NikonCodec.java">Trac</a>, 
    41  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/codec/NikonCodec.java">SVN</a></dd></dl> 
     40 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/codec/NikonCodec.java">Trac</a>, 
     41 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/codec/NikonCodec.java">SVN</a></dd></dl> 
    4242 * 
    4343 * @author Melissa Linkert melissa at glencoesoftware.com 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/codec/NikonCodecOptions.java

    r4953 r7044  
    2828 * 
    2929 * <dl><dt><b>Source code:</b></dt> 
    30  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/codec/NikonCodecOptions.java">Trac</a>, 
    31  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/codec/NikonCodecOptions.java">SVN</a></dd></dl> 
     30 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/codec/NikonCodecOptions.java">Trac</a>, 
     31 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/codec/NikonCodecOptions.java">SVN</a></dd></dl> 
    3232 */ 
    3333public class NikonCodecOptions extends CodecOptions { 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/codec/PackbitsCodec.java

    r6495 r7044  
    3636 * 
    3737 * <dl><dt><b>Source code:</b></dt> 
    38  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/codec/PackbitsCodec.java">Trac</a>, 
    39  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/codec/PackbitsCodec.java">SVN</a></dd></dl> 
     38 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/codec/PackbitsCodec.java">Trac</a>, 
     39 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/codec/PackbitsCodec.java">SVN</a></dd></dl> 
    4040 * 
    4141 * @author Melissa Linkert melissa at glencoesoftware.com 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/codec/PassthroughCodec.java

    r6026 r7044  
    3434 * 
    3535 * <dl><dt><b>Source code:</b></dt> 
    36  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/codec/PassthroughCodec.java">Trac</a>, 
    37  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/codec/PassthroughCodec.java">SVN</a></dd></dl> 
     36 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/codec/PassthroughCodec.java">Trac</a>, 
     37 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/codec/PassthroughCodec.java">SVN</a></dd></dl> 
    3838 */ 
    3939public class PassthroughCodec extends BaseCodec { 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/codec/QTRLECodec.java

    r6026 r7044  
    3434 * 
    3535 * <dl><dt><b>Source code:</b></dt> 
    36  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/codec/QTRLECodec.java">Trac</a>, 
    37  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/codec/QTRLECodec.java">SVN</a></dd></dl> 
     36 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/codec/QTRLECodec.java">Trac</a>, 
     37 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/codec/QTRLECodec.java">SVN</a></dd></dl> 
    3838 */ 
    3939public class QTRLECodec extends BaseCodec { 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/codec/RPZACodec.java

    r5093 r7044  
    3434 * 
    3535 * <dl><dt><b>Source code:</b></dt> 
    36  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/codec/RPZACodec.java">Trac</a>, 
    37  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/codec/RPZACodec.java">SVN</a></dd></dl> 
     36 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/codec/RPZACodec.java">Trac</a>, 
     37 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/codec/RPZACodec.java">SVN</a></dd></dl> 
    3838 */ 
    3939public class RPZACodec extends BaseCodec { 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/codec/TargaRLECodec.java

    r6495 r7044  
    3636 * 
    3737 * <dl><dt><b>Source code:</b></dt> 
    38  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/codec/TargaRLECodec.java">Trac</a>, 
    39  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/codec/TargaRLECodec.java">SVN</a></dd></dl> 
     38 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/codec/TargaRLECodec.java">Trac</a>, 
     39 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/codec/TargaRLECodec.java">SVN</a></dd></dl> 
    4040 * 
    4141 * @author Melissa Linkert melissa at glencoesoftware.com 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/codec/ZlibCodec.java

    r6495 r7044  
    3636 * 
    3737 * <dl><dt><b>Source code:</b></dt> 
    38  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/codec/ZlibCodec.java">Trac</a>, 
    39  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/codec/ZlibCodec.java">SVN</a></dd></dl> 
     38 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/codec/ZlibCodec.java">Trac</a>, 
     39 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/codec/ZlibCodec.java">SVN</a></dd></dl> 
    4040 * 
    4141 * @author Melissa Linkert melissa at glencoesoftware.com 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/gui/AWTImageTools.java

    r6679 r7044  
    8484 * 
    8585 * <dl><dt><b>Source code:</b></dt> 
    86  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/gui/AWTImageTools.java">Trac</a>, 
    87  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/gui/AWTImageTools.java">SVN</a></dd></dl> 
     86 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/gui/AWTImageTools.java">Trac</a>, 
     87 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/gui/AWTImageTools.java">SVN</a></dd></dl> 
    8888 * 
    8989 * @author Curtis Rueden ctrueden at wisc.edu 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/gui/BufferedImageReader.java

    r5590 r7044  
    3535 * 
    3636 * <dl><dt><b>Source code:</b></dt> 
    37  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/gui/BufferedImageReader.java">Trac</a>, 
    38  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/gui/BufferedImageReader.java">SVN</a></dd></dl> 
     37 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/gui/BufferedImageReader.java">Trac</a>, 
     38 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/gui/BufferedImageReader.java">SVN</a></dd></dl> 
    3939 */ 
    4040public class BufferedImageReader extends ReaderWrapper { 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/gui/BufferedImageSource.java

    r5191 r7044  
    3939 * 
    4040 * <dl><dt><b>Source code:</b></dt> 
    41  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/gui/BufferedImageSource.java">Trac</a>, 
    42  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/gui/BufferedImageSource.java">SVN</a></dd></dl> 
     41 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/gui/BufferedImageSource.java">Trac</a>, 
     42 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/gui/BufferedImageSource.java">SVN</a></dd></dl> 
    4343 */ 
    4444public class BufferedImageSource implements ICacheSource { 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/gui/BufferedImageWriter.java

    r6747 r7044  
    3737 * 
    3838 * <dl><dt><b>Source code:</b></dt> 
    39  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/gui/BufferedImageWriter.java">Trac</a>, 
    40  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/gui/BufferedImageWriter.java">SVN</a></dd></dl> 
     39 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/gui/BufferedImageWriter.java">Trac</a>, 
     40 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/gui/BufferedImageWriter.java">SVN</a></dd></dl> 
    4141 */ 
    4242public class BufferedImageWriter extends WriterWrapper { 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/gui/CacheComponent.java

    r6128 r7044  
    5959 * 
    6060 * <dl><dt><b>Source code:</b></dt> 
    61  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/gui/CacheComponent.java">Trac</a>, 
    62  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/gui/CacheComponent.java">SVN</a></dd></dl> 
     61 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/gui/CacheComponent.java">Trac</a>, 
     62 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/gui/CacheComponent.java">SVN</a></dd></dl> 
    6363 */ 
    6464public class CacheComponent extends JPanel 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/gui/CacheIndicator.java

    r5093 r7044  
    4242 * 
    4343 * <dl><dt><b>Source code:</b></dt> 
    44  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/gui/CacheIndicator.java">Trac</a>, 
    45  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/gui/CacheIndicator.java">SVN</a></dd></dl> 
     44 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/gui/CacheIndicator.java">Trac</a>, 
     45 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/gui/CacheIndicator.java">SVN</a></dd></dl> 
    4646 */ 
    4747public class CacheIndicator extends JComponent implements CacheListener { 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/gui/ComboFileFilter.java

    r5093 r7044  
    3535 * 
    3636 * <dl><dt><b>Source code:</b></dt> 
    37  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/gui/ComboFileFilter.java">Trac</a>, 
    38  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/gui/ComboFileFilter.java">SVN</a></dd></dl> 
     37 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/gui/ComboFileFilter.java">Trac</a>, 
     38 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/gui/ComboFileFilter.java">SVN</a></dd></dl> 
    3939 */ 
    4040public class ComboFileFilter extends FileFilter 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/gui/DataConverter.java

    r6516 r7044  
    6767 * 
    6868 * <dl><dt><b>Source code:</b></dt> 
    69  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/gui/DataConverter.java">Trac</a>, 
    70  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/gui/DataConverter.java">SVN</a></dd></dl> 
     69 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/gui/DataConverter.java">Trac</a>, 
     70 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/gui/DataConverter.java">SVN</a></dd></dl> 
    7171 */ 
    7272public class DataConverter extends JFrame implements 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/gui/ExtensionFileFilter.java

    r5093 r7044  
    3232 * 
    3333 * <dl><dt><b>Source code:</b></dt> 
    34  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/gui/ExtensionFileFilter.java">Trac</a>, 
    35  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/gui/ExtensionFileFilter.java">SVN</a></dd></dl> 
     34 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/gui/ExtensionFileFilter.java">Trac</a>, 
     35 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/gui/ExtensionFileFilter.java">SVN</a></dd></dl> 
    3636 */ 
    3737public class ExtensionFileFilter extends FileFilter 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/gui/FormatFileFilter.java

    r5554 r7044  
    3434 * 
    3535 * <dl><dt><b>Source code:</b></dt> 
    36  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/gui/FormatFileFilter.java">Trac</a>, 
    37  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/gui/FormatFileFilter.java">SVN</a></dd></dl> 
     36 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/gui/FormatFileFilter.java">Trac</a>, 
     37 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/gui/FormatFileFilter.java">SVN</a></dd></dl> 
    3838 */ 
    3939public class FormatFileFilter extends FileFilter 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/gui/GUITools.java

    r5093 r7044  
    4343 * 
    4444 * <dl><dt><b>Source code:</b></dt> 
    45  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/gui/GUITools.java">Trac</a>, 
    46  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/gui/GUITools.java">SVN</a></dd></dl> 
     45 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/gui/GUITools.java">Trac</a>, 
     46 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/gui/GUITools.java">SVN</a></dd></dl> 
    4747 * 
    4848 * @author Curtis Rueden ctrueden at wisc.edu 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/gui/ImageViewer.java

    r6774 r7044  
    9292 * 
    9393 * <dl><dt><b>Source code:</b></dt> 
    94  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/gui/ImageViewer.java">Trac</a>, 
    95  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/gui/ImageViewer.java">SVN</a></dd></dl> 
     94 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/gui/ImageViewer.java">Trac</a>, 
     95 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/gui/ImageViewer.java">SVN</a></dd></dl> 
    9696 * 
    9797 * @author Curtis Rueden ctrueden at wisc.edu 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/gui/Index16ColorModel.java

    r6026 r7044  
    3636 * 
    3737 * <dl><dt><b>Source code:</b></dt> 
    38  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/gui/Index16ColorModel.java">Trac</a>, 
    39  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/gui/Index16ColorModel.java">SVN</a></dd></dl> 
     38 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/gui/Index16ColorModel.java">Trac</a>, 
     39 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/gui/Index16ColorModel.java">SVN</a></dd></dl> 
    4040 */ 
    4141public class Index16ColorModel extends ColorModel { 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/gui/LegacyQTTools.java

    r6026 r7044  
    4747 * 
    4848 * <dl><dt><b>Source code:</b></dt> 
    49  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/gui/LegacyQTTools.java">Trac</a>, 
    50  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/gui/LegacyQTTools.java">SVN</a></dd></dl> 
     49 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/gui/LegacyQTTools.java">Trac</a>, 
     50 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/gui/LegacyQTTools.java">SVN</a></dd></dl> 
    5151 */ 
    5252public class LegacyQTTools { 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/gui/NoExtensionFileFilter.java

    r5093 r7044  
    3333 * 
    3434 * <dl><dt><b>Source code:</b></dt> 
    35  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/gui/NoExtensionFileFilter.java">Trac</a>, 
    36  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/gui/NoExtensionFileFilter.java">SVN</a></dd></dl> 
     35 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/gui/NoExtensionFileFilter.java">Trac</a>, 
     36 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/gui/NoExtensionFileFilter.java">SVN</a></dd></dl> 
    3737 */ 
    3838public class NoExtensionFileFilter extends FileFilter 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/gui/PreviewPane.java

    r6026 r7044  
    5454 * 
    5555 * <dl><dt><b>Source code:</b></dt> 
    56  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/gui/PreviewPane.java">Trac</a>, 
    57  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/gui/PreviewPane.java">SVN</a></dd></dl> 
     56 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/gui/PreviewPane.java">Trac</a>, 
     57 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/gui/PreviewPane.java">SVN</a></dd></dl> 
    5858 */ 
    5959public class PreviewPane extends JPanel 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/gui/SignedByteBuffer.java

    r6495 r7044  
    3030 * 
    3131 * <dl><dt><b>Source code:</b></dt> 
    32  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/gui/SignedByteBuffer.java">Trac</a>, 
    33  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/gui/SignedByteBuffer.java">SVN</a></dd></dl> 
     32 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/gui/SignedByteBuffer.java">Trac</a>, 
     33 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/gui/SignedByteBuffer.java">SVN</a></dd></dl> 
    3434 * 
    3535 * @author Melissa Linkert melissa at glencoesoftware.com 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/gui/SignedColorModel.java

    r5351 r7044  
    3838 * 
    3939 * <dl><dt><b>Source code:</b></dt> 
    40  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/gui/SignedColorModel.java">Trac</a>, 
    41  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/gui/SignedColorModel.java">SVN</a></dd></dl> 
     40 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/gui/SignedColorModel.java">Trac</a>, 
     41 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/gui/SignedColorModel.java">SVN</a></dd></dl> 
    4242 */ 
    4343public class SignedColorModel extends ColorModel { 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/gui/SignedShortBuffer.java

    r5914 r7044  
    3737 * 
    3838 * <dl><dt><b>Source code:</b></dt> 
    39  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/gui/SignedShortBuffer.java">Trac</a>, 
    40  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/gui/SignedShortBuffer.java">SVN</a></dd></dl> 
     39 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/gui/SignedShortBuffer.java">Trac</a>, 
     40 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/gui/SignedShortBuffer.java">SVN</a></dd></dl> 
    4141 */ 
    4242public class SignedShortBuffer extends DataBuffer { 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/gui/TwoChannelColorSpace.java

    r6495 r7044  
    3030 * 
    3131 * <dl><dt><b>Source code:</b></dt> 
    32  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/gui/TwoChannelColorSpace.java">Trac</a>, 
    33  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/gui/TwoChannelColorSpace.java">SVN</a></dd></dl> 
     32 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/gui/TwoChannelColorSpace.java">Trac</a>, 
     33 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/gui/TwoChannelColorSpace.java">SVN</a></dd></dl> 
    3434 * 
    3535 * @author Melissa Linkert melissa at glencoesoftware.com 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/gui/UnsignedIntBuffer.java

    r6495 r7044  
    3030 * 
    3131 * <dl><dt><b>Source code:</b></dt> 
    32  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/gui/UnsignedIntBuffer.java">Trac</a>, 
    33  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/gui/UnsignedIntBuffer.java">SVN</a></dd></dl> 
     32 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/gui/UnsignedIntBuffer.java">Trac</a>, 
     33 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/gui/UnsignedIntBuffer.java">SVN</a></dd></dl> 
    3434 * 
    3535 * @author Melissa Linkert melissa at glencoesoftware.com 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/gui/UnsignedIntColorModel.java

    r5873 r7044  
    3838 * 
    3939 * <dl><dt><b>Source code:</b></dt> 
    40  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/gui/UnsignedIntColorModel.java">Trac</a>, 
    41  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/gui/UnsignedIntColorModel.java">SVN</a></dd></dl> 
     40 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/gui/UnsignedIntColorModel.java">Trac</a>, 
     41 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/gui/UnsignedIntColorModel.java">SVN</a></dd></dl> 
    4242 */ 
    4343public class UnsignedIntColorModel extends ColorModel { 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/gui/XMLCellRenderer.java

    r5093 r7044  
    4343 * 
    4444 * <dl><dt><b>Source code:</b></dt> 
    45  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/gui/XMLCellRenderer.java">Trac</a>, 
    46  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/gui/XMLCellRenderer.java">SVN</a></dd></dl> 
     45 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/gui/XMLCellRenderer.java">Trac</a>, 
     46 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/gui/XMLCellRenderer.java">SVN</a></dd></dl> 
    4747 * 
    4848 * @author Curtis Rueden ctrueden at wisc.edu 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/gui/XMLWindow.java

    r5093 r7044  
    4646 * 
    4747 * <dl><dt><b>Source code:</b></dt> 
    48  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/gui/XMLWindow.java">Trac</a>, 
    49  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/gui/XMLWindow.java">SVN</a></dd></dl> 
     48 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/gui/XMLWindow.java">Trac</a>, 
     49 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/gui/XMLWindow.java">SVN</a></dd></dl> 
    5050 * 
    5151 * @author Curtis Rueden ctrueden at wisc.edu 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/in/APLReader.java

    r6735 r7044  
    4444 * 
    4545 * <dl><dt><b>Source code:</b></dt> 
    46  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/in/APLReader.java">Trac</a>, 
    47  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/in/APLReader.java">SVN</a></dd></dl> 
     46 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/in/APLReader.java">Trac</a>, 
     47 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/in/APLReader.java">SVN</a></dd></dl> 
    4848 */ 
    4949public class APLReader extends FormatReader { 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/in/APNGReader.java

    r6495 r7044  
    4949 * 
    5050 * <dl><dt><b>Source code:</b></dt> 
    51  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/in/APNGReader.java">Trac</a>, 
    52  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/in/APNGReader.java">SVN</a></dd></dl> 
     51 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/in/APNGReader.java">Trac</a>, 
     52 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/in/APNGReader.java">SVN</a></dd></dl> 
    5353 * 
    5454 * @author Melissa Linkert melissa at glencoesoftware.com 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/in/ARFReader.java

    r6655 r7044  
    4040 * 
    4141 * <dl><dt><b>Source code:</b></dt> 
    42  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/in/ARFReader.java">Trac</a>, 
    43  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/in/ARFReader.java">SVN</a></dd></dl> 
     42 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/in/ARFReader.java">Trac</a>, 
     43 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/in/ARFReader.java">SVN</a></dd></dl> 
    4444 * 
    4545 * @author Johannes Schindelin johannes.schindelin at gmx.de 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/in/AVIReader.java

    r6754 r7044  
    4646 * 
    4747 * <dl><dt><b>Source code:</b></dt> 
    48  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/in/AVIReader.java">Trac</a>, 
    49  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/in/AVIReader.java">SVN</a></dd></dl> 
     48 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/in/AVIReader.java">Trac</a>, 
     49 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/in/AVIReader.java">SVN</a></dd></dl> 
    5050 */ 
    5151public class AVIReader extends FormatReader { 
     
    6868  private Vector<Long> lengths; 
    6969 
     70  private String listString; 
    7071  private String type = "error"; 
    7172  private String fcc = "error"; 
     
    210211    super.close(fileOnly); 
    211212    if (!fileOnly) { 
     213      listString = null; 
    212214      offsets = null; 
    213215      lengths = null; 
     
    239241    lastImageNo = -1; 
    240242 
    241     String listString; 
    242  
     243    while (in.getFilePointer() < in.length() - 8) { 
     244      readChunk(); 
     245    } 
     246    LOGGER.info("Populating metadata"); 
     247 
     248    core[0].imageCount = offsets.size(); 
     249    core[0].sizeZ = 1; 
     250    core[0].sizeT = getImageCount(); 
     251    core[0].littleEndian = true; 
     252    core[0].interleaved = bmpBitsPerPixel != 16; 
     253 
     254    if (bmpBitsPerPixel == 32) { 
     255      core[0].sizeC = 4; 
     256      core[0].rgb = true; 
     257    } 
     258    else if (bytesPerPlane == 0 || bmpBitsPerPixel == 24) { 
     259      core[0].rgb = bmpBitsPerPixel > 8 || (bmpCompression != 0 && lut == null); 
     260      core[0].sizeC = isRGB() ? 3 : 1; 
     261    } 
     262    else { 
     263      core[0].sizeC = bytesPerPlane / 
     264        (getSizeX() * getSizeY() * (bmpBitsPerPixel / 8)); 
     265      core[0].rgb = getSizeC() > 1; 
     266    } 
     267    core[0].dimensionOrder = isRGB() ? "XYCTZ" : "XYTCZ"; 
     268    core[0].falseColor = false; 
     269    core[0].metadataComplete = true; 
     270    core[0].indexed = lut != null && !isRGB(); 
     271 
     272    if (bmpBitsPerPixel <= 8) { 
     273      core[0].pixelType = FormatTools.UINT8; 
     274      core[0].bitsPerPixel = bmpBitsPerPixel; 
     275    } 
     276    else if (bmpBitsPerPixel == 16) core[0].pixelType = FormatTools.UINT16; 
     277    else if (bmpBitsPerPixel == 24 || bmpBitsPerPixel == 32) { 
     278      core[0].pixelType = FormatTools.UINT8; 
     279    } 
     280    else { 
     281      throw new FormatException( 
     282          "Unknown matching for pixel bit width of: " + bmpBitsPerPixel); 
     283    } 
     284 
     285    if (bmpCompression != 0) core[0].pixelType = FormatTools.UINT8; 
     286 
     287    MetadataStore store = makeFilterMetadata(); 
     288    MetadataTools.populatePixels(store, this); 
     289    MetadataTools.setDefaultCreationDate(store, id, 0); 
     290  } 
     291 
     292  // -- Helper methods -- 
     293 
     294  private byte[] uncompress(int no, byte[] buf) 
     295    throws FormatException, IOException 
     296  { 
     297    CodecOptions options = new CodecOptions(); 
     298    options.width = getSizeX(); 
     299    options.height = getSizeY(); 
     300    options.previousImage = (lastImageNo == no - 1) ? lastImage : null; 
     301    options.bitsPerSample = bmpBitsPerPixel; 
     302 
     303    if (bmpCompression == MSRLE) { 
     304      byte[] b = new byte[(int) lengths.get(no).longValue()]; 
     305      in.read(b); 
     306      MSRLECodec codec = new MSRLECodec(); 
     307      buf = codec.decompress(b, options); 
     308      lastImage = buf; 
     309      lastImageNo = no; 
     310    } 
     311    else if (bmpCompression == MS_VIDEO) { 
     312      MSVideoCodec codec = new MSVideoCodec(); 
     313      buf = codec.decompress(in, options); 
     314      lastImage = buf; 
     315      lastImageNo = no; 
     316    } 
     317    /* 
     318    else if (bmpCompression == CINEPAK) { 
     319      Object[] options = new Object[2]; 
     320      options[0] = new Integer(bmpBitsPerPixel); 
     321      options[1] = lastImage; 
     322 
     323      CinepakCodec codec = new CinepakCodec(); 
     324      buf = codec.decompress(b, options); 
     325      lastImage = buf; 
     326      if (no == core[0].imageCount - 1) lastImage = null; 
     327      return buf; 
     328    } 
     329    */ 
     330    else { 
     331      throw new FormatException("Unsupported compression : " + bmpCompression); 
     332    } 
     333    return buf; 
     334  } 
     335 
     336  private void readChunkHeader() throws IOException { 
     337    readTypeAndSize(); 
     338    fcc = in.readString(4); 
     339  } 
     340 
     341  private void readTypeAndSize() throws IOException { 
     342    type = in.readString(4); 
     343    size = in.readInt(); 
     344  } 
     345 
     346  private void readChunk() throws FormatException, IOException { 
    243347    readChunkHeader(); 
    244348 
    245349    if (type.equals("RIFF")) { 
    246       if (!fcc.equals("AVI ")) { 
     350      if (!fcc.startsWith("AVI")) { 
    247351        throw new FormatException("Sorry, AVI RIFF format not found."); 
    248352      } 
    249353    } 
    250     else throw new FormatException("Not an AVI file"); 
     354    else if (in.getFilePointer() == 12) { 
     355      throw new FormatException("Not an AVI file"); 
     356    } 
     357    else return; 
    251358 
    252359    pos = in.getFilePointer(); 
     
    441548 
    442549              spos = in.getFilePointer(); 
    443               readTypeAndSize(); 
    444               if (type.startsWith("ix")) { 
    445                 in.skipBytes(size); 
     550              boolean end = false; 
     551              while (!end) { 
    446552                readTypeAndSize(); 
     553                String oldType = type; 
     554                if (type.startsWith("ix")) { 
     555                  in.skipBytes(size); 
     556                  readTypeAndSize(); 
     557                } 
     558 
     559                String check = type.substring(2); 
     560                boolean foundPixels = false; 
     561                while (check.equals("db") || check.equals("dc") || 
     562                  check.equals("wb")) 
     563                { 
     564                  foundPixels = true; 
     565                  if (check.startsWith("d")) { 
     566                    if (size > 0 || bmpCompression != 0) { 
     567                      offsets.add(new Long(in.getFilePointer())); 
     568                      lengths.add(new Long(size)); 
     569                      in.skipBytes(size); 
     570                    } 
     571                  } 
     572 
     573                  spos = in.getFilePointer(); 
     574                  if (spos + 8 >= in.length()) return; 
     575 
     576                  readTypeAndSize(); 
     577                  if (type.equals("JUNK")) { 
     578                    in.skipBytes(size); 
     579                    spos = in.getFilePointer(); 
     580                    readTypeAndSize(); 
     581                  } 
     582                  check = type.substring(2); 
     583                } 
     584                in.seek(spos); 
     585                if (!oldType.startsWith("ix") && !foundPixels) { 
     586                  end = true; 
     587                } 
    447588              } 
    448  
    449               String check = type.substring(2); 
    450               while (check.equals("db") || check.equals("dc") || 
    451                 check.equals("wb")) 
    452               { 
    453                 if (check.startsWith("d")) { 
    454                   if (size > 0 || bmpCompression != 0) { 
    455                     offsets.add(new Long(in.getFilePointer())); 
    456                     lengths.add(new Long(size)); 
    457                     in.skipBytes(size); 
    458                   } 
    459                 } 
    460  
    461                 spos = in.getFilePointer(); 
    462  
    463                 readTypeAndSize(); 
    464                 if (type.equals("JUNK")) { 
    465                   in.skipBytes(size); 
    466                   spos = in.getFilePointer(); 
    467                   readTypeAndSize(); 
    468                 } 
    469                 check = type.substring(2); 
    470               } 
    471               in.seek(spos); 
    472589            } 
    473590          } 
     
    481598        // skipping unknown block 
    482599        readTypeAndSize(); 
    483         if (in.getFilePointer() + 8 < in.length()) { 
     600        if (in.getFilePointer() + 8 < in.length() && !type.equals("idx1")) { 
    484601          readTypeAndSize(); 
    485602        } 
    486         else break; 
     603        else if (!type.equals("idx1")) break; 
    487604        if (in.getFilePointer() + size + 4 <= in.length()) { 
    488605          in.skipBytes(size); 
    489606        } 
     607        if (type.equals("idx1")) break; 
    490608      } 
    491609      pos = in.getFilePointer(); 
    492610    } 
    493     LOGGER.info("Populating metadata"); 
    494  
    495     core[0].imageCount = offsets.size(); 
    496     core[0].sizeZ = 1; 
    497     core[0].sizeT = getImageCount(); 
    498     core[0].littleEndian = true; 
    499     core[0].interleaved = bmpBitsPerPixel != 16; 
    500  
    501     if (bmpBitsPerPixel == 32) { 
    502       core[0].sizeC = 4; 
    503       core[0].rgb = true; 
    504     } 
    505     else if (bytesPerPlane == 0 || bmpBitsPerPixel == 24) { 
    506       core[0].rgb = bmpBitsPerPixel > 8 || (bmpCompression != 0 && lut == null); 
    507       core[0].sizeC = isRGB() ? 3 : 1; 
    508     } 
    509     else { 
    510       core[0].sizeC = bytesPerPlane / 
    511         (getSizeX() * getSizeY() * (bmpBitsPerPixel / 8)); 
    512       core[0].rgb = getSizeC() > 1; 
    513     } 
    514     core[0].dimensionOrder = isRGB() ? "XYCTZ" : "XYTCZ"; 
    515     core[0].falseColor = false; 
    516     core[0].metadataComplete = true; 
    517     core[0].indexed = lut != null && !isRGB(); 
    518  
    519     if (bmpBitsPerPixel <= 8) { 
    520       core[0].pixelType = FormatTools.UINT8; 
    521       core[0].bitsPerPixel = bmpBitsPerPixel; 
    522     } 
    523     else if (bmpBitsPerPixel == 16) core[0].pixelType = FormatTools.UINT16; 
    524     else if (bmpBitsPerPixel == 24 || bmpBitsPerPixel == 32) { 
    525       core[0].pixelType = FormatTools.UINT8; 
    526     } 
    527     else { 
    528       throw new FormatException( 
    529           "Unknown matching for pixel bit width of: " + bmpBitsPerPixel); 
    530     } 
    531  
    532     if (bmpCompression != 0) core[0].pixelType = FormatTools.UINT8; 
    533  
    534     MetadataStore store = makeFilterMetadata(); 
    535     MetadataTools.populatePixels(store, this); 
    536     MetadataTools.setDefaultCreationDate(store, id, 0); 
    537   } 
    538  
    539   // -- Helper methods -- 
    540  
    541   private byte[] uncompress(int no, byte[] buf) 
    542     throws FormatException, IOException 
    543   { 
    544     CodecOptions options = new CodecOptions(); 
    545     options.width = getSizeX(); 
    546     options.height = getSizeY(); 
    547     options.previousImage = (lastImageNo == no - 1) ? lastImage : null; 
    548     options.bitsPerSample = bmpBitsPerPixel; 
    549  
    550     if (bmpCompression == MSRLE) { 
    551       byte[] b = new byte[(int) lengths.get(no).longValue()]; 
    552       in.read(b); 
    553       MSRLECodec codec = new MSRLECodec(); 
    554       buf = codec.decompress(b, options); 
    555       lastImage = buf; 
    556       lastImageNo = no; 
    557     } 
    558     else if (bmpCompression == MS_VIDEO) { 
    559       MSVideoCodec codec = new MSVideoCodec(); 
    560       buf = codec.decompress(in, options); 
    561       lastImage = buf; 
    562       lastImageNo = no; 
    563     } 
    564     /* 
    565     else if (bmpCompression == CINEPAK) { 
    566       Object[] options = new Object[2]; 
    567       options[0] = new Integer(bmpBitsPerPixel); 
    568       options[1] = lastImage; 
    569  
    570       CinepakCodec codec = new CinepakCodec(); 
    571       buf = codec.decompress(b, options); 
    572       lastImage = buf; 
    573       if (no == core[0].imageCount - 1) lastImage = null; 
    574       return buf; 
    575     } 
    576     */ 
    577     else { 
    578       throw new FormatException("Unsupported compression : " + bmpCompression); 
    579     } 
    580     return buf; 
    581   } 
    582  
    583   private void readChunkHeader() throws IOException { 
    584     readTypeAndSize(); 
    585     fcc = in.readString(4); 
    586   } 
    587  
    588   private void readTypeAndSize() throws IOException { 
    589     type = in.readString(4); 
    590     size = in.readInt(); 
    591611  } 
    592612 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/in/AliconaReader.java

    r6655 r7044  
    3737 * 
    3838 * <dl><dt><b>Source code:</b></dt> 
    39  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/in/AliconaReader.java">Trac</a>, 
    40  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/in/AliconaReader.java">SVN</a></dd></dl> 
     39 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/in/AliconaReader.java">Trac</a>, 
     40 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/in/AliconaReader.java">SVN</a></dd></dl> 
    4141 */ 
    4242public class AliconaReader extends FormatReader { 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/in/AmiraReader.java

    r6695 r7044  
    4545 * 
    4646 * <dl><dt><b>Source code:</b></dt> 
    47  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/in/AmiraReader.java">Trac</a>, 
    48  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/in/AmiraReader.java">SVN</a></dd></dl> 
     47 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/in/AmiraReader.java">Trac</a>, 
     48 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/in/AmiraReader.java">SVN</a></dd></dl> 
    4949 * 
    5050 * @author Gregory Jefferis jefferis at gmail.com 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/in/AnalyzeReader.java

    r6763 r7044  
    3838 * 
    3939 * <dl><dt><b>Source code:</b></dt> 
    40  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/in/AnalyzeReader.java">Trac</a>, 
    41  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/in/AnalyzeReader.java">SVN</a></dd></dl> 
     40 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/in/AnalyzeReader.java">Trac</a>, 
     41 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/in/AnalyzeReader.java">SVN</a></dd></dl> 
    4242 * 
    4343 * @author Melissa Linkert melissa at glencoesoftware.com 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/in/BDReader.java

    r6746 r7044  
    2929import java.io.FileReader; 
    3030import java.io.IOException; 
     31import java.io.StringReader; 
    3132import java.util.Arrays; 
     33import java.util.HashMap; 
    3234import java.util.Vector; 
    3335 
     
    5456 * 
    5557 * <dl><dt><b>Source code:</b></dt> 
    56  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/in/BDReader.java">Trac</a>, 
    57  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/in/BDReader.java">SVN</a></dd></dl> 
     58 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/in/BDReader.java">Trac</a>, 
     59 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/in/BDReader.java">SVN</a></dd></dl> 
    5860 * 
    5961 * @author Shawn Garbett  Shawn.Garbett a t Vanderbilt.edu 
     
    251253 
    252254    reader.close(); 
     255 
     256    if (getMetadataOptions().getMetadataLevel() != MetadataLevel.MINIMUM) { 
     257      IniParser parser = new IniParser(); 
     258      for (String metadataFile : metadataFiles) { 
     259        String filename = new Location(metadataFile).getName(); 
     260        if (!checkSuffix(metadataFile, "txt")) { 
     261          String data = DataTools.readFile(metadataFile); 
     262          IniList ini = 
     263            parser.parseINI(new BufferedReader(new StringReader(data))); 
     264          HashMap<String, String> h = ini.flattenIntoHashMap(); 
     265          for (String key : h.keySet()) { 
     266            addGlobalMeta(filename + " " + key, h.get(key)); 
     267          } 
     268        } 
     269      } 
     270    } 
    253271 
    254272    for (int i=0; i<getSeriesCount(); i++) { 
     
    280298      Integer col = Integer.parseInt(name.substring(1)); 
    281299 
     300      store.setWellID(MetadataTools.createLSID("Well", 0, i), 0, i); 
    282301      store.setWellColumn(new NonNegativeInteger(col - 1), 0, i); 
    283302      store.setWellRow(new NonNegativeInteger(row.charAt(0) - 'A'), 0, i); 
    284303 
     304      String wellSampleID = MetadataTools.createLSID("WellSample", 0, i, 0); 
     305      store.setWellSampleID(wellSampleID, 0, i, 0); 
    285306      store.setWellSampleIndex(new NonNegativeInteger(i), 0, i, 0); 
    286307 
     
    347368      } 
    348369 
     370      store.setPlateID(MetadataTools.createLSID("Plate", 0), 0); 
    349371      store.setPlateRowNamingConvention(getNamingConvention("Letter"), 0); 
    350372      store.setPlateColumnNamingConvention(getNamingConvention("Number"), 0); 
     
    524546 
    525547      if (cols[2].trim().length() > 0) { 
     548        String rectangleID = MetadataTools.createLSID("Shape", i - firstRow, 0); 
     549        store.setRectangleID(rectangleID, i - firstRow, 0); 
    526550        store.setRectangleX(new Double(cols[2]), i - firstRow, 0); 
    527551        store.setRectangleY(new Double(cols[3]), i - firstRow, 0); 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/in/BIFormatReader.java

    r6141 r7044  
    3737 * 
    3838 * <dl><dt><b>Source code:</b></dt> 
    39  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/in/BIFormatReader.java">Trac</a>, 
    40  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/in/BIFormatReader.java">SVN</a></dd></dl> 
     39 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/in/BIFormatReader.java">Trac</a>, 
     40 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/in/BIFormatReader.java">SVN</a></dd></dl> 
    4141 * 
    4242 * @author Curtis Rueden ctrueden at wisc.edu 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/in/BMPReader.java

    r6655 r7044  
    4141 * 
    4242 * <dl><dt><b>Source code:</b></dt> 
    43  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/in/BMPReader.java">Trac</a>, 
    44  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/in/BMPReader.java">SVN</a></dd></dl> 
     43 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/in/BMPReader.java">Trac</a>, 
     44 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/in/BMPReader.java">SVN</a></dd></dl> 
    4545 * 
    4646 * @author Melissa Linkert melissa at glencoesoftware.com 
     
    7171  /** Offset to image data. */ 
    7272  private long global; 
     73 
     74  private boolean invertY = false; 
    7375 
    7476  // -- Constructor -- 
     
    108110    } 
    109111 
    110     int rowsToSkip = getSizeY() - (h + y); 
     112    int rowsToSkip = invertY ? y : getSizeY() - (h + y); 
    111113    int rowLength = getSizeX() * (isIndexed() ? 1 : getSizeC()); 
    112114    in.seek(global + rowsToSkip * rowLength); 
     
    130132 
    131133    int effectiveC = palette != null && palette[0].length > 0 ? 1 : getSizeC(); 
    132     for (int row=h-1; row>=y; row--) { 
     134    for (int row=h-1; row>=0; row--) { 
     135      int rowIndex = invertY ? h - 1 - row : row; 
    133136      bb.skipBits(x * bpp * effectiveC); 
    134137      for (int i=0; i<w*effectiveC; i++) { 
    135         buf[row * w * effectiveC + i] = (byte) (bb.getBits(bpp) & 0xff); 
     138        buf[rowIndex * w * effectiveC + i] = (byte) (bb.getBits(bpp) & 0xff); 
    136139      } 
    137       if (row > y) { 
     140      if (row > 0) { 
    138141        bb.skipBits((getSizeX() - w - x) * bpp * effectiveC + pad*8); 
    139142      } 
     
    153156      global = 0; 
    154157      palette = null; 
     158      invertY = false; 
    155159    } 
    156160  } 
     
    183187    core[0].sizeY = in.readInt(); 
    184188 
    185     if (getSizeX() < 1 || getSizeY() < 1) { 
    186       throw new FormatException("Invalid image dimensions: " + 
    187         getSizeX() + " x " + getSizeY()); 
     189    if (getSizeX() < 1) { 
     190      LOGGER.trace("Invalid width: {}; using the absolute value", getSizeX()); 
     191      core[0].sizeX = Math.abs(getSizeX()); 
     192    } 
     193    if (getSizeY() < 1) { 
     194      LOGGER.trace("Invalid height: {}; using the absolute value", getSizeY()); 
     195      core[0].sizeY = Math.abs(getSizeY()); 
     196      invertY = true; 
    188197    } 
    189198 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/in/BaseTiffReader.java

    r6708 r7044  
    4141 * 
    4242 * <dl><dt><b>Source code:</b></dt> 
    43  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/in/BaseTiffReader.java">Trac</a>, 
    44  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/in/BaseTiffReader.java">SVN</a></dd></dl> 
     43 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/in/BaseTiffReader.java">Trac</a>, 
     44 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/in/BaseTiffReader.java">SVN</a></dd></dl> 
    4545 * 
    4646 * @author Curtis Rueden ctrueden at wisc.edu 
     
    412412        store.setExperimenterLastName(lastName, 0); 
    413413        store.setExperimenterEmail(email, 0); 
     414        store.setExperimenterDisplayName(artist, 0); 
     415        store.setExperimenterID(MetadataTools.createLSID("Experimenter", 0), 0); 
    414416      } 
    415417 
     
    418420      // set the X and Y pixel dimensions 
    419421 
    420       int resolutionUnit = firstIFD.getIFDIntValue(IFD.RESOLUTION_UNIT); 
    421       TiffRational xResolution = firstIFD.getIFDRationalValue(IFD.X_RESOLUTION); 
    422       TiffRational yResolution = firstIFD.getIFDRationalValue(IFD.Y_RESOLUTION); 
    423       double pixX = xResolution == null ? 0 : 1 / xResolution.doubleValue(); 
    424       double pixY = yResolution == null ? 0 : 1 / yResolution.doubleValue(); 
    425  
    426       switch (resolutionUnit) { 
    427         case 2: 
    428           // resolution is expressed in pixels per inch 
    429           pixX *= 25400; 
    430           pixY *= 25400; 
    431           break; 
    432         case 3: 
    433           // resolution is expressed in pixels per centimeter 
    434           pixX *= 10000; 
    435           pixY *= 10000; 
    436           break; 
    437       } 
     422      double pixX = firstIFD.getXResolution(); 
     423      double pixY = firstIFD.getYResolution(); 
    438424 
    439425      store.setPixelsPhysicalSizeX(pixX, 0); 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/in/BioRadGelReader.java

    r6655 r7044  
    3838 * 
    3939 * <dl><dt><b>Source code:</b></dt> 
    40  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/in/BioRadGelReader.java">Trac</a>, 
    41  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/in/BioRadGelReader.java">SVN</a></dd></dl> 
     40 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/in/BioRadGelReader.java">Trac</a>, 
     41 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/in/BioRadGelReader.java">SVN</a></dd></dl> 
    4242 */ 
    4343public class BioRadGelReader extends FormatReader { 
     
    4545  // -- Constants -- 
    4646 
     47  private static final int MAGIC_BYTES = 0xafaf; 
     48 
    4749  private static final long PIXEL_OFFSET = 59654; 
     50  private static final long START_OFFSET = 160; 
     51  private static final long BASE_OFFSET = 352; 
    4852 
    4953  // -- Fields -- 
    5054 
    5155  private long offset; 
     56  private long diff; 
    5257 
    5358  // -- Constructor -- 
     
    6671    final int blockLen = 2; 
    6772    if (!FormatTools.validStream(stream, blockLen, false)) return false; 
    68     return (stream.readShort() & 0xffff) == 0xafaf; 
     73    return (stream.readShort() & 0xffff) == MAGIC_BYTES; 
    6974  } 
    7075 
     
    7782    FormatTools.checkPlaneParameters(this, no, buf.length, x, y, w, h); 
    7883 
    79     if (offset > PIXEL_OFFSET) { 
    80       in.seek(offset + 1285); 
    81     } 
    82     else in.seek(PIXEL_OFFSET); 
     84    int planeSize = FormatTools.getPlaneSize(this); 
     85 
     86    if (PIXEL_OFFSET + planeSize < in.length()) { 
     87      if (diff < 0) { 
     88        in.seek(0x379d1); 
     89      } 
     90      else in.seek(PIXEL_OFFSET); 
     91    } 
     92    else in.seek(in.length() - planeSize); 
    8393 
    8494    int bpp = FormatTools.getBytesPerPixel(getPixelType()); 
     
    103113    in = new RandomAccessInputStream(id); 
    104114 
    105     in.seek(348); 
    106     int skip = in.readInt() - 28; 
     115    String check = in.readString(48); 
     116    if (check.indexOf("Intel Format") != -1) { 
     117      in.order(true); 
     118    } 
     119 
     120    in.seek(START_OFFSET); 
     121 
     122    boolean codeFound = false; 
     123    int skip = 0; 
     124 
     125    while (!codeFound) { 
     126      short code = in.readShort(); 
     127      if (code == 0x81) codeFound = true; 
     128      short length = in.readShort(); 
     129 
     130      in.skipBytes(2 + 2 * length); 
     131      if (codeFound) { 
     132        skip = (in.readShort() & 0xffff) - 32; 
     133      } 
     134      else { 
     135        if (length == 1) in.skipBytes(12); 
     136        else if (length == 2) in.skipBytes(10); 
     137      } 
     138    } 
     139 
     140    long baseFP = in.getFilePointer(); 
     141    diff = BASE_OFFSET - baseFP; 
     142    skip += diff; 
    107143 
    108144    double physicalWidth = 0d, physicalHeight = 0d; 
    109145    if (getMetadataOptions().getMetadataLevel() != MetadataLevel.MINIMUM) { 
    110       in.seek(348 + skip - 8187); 
    111       String scannerName = in.readCString(); 
    112       in.skipBytes(8); 
    113       in.readCString(); 
    114       in.skipBytes(8); 
    115       String imageArea = in.readCString(); 
    116  
    117       scannerName = scannerName.substring(scannerName.indexOf(":") + 1).trim(); 
    118       addGlobalMeta("Scanner name", scannerName); 
    119  
    120       imageArea = imageArea.substring(imageArea.indexOf(":") + 1).trim(); 
    121       int xIndex = imageArea.indexOf("x"); 
    122       if (xIndex > 0) { 
    123         String width = imageArea.substring(1, imageArea.indexOf(" ")); 
    124         String height = 
    125           imageArea.substring(xIndex + 1, imageArea.indexOf(" ", xIndex + 2)); 
    126         physicalWidth = Double.parseDouble(width.trim()) * 1000; 
    127         physicalHeight = Double.parseDouble(height.trim()) * 1000; 
    128       } 
    129     } 
    130  
    131     in.seek(348 + skip - 273); 
    132     String date = in.readCString(); 
     146      if (baseFP + skip - 8187 > 0) { 
     147        in.seek(baseFP + skip - 8187); 
     148        String scannerName = in.readCString(); 
     149        in.skipBytes(8); 
     150        in.readCString(); 
     151        in.skipBytes(8); 
     152        String imageArea = in.readCString(); 
     153 
     154        imageArea = imageArea.substring(imageArea.indexOf(":") + 1).trim(); 
     155        int xIndex = imageArea.indexOf("x"); 
     156        if (xIndex > 0) { 
     157          int space = imageArea.indexOf(" "); 
     158          if (space >= 0) { 
     159            String width = imageArea.substring(1, space); 
     160            int nextSpace = imageArea.indexOf(" ", xIndex + 2); 
     161            if (nextSpace > xIndex) { 
     162              String height = imageArea.substring(xIndex + 1, nextSpace); 
     163              physicalWidth = Double.parseDouble(width.trim()) * 1000; 
     164              physicalHeight = Double.parseDouble(height.trim()) * 1000; 
     165            } 
     166          } 
     167        } 
     168      } 
     169    } 
     170 
     171    in.seek(baseFP + skip - 298); 
     172    String date = in.readString(17); 
    133173    date = DateTools.formatDate(date, "dd-MMM-yyyy HH:mm"); 
    134  
    135     in.seek(348 + skip); 
     174    in.skipBytes(73); 
     175    String scannerName = in.readCString(); 
     176    addGlobalMeta("Scanner name", scannerName); 
     177 
     178    in.seek(baseFP + skip); 
    136179 
    137180    core[0].sizeX = in.readShort() & 0xffff; 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/in/BioRadReader.java

    r6681 r7044  
    5050 * 
    5151 * <dl><dt><b>Source code:</b></dt> 
    52  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/in/BioRadReader.java">Trac</a>, 
    53  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/in/BioRadReader.java">SVN</a></dd></dl> 
     52 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/in/BioRadReader.java">Trac</a>, 
     53 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/in/BioRadReader.java">SVN</a></dd></dl> 
    5454 * 
    5555 * @author Curtis Rueden ctrueden at wisc.edu 
     
    640640              } 
    641641              else if (key.equals("LENS_MAGNIFICATION")) { 
    642                 store.setObjectiveNominalMagnification( 
    643                   new PositiveInteger((int) Float.parseFloat(value)), 0, 0); 
     642                int magnification = (int) Float.parseFloat(value); 
     643                if (magnification > 0) { 
     644                  store.setObjectiveNominalMagnification( 
     645                    new PositiveInteger(magnification), 0, 0); 
     646                } 
    644647              } 
    645648              else if (key.startsWith("SETTING")) { 
     
    893896                  addGlobalMeta("Time Course - experiment type", values[2]); 
    894897                  addGlobalMeta("Time Course - kd factor", values[3]); 
     898                  String experimentID = 
     899                    MetadataTools.createLSID("Experiment", 0); 
     900                  store.setExperimentID(experimentID, 0); 
    895901                  store.setExperimentType(getExperimentType(values[2]), 0); 
    896902                  break; 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/in/BurleighReader.java

    r6655 r7044  
    3737 * 
    3838 * <dl><dt><b>Source code:</b></dt> 
    39  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/in/BurleighReader.java">Trac</a>, 
    40  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/in/BurleighReader.java">SVN</a></dd></dl> 
     39 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/in/BurleighReader.java">Trac</a>, 
     40 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/in/BurleighReader.java">SVN</a></dd></dl> 
    4141 */ 
    4242public class BurleighReader extends FormatReader { 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/in/CellWorxReader.java

    r6735 r7044  
    4545 * 
    4646 * <dl><dt><b>Source code:</b></dt> 
    47  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/in/CellWorxReader.java">Trac</a>, 
    48  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/in/CellWorxReader.java">SVN</a></dd></dl> 
     47 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/in/CellWorxReader.java">Trac</a>, 
     48 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/in/CellWorxReader.java">SVN</a></dd></dl> 
    4949 */ 
    5050public class CellWorxReader extends FormatReader { 
     
    8080    } 
    8181 
     82    boolean foundHTD = false; 
     83    boolean foundPNL = false; 
     84 
    8285    Location parent = new Location(name).getAbsoluteFile().getParentFile(); 
    8386    String[] list = parent.list(true); 
    8487    for (String file : list) { 
    85       if (checkSuffix(file, "htd")) return true; 
    86     } 
    87     return false; 
     88      if (checkSuffix(file, "htd")) foundHTD = true; 
     89      if (checkSuffix(file, "pnl")) foundPNL = true; 
     90    } 
     91    return foundHTD && foundPNL; 
    8892  } 
    8993 
     
    111115  { 
    112116    FormatTools.checkPlaneParameters(this, no, buf.length, x, y, w, h); 
    113     int planeSize = FormatTools.getPlaneSize(this); 
    114     int fieldSize = getImageCount() * planeSize; 
    115117    int fieldIndex = getSeries() % fieldCount; 
    116118 
     
    118120    DeltavisionReader pnl = new DeltavisionReader(); 
    119121    pnl.setId(file); 
    120     pnl.openBytes(fieldIndex * fieldCount + no, buf, x, y, w, h); 
     122    pnl.openBytes(fieldIndex * getImageCount() + no, buf, x, y, w, h); 
    121123    pnl.close(); 
    122124    return buf; 
     
    239241    plateLogFile = plateName + "scan.log"; 
    240242 
     243    String serialNumber = null; 
     244 
    241245    if (new Location(plateLogFile).exists()) { 
    242246      String[] f = DataTools.readFile(plateLogFile).split("\n"); 
     
    247251          String parent = new Location(id).getAbsoluteFile().getParent(); 
    248252          zMapFile = new Location(parent, file).getAbsolutePath(); 
     253        } 
     254        else if (line.trim().startsWith("Scanner SN")) { 
     255          serialNumber = line.substring(line.indexOf(":") + 1).trim(); 
    249256        } 
    250257      } 
     
    295302              int fieldIndex = fieldRow * fieldMap[fieldRow].length + fieldCol; 
    296303 
    297               String wellSampleID = 
    298                 MetadataTools.createLSID("WellSample", 0, wellIndex, fieldIndex); 
     304              String wellSampleID = MetadataTools.createLSID("WellSample", 
     305                0, wellIndex, fieldIndex); 
    299306              store.setWellSampleID(wellSampleID, 0, wellIndex, fieldIndex); 
    300307              String imageID = MetadataTools.createLSID("Image", nextImage); 
    301308              store.setWellSampleImageRef(imageID, 0, wellIndex, fieldIndex); 
    302               store.setWellSampleIndex( 
    303                 new NonNegativeInteger(fieldIndex), 0, wellIndex, fieldIndex); 
     309              store.setWellSampleIndex(new NonNegativeInteger( 
     310                wellIndex * fieldCount + fieldIndex), 0, wellIndex, fieldIndex); 
    304311 
    305312              String well = (char) (row + 'A') + String.format("%02d", col + 1); 
     
    314321 
    315322    if (getMetadataOptions().getMetadataLevel() != MetadataLevel.MINIMUM) { 
     323      if (serialNumber != null) { 
     324        store.setMicroscopeSerialNumber(serialNumber, 0); 
     325      } 
     326 
    316327      for (int well=0; well<wellCount; well++) { 
    317328        parseWellLogFile(well, store); 
     
    366377    int row = getWellRow(seriesIndex); 
    367378    int col = getWellColumn(seriesIndex); 
     379    int well = row * wellFiles[0].length + col; 
    368380    String logFile = logFiles[row][col]; 
    369381    LOGGER.debug("Parsing log file for well {}{}", (char) (row + 'A'), col + 1); 
     
    391403      else if (key.equals("Scan Origin")) { 
    392404        String[] axes = value.split(","); 
    393         for (int field=0; field<fieldCount; field++) { 
    394           store.setWellSamplePositionX(new Double(axes[0]), 0, wellIndex, field); 
    395           store.setWellSamplePositionY(new Double(axes[1]), 0, wellIndex, field); 
     405        for (int fieldRow=0; fieldRow<fieldMap.length; fieldRow++) { 
     406          for (int fieldCol=0; fieldCol<fieldMap[fieldRow].length; fieldCol++) { 
     407            if (fieldMap[fieldRow][fieldCol] && wellFiles[row][col] != null) { 
     408              int field = fieldRow * fieldMap[fieldRow].length + fieldCol; 
     409              store.setWellSamplePositionX(new Double(axes[0]), 0, well, field); 
     410              store.setWellSamplePositionY(new Double(axes[1]), 0, well, field); 
     411            } 
     412          } 
    396413        } 
    397414      } 
     
    403420          Double ySize = new Double(value.substring(s + 1, end).trim()); 
    404421          for (int field=0; field<fieldCount; field++) { 
    405             store.setPixelsPhysicalSizeX(xSize / getSizeX(), seriesIndex + field); 
    406             store.setPixelsPhysicalSizeY(ySize / getSizeY(), seriesIndex + field); 
     422            int index = seriesIndex + field; 
     423            store.setPixelsPhysicalSizeX(xSize / getSizeX(), index); 
     424            store.setPixelsPhysicalSizeY(ySize / getSizeY(), index); 
    407425          } 
    408426        } 
     
    428446              store.setImageInstrumentRef(instrumentID, seriesIndex + field); 
    429447              store.setDetectorSettingsGain(gain, seriesIndex + field, index); 
    430               store.setDetectorSettingsID(detectorID, seriesIndex + field, index); 
     448              store.setDetectorSettingsID(detectorID, 
     449                seriesIndex + field, index); 
    431450            } 
    432451          } 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/in/CellomicsReader.java

    r6655 r7044  
    3838 * 
    3939 * <dl><dt><b>Source code:</b></dt> 
    40  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/in/CellomicsReader.java">Trac</a>, 
    41  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/in/CellomicsReader.java">SVN</a></dd></dl> 
     40 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/in/CellomicsReader.java">Trac</a>, 
     41 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/in/CellomicsReader.java">SVN</a></dd></dl> 
    4242 */ 
    4343public class CellomicsReader extends FormatReader { 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/in/DefaultMetadataOptions.java

    r6069 r7044  
    2929 * 
    3030 * <dl><dt><b>Source code:</b></dt> 
    31  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/in/DefaultMetadataOptions.java">Trac</a>, 
    32  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/in/DefaultMetadataOptions.java">SVN</a></dd></dl> 
     31 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/in/DefaultMetadataOptions.java">Trac</a>, 
     32 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/in/DefaultMetadataOptions.java">SVN</a></dd></dl> 
    3333 */ 
    3434public class DefaultMetadataOptions implements MetadataOptions { 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/in/DeltavisionReader.java

    r6724 r7044  
    4444 * 
    4545 * <dl><dt><b>Source code:</b></dt> 
    46  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/in/DeltavisionReader.java">Trac</a>, 
    47  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/in/DeltavisionReader.java">SVN</a></dd></dl> 
     46 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/in/DeltavisionReader.java">Trac</a>, 
     47 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/in/DeltavisionReader.java">SVN</a></dd></dl> 
    4848 * 
    4949 * @author Melissa Linkert melissa at glencoesoftware.com 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/in/DicomReader.java

    r6655 r7044  
    5252 * 
    5353 * <dl><dt><b>Source code:</b></dt> 
    54  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/in/DicomReader.java">Trac</a>, 
    55  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/in/DicomReader.java">SVN</a></dd></dl> 
     54 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/in/DicomReader.java">Trac</a>, 
     55 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/in/DicomReader.java">SVN</a></dd></dl> 
    5656 */ 
    5757public class DicomReader extends FormatReader { 
     
    204204  } 
    205205 
    206   /* @see loci.formats.IFormatReader#fileGroupOption(String) */ 
    207206  public int fileGroupOption(String id) throws FormatException, IOException { 
    208     return MUST_GROUP; 
     207    return CAN_GROUP; 
    209208  } 
    210209 
     
    550549        case 0x7fe00000: 
    551550          in.skipBytes(elementLength); 
     551          break; 
     552        case 0: 
     553          in.seek(in.getFilePointer() - 4); 
    552554          break; 
    553555        default: 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/in/EPSReader.java

    r6495 r7044  
    4141 * 
    4242 * <dl><dt><b>Source code:</b></dt> 
    43  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/in/EPSReader.java">Trac</a>, 
    44  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/in/EPSReader.java">SVN</a></dd></dl> 
     43 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/in/EPSReader.java">Trac</a>, 
     44 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/in/EPSReader.java">SVN</a></dd></dl> 
    4545 * 
    4646 * @author Melissa Linkert melissa at glencoesoftware.com 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/in/FEIReader.java

    r6655 r7044  
    3737 * 
    3838 * <dl><dt><b>Source code:</b></dt> 
    39  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/in/FEIReader.java">Trac</a>, 
    40  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/in/FEIReader.java">SVN</a></dd></dl> 
     39 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/in/FEIReader.java">Trac</a>, 
     40 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/in/FEIReader.java">SVN</a></dd></dl> 
    4141 */ 
    4242public class FEIReader extends FormatReader { 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/in/FV1000Reader.java

    r6741 r7044  
    2929import java.io.StringReader; 
    3030import java.util.Arrays; 
     31import java.util.HashMap; 
    3132import java.util.Hashtable; 
    3233import java.util.Vector; 
     
    6162 * 
    6263 * <dl><dt><b>Source code:</b></dt> 
    63  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/in/FV1000Reader.java">Trac</a>, 
    64  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/in/FV1000Reader.java">SVN</a></dd></dl> 
     64 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/in/FV1000Reader.java">Trac</a>, 
     65 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/in/FV1000Reader.java">SVN</a></dd></dl> 
    6566 * 
    6667 * @author Melissa Linkert melissa at glencoesoftware.com 
     
    505506      } 
    506507 
    507       for (IniTable table : f) { 
    508         String tableName = table.get(IniTable.HEADER_KEY); 
    509         String[] keys = table.keySet().toArray(new String[table.size()]); 
    510         for (String key : keys) { 
    511           addGlobalMeta(tableName + " " + key, table.get(key)); 
    512         } 
    513       } 
     508      HashMap<String, String> iniMap = f.flattenIntoHashMap(); 
     509      metadata.putAll(iniMap); 
    514510    } 
    515511 
     
    569565    core[0].dimensionOrder = "XY"; 
    570566 
     567    Hashtable<String, String> values = new Hashtable<String, String>(); 
     568    Vector<String> baseKeys = new Vector<String>(); 
     569 
    571570    for (int i=0, ii=0; ii<getImageCount(); i++, ii++) { 
    572571      String file = filenames.get(new Integer(i)); 
     
    643642          String[] keys = table.keySet().toArray(new String[table.size()]); 
    644643          for (String key : keys) { 
    645             addGlobalMeta("Image " + ii + " : " + key, table.get(key)); 
    646           } 
     644            values.put("Image " + ii + " : " + key, table.get(key)); 
     645            if (!baseKeys.contains(key)) baseKeys.add(key); 
     646          } 
     647        } 
     648      } 
     649    } 
     650 
     651    for (String key : baseKeys) { 
     652      if (key.equals("DataName") || key.indexOf("FileName") >= 0) break; 
     653      boolean equal = true; 
     654      String first = values.get("Image 0 : " + key); 
     655      for (int i=1; i<getImageCount(); i++) { 
     656        if (!first.equals(values.get("Image " + i + " : " + key))) { 
     657          equal = false; 
     658          break; 
     659        } 
     660      } 
     661      if (equal) { 
     662        addGlobalMeta(key, first); 
     663      } 
     664      else { 
     665        for (int i=0; i<getImageCount(); i++) { 
     666          String k = "Image " + i + " : " + key; 
     667          addGlobalMeta(k, values.get(k)); 
    647668        } 
    648669      } 
     
    10541075          } 
    10551076 
     1077          String shapeID = MetadataTools.createLSID("Shape", nextROI, shape); 
     1078 
    10561079          if (shapeType == POINT) { 
     1080            store.setPointID(shapeID, nextROI, shape); 
    10571081            store.setPointTheZ(new NonNegativeInteger(zIndex), nextROI, shape); 
    10581082            store.setPointTheT(new NonNegativeInteger(tIndex), nextROI, shape); 
     
    10731097                double realY = y + row * height; 
    10741098 
     1099                shapeID = MetadataTools.createLSID("Shape", nextROI, shape); 
     1100                store.setRectangleID(shapeID, nextROI, shape); 
    10751101                store.setRectangleX(realX, nextROI, shape); 
    10761102                store.setRectangleY(realY, nextROI, shape); 
     
    10981124          } 
    10991125          else if (shapeType == LINE) { 
     1126            store.setLineID(shapeID, nextROI, shape); 
    11001127            store.setLineX1(new Double(x), nextROI, shape); 
    11011128            store.setLineY1(new Double(y), nextROI, shape); 
     
    11181145            double rx = width / 2; 
    11191146            double ry = shapeType == CIRCLE ? rx : height / 2; 
     1147            store.setEllipseID(shapeID, nextROI, shape); 
    11201148            store.setEllipseX(x + rx, nextROI, shape); 
    11211149            store.setEllipseY(y + ry, nextROI, shape); 
     
    11431171              if (point < xc.length - 1) points.append(" "); 
    11441172            } 
     1173            store.setPolylineID(shapeID, nextROI, shape); 
    11451174            store.setPolylinePoints(points.toString(), nextROI, shape); 
    11461175            store.setPolylineTransform("rotate(" + angle + ")", nextROI, shape); 
     
    14451474  { 
    14461475    RandomAccessInputStream stream = getFile(filename); 
    1447     stream.skipBytes(2); 
    1448     String data = stream.readString((int) stream.length() - 2); 
     1476    String data = stream.readString((int) stream.length()); 
     1477    if (!data.startsWith("[")) data = data.substring(2, data.length()); 
    14491478    data = DataTools.stripString(data); 
    14501479    BufferedReader reader = new BufferedReader(new StringReader(data)); 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/in/FakeReader.java

    r6671 r7044  
    5151 * 
    5252 * <dl><dt><b>Source code:</b></dt> 
    53  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/in/FakeReader.java">Trac</a> 
    54  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/in/FakeReader.java">SVN</a></dd></dl> 
     53 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/in/FakeReader.java">Trac</a> 
     54 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/in/FakeReader.java">SVN</a></dd></dl> 
    5555 */ 
    5656public class FakeReader extends FormatReader { 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/in/FitsReader.java

    r6601 r7044  
    4040 * 
    4141 * <dl><dt><b>Source code:</b></dt> 
    42  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/in/FitsReader.java">Trac</a>, 
    43  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/in/FitsReader.java">SVN</a></dd></dl> 
     42 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/in/FitsReader.java">Trac</a>, 
     43 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/in/FitsReader.java">SVN</a></dd></dl> 
    4444 */ 
    4545public class FitsReader extends FormatReader { 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/in/FlexReader.java

    r6655 r7044  
    6060 * 
    6161 * <dl><dt><b>Source code:</b></dt> 
    62  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/in/FlexReader.java">Trac</a>, 
    63  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/in/FlexReader.java">SVN</a></dd></dl> 
     62 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/in/FlexReader.java">Trac</a>, 
     63 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/in/FlexReader.java">SVN</a></dd></dl> 
    6464 */ 
    6565public class FlexReader extends FormatReader { 
     
    437437      for (int col=0; col<wellColumns; col++) { 
    438438        int well = row * wellColumns + col; 
     439        store.setWellID(MetadataTools.createLSID("Well", 0, well), 0, well); 
    439440        store.setWellRow(new NonNegativeInteger(row), 0, well); 
    440441        store.setWellColumn(new NonNegativeInteger(col), 0, well); 
     
    460461        store.setWellColumn(col, pos[2], pos[1]); 
    461462      } 
     463      String wellSample = 
     464        MetadataTools.createLSID("WellSample", pos[2], well, pos[0]); 
     465      store.setWellSampleID(wellSample, pos[2], well, pos[0]); 
    462466      store.setWellSampleIndex(new NonNegativeInteger(i), pos[2], well, pos[0]); 
    463467      store.setWellSampleImageRef(imageID, pos[2], well, pos[0]); 
     
    470474      if (plateName == null) plateName = currentFile.getParentFile().getName(); 
    471475      if (plateBarcode != null) plateName = plateBarcode + " " + plateName; 
     476      store.setPlateID(MetadataTools.createLSID("Plate", 0), 0); 
    472477      store.setPlateName(plateName, 0); 
    473478      store.setPlateRowNamingConvention(getNamingConvention("Letter"), 0); 
     
    15251530      } 
    15261531      else { 
    1527         Location server = new Location(realName); 
    1528  
    15291532        LOGGER.debug("Finding base server name..."); 
    15301533        if (realName.endsWith(File.separator)) { 
  • branches/maven/projects/bio-formats/src/main/java/loci/formats/in/FluoviewReader.java

    r6662 r7044  
    4141 * 
    4242 * <dl><dt><b>Source code:</b></dt> 
    43  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/in/FluoviewReader.java">Trac</a>, 
    44  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/in/FluoviewReader.java">SVN</a></dd></dl> 
     43 * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/in/FluoviewReader.java">Trac</a>, 
     44 * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/in/FluoviewReader.java">SVN</a></dd></dl> 
    4545 * 
    4646 * @author Eric Kjellman egkjellman at wisc.edu