Changeset 7091


Ignore:
Timestamp:
10/19/10 14:46:49 (9 years ago)
Author:
melissa
Message:
  • Attempt to gracefully handle truncated Deltavision files. See QA #2892, closes #583.
  • Minor refactoring, so that I didn't have to make the above fix in two places.
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/4.2/components/bio-formats/src/loci/formats/in/DeltavisionReader.java

    r7007 r7091  
    201201    findLogFiles(); 
    202202 
     203    in = new RandomAccessInputStream(currentId); 
     204    initPixels(); 
     205 
    203206    MetadataLevel metadataLevel = metadataOptions.getMetadataLevel(); 
    204     switch (metadataLevel) { 
    205       case MINIMUM: { 
    206         initFilePixelsOnly(id); 
    207         break; 
    208       } 
    209       case NO_OVERLAYS: 
    210       case ALL: 
    211         initFileOld(id); 
    212         break; 
    213       default: { 
    214         LOGGER.warn("Unsupported level: " + metadataLevel); 
    215       } 
    216     } 
    217   } 
    218  
    219   protected void initFilePixelsOnly(String id) 
    220     throws FormatException, IOException { 
     207    if (metadataLevel != MetadataLevel.MINIMUM) { 
     208      initExtraMetadata(); 
     209    } 
     210  } 
     211 
     212  protected void initPixels() throws FormatException, IOException { 
    221213    LOGGER.info("Reading header"); 
    222214 
    223215    MetadataStore store = makeFilterMetadata(); 
    224  
    225     in = new RandomAccessInputStream(id); 
    226216 
    227217    in.seek(96); 
     
    252242    // --- compute some secondary values --- 
    253243 
    254     String imageSequence; 
    255     switch (sequence) { 
    256       case 0: 
    257         imageSequence = "ZTW"; 
    258         break; 
    259       case 1: 
    260         imageSequence = "WZT"; 
    261         break; 
    262       case 2: 
    263         imageSequence = "ZWT"; 
    264         break; 
    265       case 65536: 
    266         imageSequence = "WZT"; 
    267         break; 
    268       default: 
    269         imageSequence = "ZTW"; 
    270     } 
     244    String imageSequence = getImageSequence(sequence); 
    271245 
    272246    int sizeZ = imageCount / (sizeC * sizeT); 
     
    281255    core[0].imageCount = imageCount; 
    282256 
    283     String pixel; 
    284     switch (filePixelType) { 
    285       case 0: 
    286         pixel = "8 bit unsigned integer"; 
    287         core[0].pixelType = FormatTools.UINT8; 
    288         break; 
    289       case 1: 
    290         pixel = "16 bit signed integer"; 
    291         core[0].pixelType = FormatTools.INT16; 
    292         break; 
    293       case 2: 
    294         pixel = "32 bit floating point"; 
    295         core[0].pixelType = FormatTools.FLOAT; 
    296         break; 
    297       case 3: 
    298         pixel = "16 bit complex"; 
    299         core[0].pixelType = FormatTools.INT16; 
    300         break; 
    301       case 4: 
    302         pixel = "64 bit complex"; 
    303         core[0].pixelType = FormatTools.FLOAT; 
    304         break; 
    305       case 6: 
    306         pixel = "16 bit unsigned integer"; 
    307         core[0].pixelType = FormatTools.UINT16; 
    308         break; 
    309       default: 
    310         pixel = "unknown"; 
    311         core[0].pixelType = FormatTools.UINT8; 
     257    String pixel = getPixelString(filePixelType); 
     258    core[0].pixelType = getPixelType(filePixelType); 
     259 
     260    core[0].dimensionOrder = "XY" + imageSequence.replaceAll("W", "C"); 
     261 
     262    int planeSize = 
     263      getSizeX() * getSizeY() * FormatTools.getBytesPerPixel(getPixelType()); 
     264    int realPlaneCount = 
     265      (int) ((in.length() - HEADER_LENGTH - extSize) / planeSize); 
     266    if (realPlaneCount < getImageCount()) { 
     267      LOGGER.debug("Truncated file"); 
     268      core[0].imageCount = realPlaneCount; 
     269      if (sizeZ == 1) { 
     270        sizeT = realPlaneCount / sizeC; 
     271      } 
     272      else if (sizeT == 1) { 
     273        sizeZ = realPlaneCount / sizeC; 
     274      } 
     275      else if (getDimensionOrder().indexOf("Z") < 
     276        getDimensionOrder().indexOf("T")) 
     277      { 
     278        sizeZ = realPlaneCount / (sizeC * sizeT); 
     279      } 
     280      else { 
     281        sizeT = realPlaneCount / (sizeC * sizeZ); 
     282      } 
    312283    } 
    313284 
    314285    core[0].sizeT = sizeT; 
    315  
    316     core[0].dimensionOrder = "XY" + imageSequence.replaceAll("W", "C"); 
    317  
    318286    core[0].sizeC = sizeC; 
    319287    core[0].sizeZ = sizeZ; 
     
    348316    MetadataTools.populatePixels(store, this, true); 
    349317 
    350     MetadataTools.setDefaultCreationDate(store, id, 0); 
     318    MetadataTools.setDefaultCreationDate(store, currentId, 0); 
    351319 
    352320    // link Instrument and Image 
     
    356324  } 
    357325 
    358   /* @see loci.formats.FormatReader#initFile(String) */ 
    359   protected void initFileOld(String id) throws FormatException, IOException { 
    360     super.initFile(id); 
    361  
     326  protected void initExtraMetadata() throws FormatException, IOException { 
    362327    MetadataStore store = makeFilterMetadata(); 
    363328 
     
    366331    LOGGER.info("Reading header"); 
    367332 
    368     in = new RandomAccessInputStream(id); 
    369  
    370     in.seek(96); 
    371     in.order(true); 
    372  
    373     boolean little = in.readShort() == LITTLE_ENDIAN; 
    374     in.order(little); 
    375     in.seek(0); 
    376  
    377     int sizeX = in.readInt(); 
    378     int sizeY = in.readInt(); 
    379     int imageCount = in.readInt(); 
    380     int filePixelType = in.readInt(); 
     333    in.skipBytes(16); 
    381334 
    382335    int subImageStartX = in.readInt(); 
     
    406359    int spaceGroupNumber = in.readInt(); 
    407360 
    408     extSize = in.readInt(); 
    409  
    410361    in.seek(128); 
    411362    numIntsPerSection = in.readShort(); 
     
    428379    maxWave[4] = in.readFloat(); 
    429380 
    430     int rawSizeT = in.readShort(); 
    431     int sizeT = rawSizeT == 0 ? 1 : rawSizeT; 
     381    in.skipBytes(2); 
    432382 
    433383    int sequence = in.readShort(); 
     
    437387    float zTiltAngle = in.readFloat(); 
    438388 
    439     int rawSizeC = in.readShort(); 
    440     int sizeC = rawSizeC == 0 ? 1 : rawSizeC; 
     389    in.skipBytes(2); 
    441390 
    442391    short[] waves = new short[5]; 
     
    462411      type < IMAGE_TYPES.length ? IMAGE_TYPES[type] : "unknown"; 
    463412 
    464     String imageSequence; 
    465     switch (sequence) { 
    466       case 0: 
    467         imageSequence = "ZTW"; 
    468         break; 
    469       case 1: 
    470         imageSequence = "WZT"; 
    471         break; 
    472       case 2: 
    473         imageSequence = "ZWT"; 
    474         break; 
    475       case 65536: 
    476         imageSequence = "WZT"; 
    477         break; 
    478       default: 
    479         imageSequence = "ZTW"; 
    480     } 
    481  
    482     int sizeZ = imageCount / (sizeC * sizeT); 
    483  
    484413    String imageDesc = title[0]; 
    485414    if (imageDesc != null && imageDesc.length() == 0) imageDesc = null; 
    486415 
    487     // --- populate core metadata --- 
    488  
    489     LOGGER.info("Populating core metadata"); 
    490  
    491     core[0].littleEndian = little; 
    492     core[0].sizeX = sizeX; 
    493     core[0].sizeY = sizeY; 
    494     core[0].imageCount = imageCount; 
    495  
    496     String pixel; 
    497     switch (filePixelType) { 
    498       case 0: 
    499         pixel = "8 bit unsigned integer"; 
    500         core[0].pixelType = FormatTools.UINT8; 
    501         break; 
    502       case 1: 
    503         pixel = "16 bit signed integer"; 
    504         core[0].pixelType = FormatTools.INT16; 
    505         break; 
    506       case 2: 
    507         pixel = "32 bit floating point"; 
    508         core[0].pixelType = FormatTools.FLOAT; 
    509         break; 
    510       case 3: 
    511         pixel = "16 bit complex"; 
    512         core[0].pixelType = FormatTools.INT16; 
    513         break; 
    514       case 4: 
    515         pixel = "64 bit complex"; 
    516         core[0].pixelType = FormatTools.FLOAT; 
    517         break; 
    518       case 6: 
    519         pixel = "16 bit unsigned integer"; 
    520         core[0].pixelType = FormatTools.UINT16; 
    521         break; 
    522       default: 
    523         pixel = "unknown"; 
    524         core[0].pixelType = FormatTools.UINT8; 
    525     } 
    526  
    527     core[0].sizeT = sizeT; 
    528  
    529     core[0].dimensionOrder = "XY" + imageSequence.replaceAll("W", "C"); 
    530  
    531     core[0].sizeC = sizeC; 
    532     core[0].sizeZ = sizeZ; 
    533  
    534     core[0].rgb = false; 
    535     core[0].interleaved = false; 
    536     core[0].metadataComplete = true; 
    537     core[0].indexed = false; 
    538     core[0].falseColor = false; 
    539  
    540416    // --- populate original metadata --- 
    541417 
    542418    LOGGER.info("Populating original metadata"); 
    543419 
    544     addGlobalMeta("ImageWidth", sizeX); 
    545     addGlobalMeta("ImageHeight", sizeY); 
    546     addGlobalMeta("NumberOfImages", imageCount); 
    547  
    548     addGlobalMeta("PixelType", pixel); 
    549420    addGlobalMeta("Sub-image starting point (X)", subImageStartX); 
    550421    addGlobalMeta("Sub-image starting point (Y)", subImageStartY); 
     
    567438    addGlobalMeta("Lens ID Number", lensID); 
    568439 
    569     addGlobalMeta("Number of timepoints", rawSizeT); 
    570  
    571     addGlobalMeta("Image sequence", imageSequence); 
    572  
    573440    addGlobalMeta("X axis tilt angle", xTiltAngle); 
    574441    addGlobalMeta("Y axis tilt angle", yTiltAngle); 
    575442    addGlobalMeta("Z axis tilt angle", zTiltAngle); 
    576443 
    577     addGlobalMeta("Number of wavelengths", rawSizeC); 
    578     addGlobalMeta("Number of focal planes", sizeZ); 
    579  
    580444    for (int i=0; i<waves.length; i++) { 
    581445      addGlobalMeta("Wavelength " + (i + 1) + " (in nm)", waves[i]); 
     
    604468 
    605469    LOGGER.info("Populating OME metadata"); 
    606  
    607     MetadataTools.populatePixels(store, this, true); 
    608  
    609     MetadataTools.setDefaultCreationDate(store, id, 0); 
    610  
    611     // link Instrument and Image 
    612     String instrumentID = MetadataTools.createLSID("Instrument", 0); 
    613     store.setInstrumentID(instrumentID, 0); 
    614     store.setImageInstrumentRef(instrumentID, 0); 
    615470 
    616471    if (store instanceof IMinMaxStore) { 
     
    637492    LOGGER.info("Reading extended header"); 
    638493 
    639     setOffsetInfo(sequence, sizeZ, sizeC, sizeT); 
    640     extHdrFields = new DVExtHdrFields[sizeZ][sizeC][sizeT]; 
    641  
    642     ndFilters = new Double[sizeC]; 
     494    setOffsetInfo(sequence, getSizeZ(), getSizeC(), getSizeT()); 
     495    extHdrFields = new DVExtHdrFields[getSizeZ()][getSizeC()][getSizeT()]; 
     496 
     497    ndFilters = new Double[getSizeC()]; 
    643498 
    644499    // if matching log file exists, extract key/value pairs from it 
     
    649504    // Extended Header information array for that image 
    650505    int offset = HEADER_LENGTH + numIntsPerSection * 4; 
    651     for (int i=0; i<imageCount; i++) { 
     506    for (int i=0; i<getImageCount(); i++) { 
    652507      int[] coords = getZCTCoords(i); 
    653508      int z = coords[0]; 
     
    686541    } 
    687542 
    688     for (int w=0; w<sizeC; w++) { 
     543    for (int w=0; w<getSizeC(); w++) { 
    689544      DVExtHdrFields hdrC = extHdrFields[0][w][0]; 
    690545      if ((int) waves[w] > 0) { 
     
    702557 
    703558  // -- Helper methods -- 
     559 
     560  /** Get a descriptive string representing the pixel type. */ 
     561  private String getPixelString(int filePixelType) { 
     562     switch (filePixelType) { 
     563      case 0: 
     564        return "8 bit unsigned integer"; 
     565      case 1: 
     566        return "16 bit signed integer"; 
     567      case 2: 
     568        return "32 bit floating point"; 
     569      case 3: 
     570        return "16 bit complex"; 
     571      case 4: 
     572        return "64 bit complex"; 
     573      case 6: 
     574        return "16 bit unsigned integer"; 
     575    } 
     576    return "unknown"; 
     577  } 
     578 
     579  /** Get the OME pixel type from the pixel type stored in the file. */ 
     580  private int getPixelType(int filePixelType) { 
     581     switch (filePixelType) { 
     582      case 0: 
     583        return FormatTools.UINT8; 
     584      case 1: 
     585        return FormatTools.INT16; 
     586      case 2: 
     587        return FormatTools.FLOAT; 
     588      case 3: 
     589        return FormatTools.INT16; 
     590      case 4: 
     591        return FormatTools.FLOAT; 
     592      case 6: 
     593        return FormatTools.UINT16; 
     594    } 
     595    return FormatTools.UINT8; 
     596  } 
     597 
     598  /** Get the image sequence string. */ 
     599  private String getImageSequence(int imageSequence) { 
     600    switch (imageSequence) { 
     601      case 0: 
     602        return "ZTW"; 
     603      case 1: 
     604        return "WZT"; 
     605      case 2: 
     606        return "ZWT"; 
     607      case 65536: 
     608        return "WZT"; 
     609    } 
     610    return "ZTW"; 
     611  } 
    704612 
    705613  /** 
  • trunk/components/bio-formats/src/loci/formats/in/DeltavisionReader.java

    r7055 r7091  
    201201    findLogFiles(); 
    202202 
     203    in = new RandomAccessInputStream(currentId); 
     204    initPixels(); 
     205 
    203206    MetadataLevel metadataLevel = metadataOptions.getMetadataLevel(); 
    204     switch (metadataLevel) { 
    205       case MINIMUM: { 
    206         initFilePixelsOnly(id); 
    207         break; 
    208       } 
    209       case NO_OVERLAYS: 
    210       case ALL: 
    211         initFileOld(id); 
    212         break; 
    213       default: { 
    214         LOGGER.warn("Unsupported level: " + metadataLevel); 
    215       } 
    216     } 
    217   } 
    218  
    219   protected void initFilePixelsOnly(String id) 
    220     throws FormatException, IOException { 
     207    if (metadataLevel != MetadataLevel.MINIMUM) { 
     208      initExtraMetadata(); 
     209    } 
     210  } 
     211 
     212  protected void initPixels() throws FormatException, IOException { 
    221213    LOGGER.info("Reading header"); 
    222214 
    223215    MetadataStore store = makeFilterMetadata(); 
    224  
    225     in = new RandomAccessInputStream(id); 
    226216 
    227217    in.seek(96); 
     
    252242    // --- compute some secondary values --- 
    253243 
    254     String imageSequence; 
    255     switch (sequence) { 
    256       case 0: 
    257         imageSequence = "ZTW"; 
    258         break; 
    259       case 1: 
    260         imageSequence = "WZT"; 
    261         break; 
    262       case 2: 
    263         imageSequence = "ZWT"; 
    264         break; 
    265       case 65536: 
    266         imageSequence = "WZT"; 
    267         break; 
    268       default: 
    269         imageSequence = "ZTW"; 
    270     } 
     244    String imageSequence = getImageSequence(sequence); 
    271245 
    272246    int sizeZ = imageCount / (sizeC * sizeT); 
     
    281255    core[0].imageCount = imageCount; 
    282256 
    283     String pixel; 
    284     switch (filePixelType) { 
    285       case 0: 
    286         pixel = "8 bit unsigned integer"; 
    287         core[0].pixelType = FormatTools.UINT8; 
    288         break; 
    289       case 1: 
    290         pixel = "16 bit signed integer"; 
    291         core[0].pixelType = FormatTools.INT16; 
    292         break; 
    293       case 2: 
    294         pixel = "32 bit floating point"; 
    295         core[0].pixelType = FormatTools.FLOAT; 
    296         break; 
    297       case 3: 
    298         pixel = "16 bit complex"; 
    299         core[0].pixelType = FormatTools.INT16; 
    300         break; 
    301       case 4: 
    302         pixel = "64 bit complex"; 
    303         core[0].pixelType = FormatTools.FLOAT; 
    304         break; 
    305       case 6: 
    306         pixel = "16 bit unsigned integer"; 
    307         core[0].pixelType = FormatTools.UINT16; 
    308         break; 
    309       default: 
    310         pixel = "unknown"; 
    311         core[0].pixelType = FormatTools.UINT8; 
     257    String pixel = getPixelString(filePixelType); 
     258    core[0].pixelType = getPixelType(filePixelType); 
     259 
     260    core[0].dimensionOrder = "XY" + imageSequence.replaceAll("W", "C"); 
     261 
     262    int planeSize = 
     263      getSizeX() * getSizeY() * FormatTools.getBytesPerPixel(getPixelType()); 
     264    int realPlaneCount = 
     265      (int) ((in.length() - HEADER_LENGTH - extSize) / planeSize); 
     266    if (realPlaneCount < getImageCount()) { 
     267      LOGGER.debug("Truncated file"); 
     268      core[0].imageCount = realPlaneCount; 
     269      if (sizeZ == 1) { 
     270        sizeT = realPlaneCount / sizeC; 
     271      } 
     272      else if (sizeT == 1) { 
     273        sizeZ = realPlaneCount / sizeC; 
     274      } 
     275      else if (getDimensionOrder().indexOf("Z") < 
     276        getDimensionOrder().indexOf("T")) 
     277      { 
     278        sizeZ = realPlaneCount / (sizeC * sizeT); 
     279      } 
     280      else { 
     281        sizeT = realPlaneCount / (sizeC * sizeZ); 
     282      } 
    312283    } 
    313284 
    314285    core[0].sizeT = sizeT; 
    315  
    316     core[0].dimensionOrder = "XY" + imageSequence.replaceAll("W", "C"); 
    317  
    318286    core[0].sizeC = sizeC; 
    319287    core[0].sizeZ = sizeZ; 
     
    348316    MetadataTools.populatePixels(store, this, true); 
    349317 
    350     MetadataTools.setDefaultCreationDate(store, id, 0); 
     318    MetadataTools.setDefaultCreationDate(store, currentId, 0); 
    351319 
    352320    // link Instrument and Image 
     
    356324  } 
    357325 
    358   /* @see loci.formats.FormatReader#initFile(String) */ 
    359   protected void initFileOld(String id) throws FormatException, IOException { 
    360     super.initFile(id); 
    361  
     326  protected void initExtraMetadata() throws FormatException, IOException { 
    362327    MetadataStore store = makeFilterMetadata(); 
    363328 
     
    366331    LOGGER.info("Reading header"); 
    367332 
    368     in = new RandomAccessInputStream(id); 
    369  
    370     in.seek(96); 
    371     in.order(true); 
    372  
    373     boolean little = in.readShort() == LITTLE_ENDIAN; 
    374     in.order(little); 
    375     in.seek(0); 
    376  
    377     int sizeX = in.readInt(); 
    378     int sizeY = in.readInt(); 
    379     int imageCount = in.readInt(); 
    380     int filePixelType = in.readInt(); 
     333    in.skipBytes(16); 
    381334 
    382335    int subImageStartX = in.readInt(); 
     
    406359    int spaceGroupNumber = in.readInt(); 
    407360 
    408     extSize = in.readInt(); 
    409  
    410361    in.seek(128); 
    411362    numIntsPerSection = in.readShort(); 
     
    428379    maxWave[4] = in.readFloat(); 
    429380 
    430     int rawSizeT = in.readShort(); 
    431     int sizeT = rawSizeT == 0 ? 1 : rawSizeT; 
     381    in.skipBytes(2); 
    432382 
    433383    int sequence = in.readShort(); 
     
    437387    float zTiltAngle = in.readFloat(); 
    438388 
    439     int rawSizeC = in.readShort(); 
    440     int sizeC = rawSizeC == 0 ? 1 : rawSizeC; 
     389    in.skipBytes(2); 
    441390 
    442391    short[] waves = new short[5]; 
     
    462411      type < IMAGE_TYPES.length ? IMAGE_TYPES[type] : "unknown"; 
    463412 
    464     String imageSequence; 
    465     switch (sequence) { 
    466       case 0: 
    467         imageSequence = "ZTW"; 
    468         break; 
    469       case 1: 
    470         imageSequence = "WZT"; 
    471         break; 
    472       case 2: 
    473         imageSequence = "ZWT"; 
    474         break; 
    475       case 65536: 
    476         imageSequence = "WZT"; 
    477         break; 
    478       default: 
    479         imageSequence = "ZTW"; 
    480     } 
    481  
    482     int sizeZ = imageCount / (sizeC * sizeT); 
    483  
    484413    String imageDesc = title[0]; 
    485414    if (imageDesc != null && imageDesc.length() == 0) imageDesc = null; 
    486415 
    487     // --- populate core metadata --- 
    488  
    489     LOGGER.info("Populating core metadata"); 
    490  
    491     core[0].littleEndian = little; 
    492     core[0].sizeX = sizeX; 
    493     core[0].sizeY = sizeY; 
    494     core[0].imageCount = imageCount; 
    495  
    496     String pixel; 
    497     switch (filePixelType) { 
    498       case 0: 
    499         pixel = "8 bit unsigned integer"; 
    500         core[0].pixelType = FormatTools.UINT8; 
    501         break; 
    502       case 1: 
    503         pixel = "16 bit signed integer"; 
    504         core[0].pixelType = FormatTools.INT16; 
    505         break; 
    506       case 2: 
    507         pixel = "32 bit floating point"; 
    508         core[0].pixelType = FormatTools.FLOAT; 
    509         break; 
    510       case 3: 
    511         pixel = "16 bit complex"; 
    512         core[0].pixelType = FormatTools.INT16; 
    513         break; 
    514       case 4: 
    515         pixel = "64 bit complex"; 
    516         core[0].pixelType = FormatTools.FLOAT; 
    517         break; 
    518       case 6: 
    519         pixel = "16 bit unsigned integer"; 
    520         core[0].pixelType = FormatTools.UINT16; 
    521         break; 
    522       default: 
    523         pixel = "unknown"; 
    524         core[0].pixelType = FormatTools.UINT8; 
    525     } 
    526  
    527     core[0].sizeT = sizeT; 
    528  
    529     core[0].dimensionOrder = "XY" + imageSequence.replaceAll("W", "C"); 
    530  
    531     core[0].sizeC = sizeC; 
    532     core[0].sizeZ = sizeZ; 
    533  
    534     core[0].rgb = false; 
    535     core[0].interleaved = false; 
    536     core[0].metadataComplete = true; 
    537     core[0].indexed = false; 
    538     core[0].falseColor = false; 
    539  
    540416    // --- populate original metadata --- 
    541417 
    542418    LOGGER.info("Populating original metadata"); 
    543419 
    544     addGlobalMeta("ImageWidth", sizeX); 
    545     addGlobalMeta("ImageHeight", sizeY); 
    546     addGlobalMeta("NumberOfImages", imageCount); 
    547  
    548     addGlobalMeta("PixelType", pixel); 
    549420    addGlobalMeta("Sub-image starting point (X)", subImageStartX); 
    550421    addGlobalMeta("Sub-image starting point (Y)", subImageStartY); 
     
    567438    addGlobalMeta("Lens ID Number", lensID); 
    568439 
    569     addGlobalMeta("Number of timepoints", rawSizeT); 
    570  
    571     addGlobalMeta("Image sequence", imageSequence); 
    572  
    573440    addGlobalMeta("X axis tilt angle", xTiltAngle); 
    574441    addGlobalMeta("Y axis tilt angle", yTiltAngle); 
    575442    addGlobalMeta("Z axis tilt angle", zTiltAngle); 
    576443 
    577     addGlobalMeta("Number of wavelengths", rawSizeC); 
    578     addGlobalMeta("Number of focal planes", sizeZ); 
    579  
    580444    for (int i=0; i<waves.length; i++) { 
    581445      addGlobalMeta("Wavelength " + (i + 1) + " (in nm)", waves[i]); 
     
    604468 
    605469    LOGGER.info("Populating OME metadata"); 
    606  
    607     MetadataTools.populatePixels(store, this, true); 
    608  
    609     MetadataTools.setDefaultCreationDate(store, id, 0); 
    610  
    611     // link Instrument and Image 
    612     String instrumentID = MetadataTools.createLSID("Instrument", 0); 
    613     store.setInstrumentID(instrumentID, 0); 
    614     store.setImageInstrumentRef(instrumentID, 0); 
    615470 
    616471    if (store instanceof IMinMaxStore) { 
     
    637492    LOGGER.info("Reading extended header"); 
    638493 
    639     setOffsetInfo(sequence, sizeZ, sizeC, sizeT); 
    640     extHdrFields = new DVExtHdrFields[sizeZ][sizeC][sizeT]; 
    641  
    642     ndFilters = new Double[sizeC]; 
     494    setOffsetInfo(sequence, getSizeZ(), getSizeC(), getSizeT()); 
     495    extHdrFields = new DVExtHdrFields[getSizeZ()][getSizeC()][getSizeT()]; 
     496 
     497    ndFilters = new Double[getSizeC()]; 
    643498 
    644499    // if matching log file exists, extract key/value pairs from it 
     
    649504    // Extended Header information array for that image 
    650505    int offset = HEADER_LENGTH + numIntsPerSection * 4; 
    651     for (int i=0; i<imageCount; i++) { 
     506    for (int i=0; i<getImageCount(); i++) { 
    652507      int[] coords = getZCTCoords(i); 
    653508      int z = coords[0]; 
     
    690545    } 
    691546 
    692     for (int w=0; w<sizeC; w++) { 
     547    for (int w=0; w<getSizeC(); w++) { 
    693548      DVExtHdrFields hdrC = extHdrFields[0][w][0]; 
    694549      if ((int) waves[w] > 0) { 
     
    706561 
    707562  // -- Helper methods -- 
     563 
     564  /** Get a descriptive string representing the pixel type. */ 
     565  private String getPixelString(int filePixelType) { 
     566     switch (filePixelType) { 
     567      case 0: 
     568        return "8 bit unsigned integer"; 
     569      case 1: 
     570        return "16 bit signed integer"; 
     571      case 2: 
     572        return "32 bit floating point"; 
     573      case 3: 
     574        return "16 bit complex"; 
     575      case 4: 
     576        return "64 bit complex"; 
     577      case 6: 
     578        return "16 bit unsigned integer"; 
     579    } 
     580    return "unknown"; 
     581  } 
     582 
     583  /** Get the OME pixel type from the pixel type stored in the file. */ 
     584  private int getPixelType(int filePixelType) { 
     585     switch (filePixelType) { 
     586      case 0: 
     587        return FormatTools.UINT8; 
     588      case 1: 
     589        return FormatTools.INT16; 
     590      case 2: 
     591        return FormatTools.FLOAT; 
     592      case 3: 
     593        return FormatTools.INT16; 
     594      case 4: 
     595        return FormatTools.FLOAT; 
     596      case 6: 
     597        return FormatTools.UINT16; 
     598    } 
     599    return FormatTools.UINT8; 
     600  } 
     601 
     602  /** Get the image sequence string. */ 
     603  private String getImageSequence(int imageSequence) { 
     604    switch (imageSequence) { 
     605      case 0: 
     606        return "ZTW"; 
     607      case 1: 
     608        return "WZT"; 
     609      case 2: 
     610        return "ZWT"; 
     611      case 65536: 
     612        return "WZT"; 
     613    } 
     614    return "ZTW"; 
     615  } 
    708616 
    709617  /** 
Note: See TracChangeset for help on using the changeset viewer.