Changeset 3829


Ignore:
Timestamp:
03/17/08 12:44:22 (12 years ago)
Author:
melissa
Message:

More bugfixes.

Location:
trunk/loci/formats/in
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/loci/formats/in/ICSReader.java

    r3769 r3829  
    187187    FormatTools.assertId(currentId, true, 1); 
    188188    if (versionTwo) { 
    189       return new String[] {currentIdsId == null ? "" : currentIdsId}; 
     189      return new String[] {currentId}; 
    190190    } 
    191191    return new String[] {currentIdsId, currentIcsId}; 
  • trunk/loci/formats/in/L2DReader.java

    r3763 r3829  
    5454  /** Construct a new L2D reader. */ 
    5555  public L2DReader() { 
    56     super("Li-Cor L2D", "l2d"); 
     56    super("Li-Cor L2D", new String[] {"l2d", "scn"}); 
    5757  } 
    5858 
     
    9696  protected void initFile(String id) throws FormatException, IOException { 
    9797    if (debug) debug("L2DReader.initFile(" + id + ")"); 
     98 
     99    if (id.toLowerCase().endsWith(".scn")) { 
     100      // find the corresponding .l2d file 
     101      Location parent = new Location(id).getAbsoluteFile().getParentFile(); 
     102      String[] list = parent.list(); 
     103      for (int i=0; i<list.length; i++) { 
     104        if (list[i].toLowerCase().endsWith(".l2d")) { 
     105          initFile(new Location(parent.getAbsolutePath(), 
     106            list[i]).getAbsolutePath()); 
     107          break; 
     108        } 
     109      } 
     110      return; 
     111    } 
     112 
    98113    super.initFile(id); 
    99114    in = new RandomAccessStream(id); 
  • trunk/loci/formats/in/LeicaReader.java

    r3805 r3829  
    5050  private static final int LEICA_MAGIC_TAG = 33923; 
    5151 
     52  /** IFD tags. */ 
     53  private static final int SERIES = 10; 
     54  private static final int IMAGES = 15; 
     55  private static final int DIMDESCR = 20; 
     56  private static final int FILTERSET = 30; 
     57  private static final int TIMEINFO = 40; 
     58  private static final int SCANNERSET = 50; 
     59  private static final int EXPERIMENT = 60; 
     60  private static final int LUTDESC = 70; 
     61 
    5262  // -- Fields -- 
    5363 
     
    6979  private String leiFilename; 
    7080 
    71   private int bpp; 
    7281  private Vector seriesNames; 
    7382 
     
    182191      tiff = null; 
    183192      seriesNames = null; 
    184       numSeries = bpp = 0; 
     193      numSeries = 0; 
    185194    } 
    186195  } 
     
    197206 
    198207      in = new RandomAccessStream(id); 
    199  
    200       if (in.readShort() == 0x4949) { 
    201         in.order(true); 
    202       } 
     208      in.order(TiffTools.checkHeader(in).booleanValue()); 
    203209 
    204210      in.seek(0); 
     
    212218      String descr = TiffTools.getComment(ifds[0]); 
    213219 
    214       int ndx = descr.indexOf("Series Name"); 
    215  
    216       // should be more graceful about this 
    217       if (ndx == -1) throw new FormatException("LEI file not found"); 
    218  
    219       String lei = descr.substring(descr.indexOf("=", ndx) + 1); 
    220       int newLineNdx = lei.indexOf("\n"); 
    221       lei = lei.substring(0, newLineNdx == -1 ? lei.length() : newLineNdx); 
    222       lei = lei.trim(); 
    223  
    224       String dir = id.substring(0, id.lastIndexOf("/") + 1); 
    225       lei = dir + lei; 
    226  
    227       // parse key/value pairs in ImageDescription 
    228  
    229       // first thing is to remove anything of the form "[blah]" 
    230  
    231       String first; 
    232       String last; 
    233  
    234       while (descr.indexOf("[") != -1) { 
    235         first = descr.substring(0, descr.indexOf("[")); 
    236         last = descr.substring(descr.indexOf("\n", descr.indexOf("["))); 
    237         descr = first + last; 
    238       } 
     220      // remove anything of the form "[blah]" 
     221 
     222      descr = descr.replaceAll("\\[.*.\\]\n", ""); 
    239223 
    240224      // each remaining line in descr is a (key, value) pair, 
    241225      // where '=' separates the key from the value 
    242226 
    243       String key; 
    244       String value; 
    245       int eqIndex = descr.indexOf("="); 
    246  
    247       while (eqIndex != -1) { 
    248         key = descr.substring(0, eqIndex); 
    249         newLineNdx = descr.indexOf("\n", eqIndex); 
    250         if (newLineNdx == -1) newLineNdx = descr.length(); 
    251         value = descr.substring(eqIndex+1, newLineNdx); 
    252         addMeta(key.trim(), value.trim()); 
    253         newLineNdx = descr.indexOf("\n", eqIndex); 
    254         if (newLineNdx == -1) newLineNdx = descr.length(); 
    255         descr = descr.substring(newLineNdx); 
    256         eqIndex = descr.indexOf("="); 
     227      String lei = id.substring(0, id.lastIndexOf(File.separator) + 1); 
     228 
     229      StringTokenizer lines = new StringTokenizer(descr, "\n"); 
     230      String line = null, key = null, value = null; 
     231      while (lines.hasMoreTokens()) { 
     232        line = lines.nextToken(); 
     233        if (line.indexOf("=") == -1) continue; 
     234        key = line.substring(0, line.indexOf("=")).trim(); 
     235        value = line.substring(line.indexOf("=") + 1).trim(); 
     236        addMeta(key, value); 
     237 
     238        if (key.startsWith("Series Name")) lei += value; 
    257239      } 
    258240 
    259241      // now open the LEI file 
    260242 
    261       Location l = new Location(lei); 
    262       if (l.getAbsoluteFile().exists()) initFile(lei); 
     243      Location l = new Location(lei).getAbsoluteFile(); 
     244      if (l.exists()) { 
     245        initFile(lei); 
     246        return; 
     247      } 
    263248      else { 
    264         l = l.getAbsoluteFile().getParentFile(); 
     249        l = l.getParentFile(); 
    265250        String[] list = l.list(); 
    266251        for (int i=0; i<list.length; i++) { 
     
    272257        } 
    273258      } 
     259      throw new FormatException("LEI file not found."); 
    274260    } 
    275261    else { 
     
    297283      int addr = in.readInt(); 
    298284      Vector v = new Vector(); 
     285      Hashtable ifd; 
    299286      while (addr != 0) { 
    300         numSeries++; 
    301         Hashtable ifd = new Hashtable(); 
     287        ifd = new Hashtable(); 
    302288        v.add(ifd); 
    303289        in.seek(addr + 4); 
     
    323309      } 
    324310 
    325       if (v.size() < numSeries) numSeries = v.size(); 
     311      numSeries = v.size(); 
    326312 
    327313      core = new CoreMetadata(numSeries); 
    328  
    329       headerIFDs = new Hashtable[numSeries]; 
    330314      files = new Vector[numSeries]; 
    331315 
    332       v.copyInto(headerIFDs); 
     316      headerIFDs = (Hashtable[]) v.toArray(new Hashtable[0]); 
    333317 
    334318      // determine the length of a filename 
    335319 
    336320      int nameLength = 0; 
    337  
    338321      int maxPlanes = 0; 
    339322 
     
    343326 
    344327      for (int i=0; i<headerIFDs.length; i++) { 
    345         if (headerIFDs[i].get(new Integer(10)) != null) { 
    346           byte[] temp = (byte[]) headerIFDs[i].get(new Integer(10)); 
    347           nameLength = DataTools.bytesToInt(temp, 8, 4, core.littleEndian[0]); 
     328        if (headerIFDs[i].get(new Integer(SERIES)) != null) { 
     329          byte[] temp = (byte[]) headerIFDs[i].get(new Integer(SERIES)); 
     330          nameLength = DataTools.bytesToInt(temp, 8, core.littleEndian[0]) * 2; 
    348331        } 
    349332 
    350333        Vector f = new Vector(); 
    351         byte[] tempData = (byte[]) headerIFDs[i].get(new Integer(15)); 
    352         int tempImages = DataTools.bytesToInt(tempData, 0, 4, 
     334        byte[] tempData = (byte[]) headerIFDs[i].get(new Integer(IMAGES)); 
     335        int tempImages = DataTools.bytesToInt(tempData, 0, 
    353336          core.littleEndian[0]); 
    354337 
     
    381364          // read in each filename 
    382365          prefix = DataTools.stripString(new String(tempData, 
    383             20 + 2*(j*nameLength), 2*nameLength)); 
     366            20 + j*nameLength, nameLength)); 
    384367          f.add(dirPrefix + File.separator + prefix); 
    385368          // test to make sure the path is valid 
     
    393376          status("Handling renamed TIFF files"); 
    394377 
    395           // first thing is to get original LEI name associate with each TIFF 
     378          // get original LEI name associate with each TIFF 
    396379          // this lets us figure out which TIFFs we need for this dataset 
    397380          Hashtable leiMapping = new Hashtable(); 
     
    400383            RandomAccessStream ras = new RandomAccessStream( 
    401384              new Location(dirPrefix, listing[j]).getAbsolutePath()); 
    402             Hashtable ifd = TiffTools.getFirstIFD(ras); 
     385            ifd = TiffTools.getFirstIFD(ras); 
    403386            ras.close(); 
    404             String descr = 
    405               (String) ifd.get(new Integer(TiffTools.IMAGE_DESCRIPTION)); 
     387            String descr = TiffTools.getComment(ifd); 
    406388            int ndx = descr.indexOf("=", descr.indexOf("Series Name")); 
    407389            String leiFile = descr.substring(ndx + 1, descr.indexOf("\n", ndx)); 
     
    551533 
    552534    for (int i=0; i<headerIFDs.length; i++) { 
    553       byte[] temp = (byte[]) headerIFDs[i].get(new Integer(10)); 
     535      byte[] temp = (byte[]) headerIFDs[i].get(new Integer(SERIES)); 
    554536      if (temp != null) { 
    555537        // the series data 
     
    568550      } 
    569551 
    570       temp = (byte[]) headerIFDs[i].get(new Integer(15)); 
     552      temp = (byte[]) headerIFDs[i].get(new Integer(IMAGES)); 
    571553      if (temp != null) { 
    572554        // the image data 
     
    605587      } 
    606588 
    607       temp = (byte[]) headerIFDs[i].get(new Integer(20)); 
     589      temp = (byte[]) headerIFDs[i].get(new Integer(DIMDESCR)); 
    608590      if (temp != null) { 
    609591        // dimension description 
     
    615597        addMeta("Voxel Version", new Integer(stream.readInt())); 
    616598        int voxelType = stream.readInt(); 
    617         String type = ""; 
    618         switch (voxelType) { 
    619           case 0: 
    620             type = "undefined"; 
    621             break; 
    622           case 10: 
    623             type = "gray normal"; 
    624             core.rgb[i] = false; 
    625             break; 
    626           case 20: 
    627             type = "RGB"; 
    628             core.rgb[i] = true; 
    629             break; 
    630         } 
    631  
    632         addMeta("VoxelType", type); 
    633  
    634         bpp = stream.readInt(); 
     599        core.rgb[i] = voxelType == 20; 
     600 
     601        addMeta("VoxelType", voxelType == 20 ? "RGB" : "gray"); 
     602 
     603        int bpp = stream.readInt(); 
    635604        addMeta("Bytes per pixel", new Integer(bpp)); 
    636605 
    637606        switch (bpp) { 
    638607          case 1: 
     608          case 3: 
    639609            core.pixelType[i] = FormatTools.UINT8; 
    640610            break; 
    641611          case 2: 
     612          case 6: 
    642613            core.pixelType[i] = FormatTools.UINT16; 
    643             break; 
    644           case 3: 
    645             core.pixelType[i] = FormatTools.UINT8; 
    646614            break; 
    647615          case 4: 
    648616            core.pixelType[i] = FormatTools.UINT32; 
    649             break; 
    650           case 6: 
    651             core.pixelType[i] = FormatTools.UINT16; 
    652617            break; 
    653618          default: 
     
    755720          } 
    756721 
    757           //if (dimType.equals("channel")) numChannels++; 
    758722          addMeta("Dim" + j + " type", dimType); 
    759723          addMeta("Dim" + j + " size", new Integer(stream.readInt())); 
    760           int dist = stream.readInt(); 
    761724          addMeta("Dim" + j + " distance between sub-dimensions", 
    762             new Integer(dist)); 
     725            new Integer(stream.readInt())); 
    763726 
    764727          int len = stream.readInt(); 
     
    779742      } 
    780743 
    781       temp = (byte[]) headerIFDs[i].get(new Integer(30)); 
     744      temp = (byte[]) headerIFDs[i].get(new Integer(FILTERSET)); 
    782745      if (temp != null) { 
    783746        // filter data 
     
    787750      } 
    788751 
    789       temp = (byte[]) headerIFDs[i].get(new Integer(40)); 
     752      temp = (byte[]) headerIFDs[i].get(new Integer(TIMEINFO)); 
    790753 
    791754      if (temp != null) { 
     
    802765 
    803766        for (int j=0; j < nDims; j++) { 
    804           int v = stream.readInt(); 
    805           addMeta("Dimension " + j + " ID", new Integer(v)); 
    806           v = stream.readInt(); 
    807           addMeta("Dimension " + j + " size", new Integer(v)); 
    808           v = stream.readInt(); 
     767          addMeta("Dimension " + j + " ID", new Integer(stream.readInt())); 
     768          addMeta("Dimension " + j + " size", new Integer(stream.readInt())); 
    809769          addMeta("Dimension " + j + " distance between dimensions", 
    810             new Integer(v)); 
     770            new Integer(stream.readInt())); 
    811771        } 
    812772 
     
    837797      } 
    838798 
    839       temp = (byte[]) headerIFDs[i].get(new Integer(50)); 
     799      temp = (byte[]) headerIFDs[i].get(new Integer(SCANNERSET)); 
    840800      if (temp != null) { 
    841801        // scanner data 
     
    845805      } 
    846806 
    847       temp = (byte[]) headerIFDs[i].get(new Integer(60)); 
     807      temp = (byte[]) headerIFDs[i].get(new Integer(EXPERIMENT)); 
    848808      if (temp != null) { 
    849809        // experiment data 
     
    872832      } 
    873833 
    874       temp = (byte[]) headerIFDs[i].get(new Integer(70)); 
     834      temp = (byte[]) headerIFDs[i].get(new Integer(LUTDESC)); 
    875835      if (temp != null) { 
    876836        // LUT data 
     
    894854          int invert = stream.read(); 
    895855          boolean inverted = invert == 1; 
    896           addMeta("LUT Channel " + j + " inverted?", 
    897             new Boolean(inverted).toString()); 
     856          addMeta("LUT Channel " + j + " inverted?", new Boolean(inverted)); 
    898857 
    899858          int length = stream.readInt(); 
     
    937896      new FilterMetadata(getMetadataStore(), isMetadataFiltered()); 
    938897 
    939     byte[] f = new byte[4]; 
    940898    for (int i=0; i<numSeries; i++) { 
    941899      if (core.sizeC[i] == 0) core.sizeC[i] = 1; 
  • trunk/loci/formats/in/MNGReader.java

    r3617 r3829  
    130130    status("Reading dimensions"); 
    131131 
    132     core.sizeX[0] = in.readInt(); 
    133     core.sizeY[0] = in.readInt(); 
    134     in.skipBytes(24); 
     132    in.skipBytes(32); 
    135133 
    136134    Vector stack = new Vector(); 
     
    159157      } 
    160158      else if (code.equals("ENDL")) { 
    161         int seek = ((Integer) stack.get(stack.size() - 1)).intValue(); 
     159        long seek = ((Long) stack.get(stack.size() - 1)).longValue(); 
    162160        if (currentIteration < maxIterations) { 
    163161          in.seek(seek); 
     
    192190    b[7] = 0x0a; 
    193191 
    194     core.sizeC[0] = 
    195       ImageIO.read(new ByteArrayInputStream(b)).getRaster().getNumBands(); 
     192    BufferedImage img = ImageIO.read(new ByteArrayInputStream(b)); 
     193 
     194    core.sizeX[0] = img.getWidth(); 
     195    core.sizeY[0] = img.getHeight(); 
     196    core.sizeC[0] = img.getRaster().getNumBands(); 
    196197 
    197198    core.sizeT[0] = core.imageCount[0]; 
Note: See TracChangeset for help on using the changeset viewer.