Changeset 4748


Ignore:
Timestamp:
01/16/09 16:05:32 (11 years ago)
Author:
melissa
Message:

Fixed some OME-XML validation issues - Image.DefaultPixels is now populated, and TiffData elements are properly inserted into OME-TIFF files.

Location:
trunk/components/bio-formats/src/loci/formats
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/components/bio-formats/src/loci/formats/MetadataTools.java

    r4524 r4748  
    183183  } 
    184184 
     185  public static IMetadata getOMEMetadata(MetadataRetrieve src) { 
     186    // check if the metadata is already an OME-XML metadata object 
     187    if (isOMEXMLMetadata(src)) return (IMetadata) src; 
     188 
     189    // populate a new OME-XML metadata object with metadata 
     190    // converted from the non-OME-XML metadata object 
     191    IMetadata omexmlMeta = createOMEXMLMetadata(); 
     192    convertMetadata(src, omexmlMeta); 
     193    return omexmlMeta; 
     194  } 
     195 
    185196  /** 
    186197   * Extracts an OME-XML metadata string from the given metadata object, 
     
    188199   */ 
    189200  public static String getOMEXML(MetadataRetrieve src) { 
    190     MetadataStore omexmlMeta; 
    191     if (isOMEXMLMetadata(src)) { 
    192       // the metadata is already an OME-XML metadata object 
    193       omexmlMeta = (MetadataStore) src; 
    194     } 
    195     else { 
    196       // populate a new OME-XML metadata object with metadata 
    197       // converted from the non-OME-XML metadata object 
    198       omexmlMeta = createOMEXMLMetadata(); 
    199       MetadataTools.convertMetadata(src, omexmlMeta); 
    200     } 
     201    IMetadata omexmlMeta = getOMEMetadata(src); 
    201202    ReflectedUniverse r = new ReflectedUniverse(); 
    202203    r.setVar("omexmlMeta", omexmlMeta); 
     
    238239    for (int i=0; i<r.getSeriesCount(); i++) { 
    239240      r.setSeries(i); 
     241      store.setImageDefaultPixels("Pixels:0", i); 
    240242      store.setPixelsSizeX(new Integer(r.getSizeX()), i, 0); 
    241243      store.setPixelsSizeY(new Integer(r.getSizeY()), i, 0); 
  • trunk/components/bio-formats/src/loci/formats/out/OMETiffWriter.java

    r4521 r4748  
    2929import loci.common.*; 
    3030import loci.formats.*; 
    31 import loci.formats.meta.MetadataRetrieve; 
     31import loci.formats.meta.*; 
    3232 
    3333/** 
     
    6868      // extract OME-XML string from metadata object 
    6969      MetadataRetrieve retrieve = getMetadataRetrieve(); 
    70       String xml = MetadataTools.getOMEXML(retrieve); 
    71  
    72       // CTR TODO - convert OME-XML to DOM 
    73       // rather than build from string, just dump from retrieve into latest 
    74       // OME-XML metadata store using MetadataTools 
    75  
    76       // inject TiffData elements 
    77       // use DOMUtil.findElementList(String, Document) to get list of Pixels 
    78       // each Pixels corresponds to one series, in order 
     70      IMetadata omeMeta = MetadataTools.getOMEMetadata(retrieve); 
    7971 
    8072      // generate UUID and add to OME element 
     
    9587      // finish thinking this through 
    9688 
    97       // insert warning comment 
    98       String prefix = xml.substring(0, xml.indexOf(">") + 1); 
    99       String suffix = xml.substring(xml.indexOf(">") + 1); 
    100       xml = prefix + WARNING_COMMENT + suffix; 
    101  
    102       int previousPixelsIndex = 0; 
    103  
    104       for (int series=0; series<retrieve.getImageCount(); series++) { 
    105         String dimensionOrder = retrieve.getPixelsDimensionOrder(series, 0); 
    106         int sizeZ = retrieve.getPixelsSizeZ(series, 0).intValue(); 
    107         int sizeC = retrieve.getPixelsSizeC(series, 0).intValue(); 
    108         int sizeT = retrieve.getPixelsSizeT(series, 0).intValue(); 
     89      for (int series=0; series<omeMeta.getImageCount(); series++) { 
     90        String dimensionOrder = omeMeta.getPixelsDimensionOrder(series, 0); 
     91        int sizeZ = omeMeta.getPixelsSizeZ(series, 0).intValue(); 
     92        int sizeC = omeMeta.getPixelsSizeC(series, 0).intValue(); 
     93        int sizeT = omeMeta.getPixelsSizeT(series, 0).intValue(); 
    10994 
    11095        int imageCount = 0; 
     
    118103        } 
    119104 
    120         StringBuffer tiffData = new StringBuffer(); 
    121         tiffData.append(">"); 
    122105        int num = 0; 
    123         for (int q=0; q<imageCount; q++) { 
     106        for (int plane=0; plane<imageCount; plane++) { 
    124107          while (((Integer) seriesMap.get(num)).intValue() != series) { 
    125108            num++; 
    126109          } 
    127           int[] coordinates = FormatTools.getZCTCoords(dimensionOrder, 
    128             sizeZ, sizeC, sizeT, imageCount, q); 
    129           tiffData.append("<TiffData IFD=\""); 
    130           tiffData.append(num); 
    131           tiffData.append("\" FirstZ=\""); 
    132           tiffData.append(coordinates[0]); 
    133           tiffData.append("\" FirstC=\""); 
    134           tiffData.append(coordinates[1]); 
    135           tiffData.append("\" FirstT=\""); 
    136           tiffData.append(coordinates[2]); 
    137           tiffData.append("\" />"); 
    138           num++; 
     110          int[] zct = FormatTools.getZCTCoords(dimensionOrder, 
     111            sizeZ, sizeC, sizeT, imageCount, plane); 
     112          omeMeta.setTiffDataFileName(currentId, series, 0, plane); 
     113          omeMeta.setTiffDataFirstZ(new Integer(zct[0]), series, 0, plane); 
     114          omeMeta.setTiffDataFirstC(new Integer(zct[1]), series, 0, plane); 
     115          omeMeta.setTiffDataFirstT(new Integer(zct[2]), series, 0, plane); 
     116          omeMeta.setTiffDataIFD(new Integer(num), series, 0, plane); 
    139117        } 
    140         tiffData.append("</Pixels>"); 
     118      } 
    141119 
    142         // insert TiffData element 
    143         int pix = xml.indexOf("<Pixels ", previousPixelsIndex); 
    144         int end = xml.indexOf("</Pixels", pix); 
    145         int len = 9; 
    146         if (end == -1) { 
    147           end = xml.indexOf("/>", pix); 
    148           len = 2; 
    149         } 
     120      String xml = MetadataTools.getOMEXML(omeMeta); 
    150121 
    151         prefix = xml.substring(0, end); 
    152         suffix = xml.substring(end + len); 
    153         xml = prefix + tiffData.toString() + suffix; 
    154         previousPixelsIndex = pix + 8; 
    155       } 
     122      // insert warning comment 
     123      String prefix = xml.substring(0, xml.indexOf(">") + 1); 
     124      String suffix = xml.substring(xml.indexOf(">") + 1); 
     125      xml = prefix + WARNING_COMMENT + suffix; 
    156126 
    157127      // write OME-XML to the first IFD's comment 
Note: See TracChangeset for help on using the changeset viewer.