Changeset 1926


Ignore:
Timestamp:
12/13/06 09:18:51 (13 years ago)
Author:
melissa
Message:
  • Added new API method "String[] getUsedFiles(String)", which returns a list of all file names associated with the given file.
  • Updated automated testing framework to take advantage of getUsedFiles.
Location:
trunk/loci/formats
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/loci/formats/FileStitcher.java

    r1903 r1926  
    457457  /* @see IFormatReader#isNormalized() */ 
    458458  public boolean isNormalized() { return normalizeData; } 
     459 
     460  /* @see IFormatReader#getUsedFiles() */ 
     461  public String[] getUsedFiles(String id) throws FormatException, IOException { 
     462    if (!id.equals(currentId)) initFile(id); 
     463    return files; 
     464  } 
    459465 
    460466  /* @see IFormatReader#swapDimensions(String, String) */ 
  • trunk/loci/formats/FormatReader.java

    r1911 r1926  
    358358  } 
    359359 
     360  /* @see IFormatReader#getUsedFiles(String) */ 
     361  public String[] getUsedFiles(String id) throws FormatException, IOException { 
     362    if (!id.equals(currentId)) initFile(id); 
     363    return new String[] {getMappedId(id)}; 
     364  } 
     365 
    360366  /* @see IFormatReader#swapDimensions(String, String) */ 
    361367  public void swapDimensions(String id, String order) 
     
    363369  { 
    364370    if (!id.equals(currentId)) initFile(id); 
     371    if (order == null) return; 
    365372    if (order.equals(currentOrder[series])) return; 
    366373 
  • trunk/loci/formats/IFormatReader.java

    r1903 r1926  
    200200  boolean isNormalized(); 
    201201 
     202  /** Returns an array of filenames needed to open this dataset. */ 
     203  String[] getUsedFiles(String id) throws FormatException, IOException; 
     204 
    202205  /** 
    203206   * Swaps the dimensions according to the given dimension order.  If the given 
  • trunk/loci/formats/ImageReader.java

    r1903 r1926  
    375375  } 
    376376 
     377  /* @see IFormatReader#getUsedFiles(String) */ 
     378  public String[] getUsedFiles(String id) throws FormatException, IOException { 
     379    return getReader(id).getUsedFiles(id); 
     380  } 
     381 
    377382  /* @see IFormatReader#swapDimensions(String, String) */ 
    378383  public void swapDimensions(String id, String order) 
  • trunk/loci/formats/ReaderWrapper.java

    r1903 r1926  
    208208  public boolean isNormalized() { return reader.isNormalized(); } 
    209209 
     210  public String[] getUsedFiles(String id) throws FormatException, IOException { 
     211    return reader.getUsedFiles(id); 
     212  } 
     213 
    210214  public void swapDimensions(String id, String order) 
    211215    throws FormatException, IOException 
  • trunk/loci/formats/in/ICSReader.java

    r1878 r1926  
    177177    return ImageTools.makeImage(plane, width, height, channels, true, 
    178178      bytes, littleEndian); 
     179  } 
     180 
     181  /* @see IFormatReader#getUsedFiles(String) */ 
     182  public String[] getUsedFiles(String id) throws FormatException, IOException { 
     183    if (!id.equals(currentId)) initFile(id); 
     184    if (versionTwo) return new String[] {getMappedId(currentIdsId)}; 
     185    return new String[] {getMappedId(currentIdsId), getMappedId(currentIcsId)}; 
    179186  } 
    180187 
  • trunk/loci/formats/in/LeicaReader.java

    r1871 r1926  
    188188    tiff[series][no].close(); 
    189189    return b; 
     190  } 
     191 
     192  /* @see IFormatReader#getUsedFiles(String) */ 
     193  public String[] getUsedFiles(String id) throws FormatException, IOException { 
     194    if (!id.equals(currentId)) initFile(id); 
     195    Vector v = new Vector(); 
     196    v.add(getMappedId(id)); 
     197    for (int i=0; i<files.length; i++) { 
     198      for (int j=0; j<files[i].size(); j++) { 
     199        v.add(files[i].get(j)); 
     200      } 
     201    } 
     202    return (String[]) v.toArray(new String[0]); 
    190203  } 
    191204 
  • trunk/loci/formats/in/OIFReader.java

    r1817 r1926  
    196196  public int getThumbSizeY(String id) throws FormatException, IOException { 
    197197    return openThumbImage(id, 0).getHeight(); 
     198  } 
     199 
     200  /* @see IFormatReader#getUsedFiles(String) */ 
     201  public String[] getUsedFiles(String id) throws FormatException, IOException { 
     202    if (!id.equals(currentId)) initFile(id); 
     203    String[] s = new String[tiffs.size() + 1]; 
     204    s[0] = getMappedId(currentId); 
     205    for (int i=1; i<s.length; i++) s[i] = getMappedId((String) tiffs.get(i-1)); 
     206    return s; 
    198207  } 
    199208 
  • trunk/loci/formats/in/PerkinElmerReader.java

    r1867 r1926  
    5555  /** Flag indicating that the image data is in TIFF format. */ 
    5656  private boolean isTiff = true; 
     57 
     58  /** List of all files to open */ 
     59  private Vector allFiles; 
    5760 
    5861  // -- Constructor -- 
     
    143146  } 
    144147 
     148  /* @see IFormatReader#getUsedFiles(String) */ 
     149  public String[] getUsedFiles(String id) throws FormatException, IOException { 
     150    if (!id.equals(currentId)) initFile(id); 
     151    return (String[]) allFiles.toArray(new String[0]); 
     152  } 
     153 
    145154  /** Closes any open files. */ 
    146155  public void close() throws FormatException, IOException { 
     
    158167    super.initFile(id); 
    159168 
     169    allFiles = new Vector(); 
     170 
    160171    // get the working directory 
    161172    File tempFile = new File(getMappedId(id)); 
     
    164175    String workingDirPath = workingDir.getPath() + File.separator; 
    165176    String[] ls = workingDir.list(); 
     177 
     178    allFiles.add(getMappedId(id)); 
    166179 
    167180    // check if we have any of the required header file types 
     
    320333    } 
    321334 
     335    for (int i=0; i<files.length; i++) allFiles.add(files[i]); 
     336 
    322337    numImages = files.length; 
    323338    BufferedReader read; 
     
    335350    if (timPos != -1) { 
    336351      tempFile = new File(workingDir, ls[timPos]); 
     352      allFiles.add(tempFile.getAbsolutePath()); 
    337353      read = new BufferedReader(new FileReader(tempFile)); 
    338354      data = new char[(int) tempFile.length()]; 
     
    367383    if (csvPos != -1) { 
    368384      tempFile = new File(workingDir, ls[csvPos]); 
     385      allFiles.add(tempFile.getAbsolutePath()); 
    369386      read = new BufferedReader(new FileReader(tempFile)); 
    370387      data = new char[(int) tempFile.length()]; 
     
    395412    else if (zpoPos != -1) { 
    396413      tempFile = new File(workingDir, ls[zpoPos]); 
     414      allFiles.add(tempFile.getAbsolutePath()); 
    397415      read = new BufferedReader(new FileReader(tempFile)); 
    398416      data = new char[(int) tempFile.length()]; 
     
    410428 
    411429    if (htmPos != -1) { 
    412       // ooh, pretty HTML 
    413  
    414430      tempFile = new File(workingDir, ls[htmPos]); 
     431      allFiles.add(tempFile.getAbsolutePath()); 
    415432      read = new BufferedReader(new FileReader(tempFile)); 
    416433      data = new char[(int) tempFile.length()]; 
  • trunk/loci/formats/test/ReaderTest.java

    r1924 r1926  
    4141  // -- Fields -- 
    4242 
    43   private static Vector files; 
    4443  private static Vector badFiles; 
    4544  private static String currentFile; 
     
    6968      catch (IOException io) { } 
    7069    } 
    71     return badFiles.contains(file); 
     70    if (badFiles.contains(file)) return true; 
     71    for (int i=0; i<badFiles.size(); i++) { 
     72      if (file.endsWith((String) badFiles.get(i))) return true; 
     73    } 
     74    return false;  
    7275  } 
    7376 
     
    8285    store.createRoot(); 
    8386    reader.setMetadataStore(store); 
     87  } 
     88 
     89  /**  
     90   * Returns true if any of the given file names are in the  
     91   * list of files to test.  
     92   */ 
     93  public static boolean isStitchedFile(Vector files, String[] related) { 
     94    for (int i=0; i<related.length; i++) { 
     95      if (files.contains(related[i])) return true;   
     96    } 
     97    return false; 
    8498  } 
    8599 
     
    105119      for (int i=0; i<subs.length; i++) { 
    106120        if (!isBadFile(subs[i])) { 
    107           subs[i] = root + File.separator + subs[i]; 
     121          subs[i] = root +  
     122            (root.endsWith(File.separator) ? "" : File.separator) + subs[i]; 
    108123          File tmp = new File(subs[i]); 
    109124          if (!tmp.isDirectory() && reader.isThisType(subs[i])) { 
    110             files.add(subs[i]); 
     125            try { 
     126              if (!isStitchedFile(files, reader.getUsedFiles(subs[i]))) { 
     127                files.add(subs[i]); 
     128                /* debug */ System.out.println("adding " + subs[i]); 
     129              } 
     130            } 
     131            catch (IOException io) { } 
     132            catch (FormatException fe) { } 
    111133          } 
    112134          else if (tmp.isDirectory()) getFiles(subs[i], files); 
     
    125147   boolean success = true; 
    126148    try { 
    127       int imageCount = reader.getImageCount(currentFile); 
    128       int sizeX = reader.getSizeX(currentFile); 
    129       int sizeY = reader.getSizeY(currentFile); 
    130       for (int j=0; j<imageCount; j++) { 
    131         BufferedImage b = reader.openImage(currentFile, j); 
    132         if ((b.getWidth() != sizeX) || (b.getHeight() != sizeY)) { 
    133           success = false; 
     149      for (int i=0; i<reader.getSeriesCount(currentFile); i++) { 
     150        reader.setSeries(currentFile, i); 
     151        int imageCount = reader.getImageCount(currentFile); 
     152        int sizeX = reader.getSizeX(currentFile); 
     153        int sizeY = reader.getSizeY(currentFile); 
     154        for (int j=0; j<imageCount; j++) { 
     155          BufferedImage b = reader.openImage(currentFile, j); 
     156          if ((b.getWidth() != sizeX) || (b.getHeight() != sizeY)) { 
     157            success = false; 
     158            j = imageCount; 
     159            i = reader.getSeriesCount(currentFile); 
     160            break; 
     161          } 
    134162        } 
    135163      } 
     
    155183    boolean success = true; 
    156184    try { 
    157       int imageCount = reader.getImageCount(currentFile); 
    158       int sizeX = reader.getSizeX(currentFile); 
    159       int sizeY = reader.getSizeY(currentFile); 
    160       int bytesPerPixel =  
    161         FormatReader.getBytesPerPixel(reader.getPixelType(currentFile)); 
    162       int sizeC = reader.getSizeC(currentFile); 
    163       boolean rgb = reader.isRGB(currentFile); 
    164  
    165       int expectedBytes = sizeX * sizeY * bytesPerPixel * (rgb ? sizeC : 1); 
    166  
    167       for (int i=0; i<imageCount; i++) { 
    168         byte[] b = reader.openBytes(currentFile, i); 
    169         if (b.length != expectedBytes) success = false;  
     185      for (int i=0; i<reader.getSeriesCount(currentFile); i++) { 
     186        reader.setSeries(currentFile, i); 
     187        int imageCount = reader.getImageCount(currentFile); 
     188        int sizeX = reader.getSizeX(currentFile); 
     189        int sizeY = reader.getSizeY(currentFile); 
     190        int bytesPerPixel =  
     191          FormatReader.getBytesPerPixel(reader.getPixelType(currentFile)); 
     192        int sizeC = reader.getSizeC(currentFile); 
     193        boolean rgb = reader.isRGB(currentFile); 
     194 
     195        int expectedBytes = sizeX * sizeY * bytesPerPixel * (rgb ? sizeC : 1); 
     196 
     197        for (int j=0; j<imageCount; j++) { 
     198          byte[] b = reader.openBytes(currentFile, j); 
     199          if (b.length != expectedBytes) { 
     200            success = false;  
     201            j = imageCount; 
     202            i = reader.getSeriesCount(currentFile); 
     203            break; 
     204          } 
     205        } 
    170206      } 
    171207    } 
     
    188224   */ 
    189225  @Test public void testImageCount() { 
    190     try { 
    191       int imageCount = reader.getImageCount(currentFile); 
    192       int sizeZ = reader.getSizeZ(currentFile); 
    193       int sizeC = reader.getEffectiveSizeC(currentFile); 
    194       int sizeT = reader.getSizeT(currentFile); 
    195       boolean success = imageCount == sizeZ * sizeC * sizeT; 
    196       try { 
    197         if (!success) { 
    198           logFile.write(currentFile + " failed image count test\n"); 
    199           logFile.flush(); 
    200         } 
    201       } 
    202       catch (IOException io) { } 
     226    boolean success = true; 
     227    try { 
     228      for (int i=0; i<reader.getSeriesCount(currentFile); i++) { 
     229        reader.setSeries(currentFile, i); 
     230        int imageCount = reader.getImageCount(currentFile); 
     231        int sizeZ = reader.getSizeZ(currentFile); 
     232        int sizeC = reader.getEffectiveSizeC(currentFile); 
     233        int sizeT = reader.getSizeT(currentFile); 
     234        success = imageCount == sizeZ * sizeC * sizeT; 
     235        try { 
     236          if (!success) { 
     237            logFile.write(currentFile + " failed image count test\n"); 
     238            logFile.flush(); 
     239            assertTrue(false); 
     240          } 
     241        } 
     242        catch (IOException io) { } 
     243      } 
    203244      assertTrue(success); 
    204245    } 
     
    221262      OMEXMLMetadataStore store =  
    222263        (OMEXMLMetadataStore) reader.getMetadataStore(currentFile); 
    223    
    224       int sizeX = reader.getSizeX(currentFile); 
    225       int sizeY = reader.getSizeY(currentFile); 
    226       int sizeZ = reader.getSizeZ(currentFile); 
    227       int sizeC = reader.getSizeC(currentFile); 
    228       int sizeT = reader.getSizeT(currentFile); 
    229       boolean bigEndian = !reader.isLittleEndian(currentFile); 
    230       String type =  
    231         FormatReader.getPixelTypeString(reader.getPixelType(currentFile)); 
    232       String dimensionOrder = reader.getDimensionOrder(currentFile); 
    233  
    234       boolean success =   
    235         (sizeX == store.getSizeX(null)) && 
    236         (sizeY == store.getSizeY(null)) && 
    237         (sizeZ == store.getSizeZ(null)) && 
    238         (sizeC == store.getSizeC(null)) && 
    239         (sizeT == store.getSizeT(null)) && 
    240         (bigEndian == store.getBigEndian(null)) && 
    241         type.toLowerCase().equals(store.getPixelType(null).toLowerCase()) && 
    242         dimensionOrder.equals(store.getDimensionOrder(null)); 
     264  
     265      boolean success = true; 
     266      for (int i=0; i<reader.getSeries(currentFile); i++) { 
     267        reader.setSeries(currentFile, i); 
     268        int sizeX = reader.getSizeX(currentFile); 
     269        int sizeY = reader.getSizeY(currentFile); 
     270        int sizeZ = reader.getSizeZ(currentFile); 
     271        int sizeC = reader.getSizeC(currentFile); 
     272        int sizeT = reader.getSizeT(currentFile); 
     273        boolean bigEndian = !reader.isLittleEndian(currentFile); 
     274        String type =  
     275          FormatReader.getPixelTypeString(reader.getPixelType(currentFile)); 
     276        String dimensionOrder = reader.getDimensionOrder(currentFile); 
     277 
     278        success =   
     279          (sizeX == store.getSizeX(null)) && 
     280          (sizeY == store.getSizeY(null)) && 
     281          (sizeZ == store.getSizeZ(null)) && 
     282          (sizeC == store.getSizeC(null)) && 
     283          (sizeT == store.getSizeT(null)) && 
     284          (bigEndian == store.getBigEndian(null)) && 
     285          type.toLowerCase().equals(store.getPixelType(null).toLowerCase()) && 
     286          dimensionOrder.equals(store.getDimensionOrder(null)); 
    243287    
    244       if (!success) { 
    245         try { 
    246           logFile.write(currentFile + " failed OME-XML sanity test\n"); 
    247           logFile.flush(); 
    248         } 
    249         catch (IOException io) { } 
     288        if (!success) { 
     289          try { 
     290            logFile.write(currentFile + " failed OME-XML sanity test\n"); 
     291            logFile.flush(); 
     292            assertTrue(false); 
     293          } 
     294          catch (IOException io) { } 
     295        } 
    250296      } 
    251297      assertTrue(success);  
  • trunk/loci/formats/whats-new.txt

    r1883 r1926  
     1* Fixed bugs in Zeiss ZVI reader 
     2* Improved support for ND2 and JPEG-2000 files 
     3* Added automated testing framework 
     4* Expanded ImageJ plugin to optionally use Image5D and View5D 
     5 
    162006 Nov 30: 
    27* Added support for ND2/JPEG-2000 
Note: See TracChangeset for help on using the changeset viewer.