Changeset 4086


Ignore:
Timestamp:
06/02/08 10:14:32 (12 years ago)
Author:
melissa
Message:

Improved OME-XML population for InCell 1000.

File:
1 edited

Legend:

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

    r4048 r4086  
    5454 
    5555  private Vector tiffs; 
    56   private TiffReader[] tiffReaders; 
     56  private TiffReader[][] tiffReaders; 
     57  private int seriesCount; 
     58  private Vector emWaves, exWaves; 
     59  private Vector timings; 
     60  private int totalImages; 
     61  private String creationDate; 
    5762 
    5863  // -- Constructor -- 
     
    7681  public byte[][] get8BitLookupTable() throws FormatException, IOException { 
    7782    FormatTools.assertId(currentId, true, 1); 
    78     return tiffReaders[0].get8BitLookupTable(); 
     83    return tiffReaders[series][0].get8BitLookupTable(); 
    7984  } 
    8085 
     
    8287  public short[][] get16BitLookupTable() throws FormatException, IOException { 
    8388    FormatTools.assertId(currentId, true, 1); 
    84     return tiffReaders[0].get16BitLookupTable(); 
     89    return tiffReaders[series][0].get16BitLookupTable(); 
    8590  } 
    8691 
     
    9499    FormatTools.checkPlaneNumber(this, no); 
    95100    FormatTools.checkBufferSize(this, buf.length, w, h); 
    96     return tiffReaders[no].openBytes(0, buf, x, y, w, h); 
     101    tiffReaders[series][no].setId( 
     102      (String) tiffs.get(series * tiffReaders[0].length + no)); 
     103    return tiffReaders[series][no].openBytes(0, buf, x, y, w, h); 
    97104  } 
    98105 
     
    116123    if (tiffReaders != null) { 
    117124      for (int i=0; i<tiffReaders.length; i++) { 
    118         tiffReaders[i].close(); 
     125        for (int j=0; j<tiffReaders[i].length; j++) { 
     126          tiffReaders[i][j].close(); 
     127        } 
    119128      } 
    120129      tiffReaders = null; 
    121130    } 
     131    seriesCount = 0; 
     132    totalImages = 0; 
    122133  } 
    123134 
     
    131142 
    132143    tiffs = new Vector(); 
    133  
    134     InCellHandler handler = new InCellHandler(); 
     144    emWaves = new Vector(); 
     145    exWaves = new Vector(); 
     146    timings = new Vector(); 
     147 
    135148    byte[] b = new byte[(int) in.length()]; 
    136149    in.read(b); 
     150 
     151    MetadataStore store = 
     152      new FilterMetadata(getMetadataStore(), isMetadataFiltered()); 
     153    InCellHandler handler = new InCellHandler(store); 
    137154 
    138155    try { 
     
    147164    } 
    148165 
    149     tiffReaders = new TiffReader[tiffs.size()]; 
    150     for (int i=0; i<tiffs.size(); i++) { 
    151       tiffReaders[i] = new TiffReader(); 
    152       tiffReaders[i].setId((String) tiffs.get(i)); 
    153     } 
    154  
    155     core.sizeX[0] = tiffReaders[0].getSizeX(); 
    156     core.sizeY[0] = tiffReaders[0].getSizeY(); 
    157     core.imageCount[0] = core.sizeZ[0] * core.sizeC[0] * core.sizeT[0]; 
    158     core.interleaved[0] = tiffReaders[0].isInterleaved(); 
    159     core.indexed[0] = tiffReaders[0].isIndexed(); 
    160     core.rgb[0] = tiffReaders[0].isRGB(); 
    161     core.currentOrder[0] = "XYZCT"; 
    162     core.pixelType[0] = tiffReaders[0].getPixelType(); 
    163     core.littleEndian[0] = tiffReaders[0].isLittleEndian(); 
    164  
    165     MetadataStore store = 
    166       new FilterMetadata(getMetadataStore(), isMetadataFiltered()); 
    167     store.setImageName("", 0); 
    168     store.setImageCreationDate( 
    169       DataTools.convertDate(System.currentTimeMillis(), DataTools.UNIX), 0); 
     166    seriesCount = totalImages / (core.sizeZ[0] * core.sizeC[0] * core.sizeT[0]); 
     167    tiffReaders = new TiffReader[seriesCount][tiffs.size() / seriesCount]; 
     168    for (int i=0; i<tiffReaders.length; i++) { 
     169      for (int j=0; j<tiffReaders[0].length; j++) { 
     170        tiffReaders[i][j] = new TiffReader(); 
     171      } 
     172      tiffReaders[i][0].setId((String) tiffs.get(i * tiffReaders[0].length)); 
     173    } 
     174 
     175    int z = core.sizeZ[0]; 
     176    int c = core.sizeC[0]; 
     177    int t = core.sizeT[0]; 
     178 
     179    core = new CoreMetadata(seriesCount); 
     180 
     181    Arrays.fill(core.sizeZ, z); 
     182    Arrays.fill(core.sizeC, c); 
     183    Arrays.fill(core.sizeT, t); 
     184    Arrays.fill(core.imageCount, z * c * t); 
     185    Arrays.fill(core.currentOrder, "XYZCT"); 
     186 
     187    int nextTiming = 0; 
     188    for (int i=0; i<seriesCount; i++) { 
     189      core.sizeX[i] = tiffReaders[i][0].getSizeX(); 
     190      core.sizeY[i] = tiffReaders[i][0].getSizeY(); 
     191      core.interleaved[i] = tiffReaders[i][0].isInterleaved(); 
     192      core.indexed[i] = tiffReaders[i][0].isIndexed(); 
     193      core.rgb[i] = tiffReaders[i][0].isRGB(); 
     194      core.pixelType[i] = tiffReaders[i][0].getPixelType(); 
     195      core.littleEndian[i] = tiffReaders[i][0].isLittleEndian(); 
     196      store.setImageName("", i); 
     197      store.setImageCreationDate(creationDate, i); 
     198      for (int q=0; q<emWaves.size(); q++) { 
     199        store.setLogicalChannelEmWave((Integer) emWaves.get(q), i, q); 
     200        store.setLogicalChannelExWave((Integer) exWaves.get(q), i, q); 
     201      } 
     202      for (int q=0; q<core.imageCount[i]; q++) { 
     203        store.setPlaneTimingDeltaT((Float) timings.get(nextTiming++), i, 0, q); 
     204        int[] coords = FormatTools.getZCTCoords("XYZCT", z, c, t, z * c * t, q); 
     205        store.setPlaneTheZ(new Integer(coords[0]), i, 0, q); 
     206        store.setPlaneTheC(new Integer(coords[1]), i, 0, q); 
     207        store.setPlaneTheT(new Integer(coords[2]), i, 0, q); 
     208        store.setPlaneTimingExposureTime(new Float(0), i, 0, q); 
     209      } 
     210    } 
     211 
    170212    MetadataTools.populatePixels(store, this); 
    171213  } 
     
    175217  /** SAX handler for parsing XML. */ 
    176218  class InCellHandler extends DefaultHandler { 
     219    private String currentQName; 
     220    private int nextEmWave = 0; 
     221    private int nextExWave = 0; 
     222    private MetadataStore store; 
     223 
     224    public InCellHandler(MetadataStore store) { 
     225      this.store = store; 
     226    } 
     227 
     228    public void characters(char[] ch, int start, int length) { 
     229      String value = new String(ch, start, length); 
     230      if (currentQName.equals("UserComment")) { 
     231        store.setImageDescription(value, 0); 
     232      } 
     233    } 
     234 
    177235    public void startElement(String uri, String localName, String qName, 
    178236      Attributes attributes) 
    179237    { 
     238      currentQName = qName; 
    180239      for (int i=0; i<attributes.getLength(); i++) { 
    181240        addMeta(qName + " - " + attributes.getQName(i), attributes.getValue(i)); 
    182241      } 
    183242 
    184       if (qName.equals("Image")) { 
     243      if (qName.equals("Images")) { 
     244        totalImages = Integer.parseInt(attributes.getValue("number")); 
     245      } 
     246      else if (qName.equals("Image")) { 
    185247        String file = attributes.getValue("filename"); 
     248        String thumb = attributes.getValue("thumbnail"); 
    186249        Location current = new Location(currentId).getAbsoluteFile(); 
     250 
    187251        if (new Location(current.getParentFile(), file).exists()) { 
    188252          tiffs.add( 
     
    190254        } 
    191255        else tiffs.add(file); 
     256        timings.add(new Float(attributes.getValue("acquisition_time_ms"))); 
    192257      } 
    193258      else if (qName.equals("Identifier")) { 
    194         core.sizeZ[0] = Integer.parseInt(attributes.getValue("z_index")) + 1; 
    195         core.sizeC[0] = Integer.parseInt(attributes.getValue("wave_index")) + 1; 
    196         core.sizeT[0] = Integer.parseInt(attributes.getValue("time_index")) + 1; 
     259        int z = Integer.parseInt(attributes.getValue("z_index")) + 1; 
     260        int c = Integer.parseInt(attributes.getValue("wave_index")) + 1; 
     261        int t = Integer.parseInt(attributes.getValue("time_index")) + 1; 
     262        core.sizeZ[0] = (int) Math.max(core.sizeZ[0], z); 
     263        core.sizeC[0] = (int) Math.max(core.sizeC[0], c); 
     264        core.sizeT[0] = (int) Math.max(core.sizeT[0], t); 
     265      } 
     266      else if (qName.equals("Creation")) { 
     267        String date = attributes.getValue("date"); // yyyy-mm-dd 
     268        String time = attributes.getValue("time"); // hh:mm:ss 
     269        creationDate = date + "T" + time; 
     270      } 
     271      else if (qName.equals("ObjectiveCalibration")) { 
     272        store.setObjectiveCalibratedMagnification( 
     273          new Float(attributes.getValue("magnification")), 0, 0); 
     274        store.setObjectiveModel(attributes.getValue("objective_name"), 0, 0); 
     275        store.setObjectiveLensNA(new Float( 
     276          attributes.getValue("numerical_aperture")), 0, 0); 
     277      } 
     278      else if (qName.equals("ExcitationFilter")) { 
     279        String wave = attributes.getValue("wavelength"); 
     280        if (wave != null) exWaves.add(new Integer(wave)); 
     281      } 
     282      else if (qName.equals("EmissionFilter")) { 
     283        String wave = attributes.getValue("wavelength"); 
     284        if (wave != null) emWaves.add(new Integer(wave)); 
     285      } 
     286      else if (qName.equals("Plate")) { 
     287        store.setPlateName(attributes.getValue("name"), 0); 
     288        int rows = Integer.parseInt(attributes.getValue("rows")); 
     289        int cols = Integer.parseInt(attributes.getValue("columns")); 
     290 
     291        for (int r=0; r<rows; r++) { 
     292          for (int c=0; c<cols; c++) { 
     293            store.setWellRow(new Integer(r), r*cols + c); 
     294            store.setWellColumn(new Integer(c), r*cols + c); 
     295          } 
     296        } 
    197297      } 
    198298    } 
Note: See TracChangeset for help on using the changeset viewer.