Changeset 4179


Ignore:
Timestamp:
07/09/08 15:51:17 (12 years ago)
Author:
melissa
Message:

Added logic to reorder channels based on metadata values.

File:
1 edited

Legend:

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

    r4167 r4179  
    8282  private short[][][] lut; 
    8383  private int lastChannel; 
     84  private int[] channelIndexes; 
    8485 
    8586  // -- Constructor -- 
     
    142143    FormatTools.checkPlaneNumber(this, no); 
    143144 
    144     lastChannel = getZCTCoords(no)[1]; 
    145  
    146     String file = (String) (series == 0 ? tiffs.get(no) : previewNames.get(no)); 
     145    int[] coords = getZCTCoords(no); 
     146    coords[1] = channelIndexes[coords[1]]; 
     147    lastChannel = coords[1]; 
     148 
     149    int planeNum = FormatTools.getIndex(getDimensionOrder(), getSizeZ(), 
     150      getEffectiveSizeC(), getSizeT(), getImageCount(), coords[0], 
     151      coords[1], coords[2]); 
     152 
     153    String file = 
     154      (String) (series == 0 ? tiffs.get(planeNum) : previewNames.get(planeNum)); 
    147155    RandomAccessStream plane = getFile(file); 
    148156    Hashtable[] ifds = TiffTools.getIFDs(plane); 
     
    343351    previewNames = new Vector(); 
    344352 
     353    Vector channels = new Vector(); 
    345354    Vector lutNames = new Vector(); 
    346355    Hashtable filenames = new Hashtable(); 
     
    455464          else if (key.equals("CountingPMTVoltage")) voltages.add(value); 
    456465          else if (key.equals("CountingPMTOffset")) offsets.add(value); 
     466          else if (key.equals("SequentialNumber")) channels.add(value); 
    457467        } 
    458468      } 
     
    462472        } 
    463473        prefix = line + " - "; 
     474      } 
     475    } 
     476 
     477    channelIndexes = new int[channels.size()]; 
     478    for (int i=0; i<channelIndexes.length; i++) { 
     479      channelIndexes[i] = Integer.parseInt((String) channels.get(i)); 
     480    } 
     481 
     482    // check that no two indexes are equal 
     483    boolean valid = true; 
     484    for (int i=0; i<channelIndexes.length; i++) { 
     485      for (int q=0; q<channelIndexes.length; q++) { 
     486        if (i != q && channelIndexes[i] == channelIndexes[q]) { 
     487          valid = false; 
     488          break; 
     489        } 
     490      } 
     491    } 
     492 
     493    // normalize channel indexes to [0, sizeC-1] 
     494 
     495    if (valid) { 
     496      int nextIndex = 0; 
     497      for (int i=0; i<channelIndexes.length; i++) { 
     498        int min = Integer.MAX_VALUE; 
     499        int minIndex = -1; 
     500        for (int q=0; q<channelIndexes.length; q++) { 
     501          if (channelIndexes[q] < min && channelIndexes[q] >= nextIndex) { 
     502            min = channelIndexes[q]; 
     503            minIndex = q; 
     504          } 
     505        } 
     506        channelIndexes[minIndex] = nextIndex++; 
     507      } 
     508    } 
     509    else { 
     510      for (int i=0; i<channelIndexes.length; i++) { 
     511        channelIndexes[i] = i; 
    464512      } 
    465513    } 
     
    611659        pixel = new Float(pixel.floatValue() / 1000); 
    612660        store.setDimensionsTimeIncrement(pixel, 0, 0); 
    613       }  
     661      } 
    614662      else if (ss > 0) { 
    615663        if (core.sizeC[0] == 0) core.sizeC[0] = ss; 
     
    686734    } 
    687735 
    688     core.rgb[0] = false; 
    689     core.littleEndian[0] = true; 
    690     core.interleaved[0] = false; 
    691     core.metadataComplete[0] = true; 
    692     core.indexed[0] = false; 
    693     core.falseColor[0] = false; 
     736    Arrays.fill(core.rgb, false); 
     737    Arrays.fill(core.littleEndian, true); 
     738    Arrays.fill(core.interleaved, false); 
     739    Arrays.fill(core.metadataComplete, true); 
     740    Arrays.fill(core.indexed, false); 
     741    Arrays.fill(core.falseColor, false); 
    694742 
    695743    // populate MetadataStore 
Note: See TracChangeset for help on using the changeset viewer.