Changeset 4805


Ignore:
Timestamp:
02/13/09 09:27:08 (11 years ago)
Author:
melissa
Message:

Split each field into its' own series. Closes #332.

File:
1 edited

Legend:

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

    r4750 r4805  
    5858  private int binX, binY; 
    5959 
     60  private int plateCount; 
     61  private int wellCount; 
     62  private int fieldCount; 
     63 
     64  private Vector channelNames; 
     65 
    6066  // -- Constructor -- 
    6167 
     
    113119    super.close(); 
    114120    factors = null; 
     121    binX = binY = 0; 
     122    plateCount = wellCount = fieldCount = 0; 
     123    channelNames = null; 
    115124  } 
    116125 
     
    121130    super.initStandardMetadata(); 
    122131 
    123     core[0].orderCertain = false; 
     132    core[0].dimensionOrder = "XYCZT"; 
     133    core[0].sizeC = 0; 
     134    core[0].sizeT = 0; 
     135    core[0].sizeZ = 0; 
     136 
     137    channelNames = new Vector(); 
    124138 
    125139    // parse factors from XML 
     
    143157    DataTools.parseXML(c, handler); 
    144158 
     159    core[0].sizeC = (int) Math.max(channelNames.size(), 1); 
     160 
     161    if (getSizeZ() == 0) core[0].sizeZ = 1; 
     162    if (getSizeT() == 0) core[0].sizeT = 1; 
     163    if (plateCount == 0) plateCount = 1; 
     164    if (wellCount == 0) wellCount = 1; 
     165    if (fieldCount == 0) fieldCount = 1; 
     166 
     167    core[0].imageCount = getSizeZ() * getSizeC() * getSizeT(); 
     168    int seriesCount = plateCount * wellCount * fieldCount; 
     169 
     170    if (getImageCount() * seriesCount < ifds.length) { 
     171      core[0].imageCount = ifds.length / seriesCount; 
     172      core[0].sizeZ = 1; 
     173      core[0].sizeC = 1; 
     174      core[0].sizeT = ifds.length / seriesCount; 
     175    } 
     176 
     177    CoreMetadata oldCore = core[0]; 
     178    core = new CoreMetadata[seriesCount]; 
     179    core[0] = oldCore; 
     180 
     181    for (int i=1; i<seriesCount; i++) { 
     182      core[i] = new CoreMetadata(); 
     183      core[i].sizeX = getSizeX(); 
     184      core[i].sizeY = getSizeY(); 
     185      core[i].sizeZ = getSizeZ(); 
     186      core[i].sizeC = getSizeC(); 
     187      core[i].sizeT = getSizeT(); 
     188      core[i].imageCount = getSizeZ() * getSizeC() * getSizeT(); 
     189      core[i].dimensionOrder = getDimensionOrder(); 
     190      core[i].rgb = isRGB(); 
     191      core[i].interleaved = isInterleaved(); 
     192      core[i].indexed = isIndexed(); 
     193      core[i].littleEndian = isLittleEndian(); 
     194    } 
     195 
     196    int totalPlanes = getSeriesCount() * getImageCount(); 
     197 
    145198    // verify factor count 
    146199    int nsize = n.size(); 
    147200    int fsize = f.size(); 
    148     if (debug && (nsize != fsize || nsize != getImageCount())) { 
     201    if (debug && (nsize != fsize || nsize != totalPlanes)) { 
    149202      LogTools.println("Warning: mismatch between image count, " + 
    150         "names and factors (count=" + getImageCount() + 
     203        "names and factors (count=" + totalPlanes + 
    151204        ", names=" + nsize + ", factors=" + fsize + ")"); 
    152205    } 
     
    155208 
    156209    // parse factor values 
    157     factors = new double[getImageCount()]; 
     210    factors = new double[totalPlanes]; 
    158211    int max = 0; 
    159212    for (int i=0; i<fsize; i++) { 
     
    176229    if (factors[max] > 256) core[0].pixelType = FormatTools.UINT32; 
    177230    else if (factors[max] > 1) core[0].pixelType = FormatTools.UINT16; 
     231    for (int i=1; i<core.length; i++) { 
     232      core[i].pixelType = getPixelType(); 
     233    } 
     234 
     235    MetadataTools.populatePixels(store, this); 
    178236  } 
    179237 
     
    259317        addMeta("Image " + (nextImage - 1) + " " + currentQName, value); 
    260318 
    261         if (currentQName.equals("DateTime")) { 
    262           store.setImageCreationDate(value, nextImage - 1); 
     319        if (currentQName.equals("DateTime") && nextImage == 1) { 
     320          store.setImageCreationDate(value, 0); 
    263321        } 
    264322        else if (currentQName.equals("CameraBinningX")) { 
     
    267325        else if (currentQName.equals("CameraBinningY")) { 
    268326          binY = Integer.parseInt(value); 
     327        } 
     328        else if (currentQName.equals("LightSourceCombinationRef")) { 
     329          if (!channelNames.contains(value)) channelNames.add(value); 
    269330        } 
    270331      } 
     
    286347      if (qName.equals("Array")) { 
    287348        int len = attributes.getLength(); 
    288         for (int i=0; i<len; i++) { 
     349        for (int i=0; i<len; i++, nextArrayImage++) { 
    289350          String name = attributes.getQName(i); 
    290           if (name.equals("Name")) { 
     351          if (name.equals("Name") && nextArrayImage == 0) { 
    291352            names.add(attributes.getValue(i)); 
    292             store.setImageName(attributes.getValue(i), nextArrayImage); 
     353            store.setImageName(attributes.getValue(i), 0); 
    293354          } 
    294355          else if (name.equals("Factor")) factors.add(attributes.getValue(i)); 
    295           else if (name.equals("Description")) { 
    296             store.setImageDescription(attributes.getValue(i), nextArrayImage++); 
     356          else if (name.equals("Description") && nextArrayImage == 0) { 
     357            store.setImageDescription(attributes.getValue(i), 0); 
    297358          } 
    298359        } 
     
    363424        } 
    364425        nextField++; 
     426        int fieldNo = Integer.parseInt(attributes.getValue("No")); 
     427        if (fieldNo > fieldCount) fieldCount++; 
    365428      } 
    366429      else if (qName.equals("Stack")) { 
     
    379442        } 
    380443        nextPlane++; 
     444        int planeNo = Integer.parseInt(attributes.getValue("No")); 
     445        if (planeNo > getSizeZ()) core[0].sizeZ++; 
    381446      } 
    382447      else if (qName.equals("Kinetic")) { 
     
    435500        } 
    436501 
    437         // link Instrument and Image 
    438         store.setImageInstrumentRef("Instrument:0", nextImage); 
    439  
    440502        nextImage++; 
    441          
    442         //Implemented for FLEX v1.7 and bellow 
     503 
     504        //Implemented for FLEX v1.7 and below 
    443505        String x = attributes.getValue("CameraBinningX"); 
    444506        String y = attributes.getValue("CameraBinningY"); 
     
    450512      { 
    451513        parentQName = qName; 
    452         if (qName.equals("Plate")) nextPlate++; 
    453         else if (qName.equals("Well")) nextWell++; 
     514        if (qName.equals("Plate")) { 
     515          nextPlate++; 
     516          plateCount++; 
     517        } 
     518        else if (qName.equals("Well")) { 
     519          nextWell++; 
     520          wellCount++; 
     521        } 
    454522      } 
    455523      else if (qName.equals("WellCoordinate")) { 
     
    457525        addMeta("Well" + ndx + " Row", attributes.getValue("Row")); 
    458526        addMeta("Well" + ndx + " Col", attributes.getValue("Col")); 
    459         store.setWellRow(new Integer(attributes.getValue("Row")), 0,ndx); 
     527        store.setWellRow(new Integer(attributes.getValue("Row")), 0, ndx); 
    460528        store.setWellColumn(new Integer(attributes.getValue("Col")), 0, ndx); 
    461529      } 
     
    468536        for (int i=0; i<attributes.getLength(); i++) { 
    469537          //addMeta("Image " + nextImage + " " + attributes.getQName(i), attributes.getValue(i)); 
    470         }         
     538        } 
    471539      } 
    472540      else if(qName.equals("ImageResolutionY")) { 
     
    475543        for (int i=0; i<attributes.getLength(); i++) { 
    476544          //addMeta("Image " + nextImage + " " + attributes.getQName(i),attributes.getValue(i)); 
    477         }         
     545        } 
    478546      } 
    479547    } 
Note: See TracChangeset for help on using the changeset viewer.