Changeset 3338


Ignore:
Timestamp:
11/02/07 14:13:22 (12 years ago)
Author:
melissa
Message:

Find and group PIC files if lse.xml companion file is present.

File:
1 edited

Legend:

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

    r3335 r3338  
    2626 
    2727import java.io.IOException; 
    28 import java.util.StringTokenizer; 
    29 import java.util.Vector; 
     28import java.util.*; 
    3029import loci.formats.*; 
    3130 
     
    7170  private Vector used; 
    7271 
     72  private String[] picFiles; 
     73 
    7374  // -- Constructor -- 
    7475 
     
    9899    FormatTools.checkBufferSize(this, buf.length); 
    99100 
    100     long offset = no * core.sizeX[0] * core.sizeY[0] * (byteFormat ? 1 : 2); 
    101     in.seek(offset + 76); 
    102     in.read(buf); 
     101    if (picFiles != null) { 
     102      int file = no % picFiles.length; 
     103      RandomAccessStream ras = new RandomAccessStream(picFiles[file]); 
     104      long offset = (no / picFiles.length) * 
     105        core.sizeX[0] * core.sizeY[0] * (byteFormat ? 1 : 2); 
     106      ras.seek(offset + 76); 
     107      ras.read(buf); 
     108      ras.close(); 
     109    } 
     110    else { 
     111      in.seek(no * core.sizeX[0] * core.sizeY[0] * (byteFormat ? 1 : 2) + 76); 
     112      in.read(buf); 
     113    } 
    103114    return buf; 
    104115  } 
     
    111122    byteFormat = false; 
    112123    used = null; 
     124    picFiles = null; 
    113125  } 
    114126 
     
    654666        String xml = new String(b); 
    655667 
     668        // parse dataset dimensions 
     669        if (xml.indexOf("<Pixels ") != -1) { 
     670          int start = xml.indexOf("<Pixels"); 
     671          int end = xml.indexOf("/>", start); 
     672          String s = xml.substring(start, end); 
     673 
     674          int zs = s.indexOf("SizeZ=") + 7; 
     675          int z = 
     676            zs == 6 ? 1 : Integer.parseInt(s.substring(zs, s.indexOf("\"", zs))); 
     677          int cs = s.indexOf("SizeC=") + 7; 
     678          int c = 
     679            cs == 6 ? 1 : Integer.parseInt(s.substring(cs, s.indexOf("\"", cs))); 
     680          int ts = s.indexOf("SizeT=") + 7; 
     681          int t = 
     682            ts == 6 ? 1 : Integer.parseInt(s.substring(ts, s.indexOf("\"", ts))); 
     683 
     684          core.sizeZ[0] = z; 
     685          core.sizeC[0] = c; 
     686          core.sizeT[0] = t; 
     687 
     688          int numFiles = (z * c * t) / core.imageCount[0]; 
     689 
     690          picFiles = new String[numFiles]; 
     691          int ndx = 0; 
     692          used.remove(currentId); 
     693          for (int j=0; j<list.length; j++) { 
     694            if (list[j].toLowerCase().endsWith(".pic")) { 
     695              if (ndx == picFiles.length) { 
     696                core.sizeC[0]++; 
     697                c++; 
     698                String[] tmp = picFiles; 
     699                picFiles = new String[ndx * core.sizeC[0]]; 
     700                System.arraycopy(tmp, 0, picFiles, 0, tmp.length); 
     701              } 
     702              picFiles[ndx] = 
     703                new Location(parent.getAbsolutePath(), list[j]).getAbsolutePath(); 
     704              used.add(picFiles[ndx++]); 
     705            } 
     706          } 
     707          Arrays.sort(picFiles); 
     708 
     709          core.imageCount[0] = z * c * t; 
     710        } 
     711 
    656712        if (xml.indexOf("SectionInfo") != -1) { 
    657713          int start = xml.indexOf("<SectionInfo>") + 13; 
     
    698754      FormatTools.UINT16; 
    699755 
    700     core.currentOrder[0] = "XY"; 
    701     int[] dims = new int[] {core.sizeZ[0], core.sizeC[0], core.sizeT[0]}; 
    702     int max = 0; 
    703     int min = Integer.MAX_VALUE; 
    704     int median = 1; 
    705  
    706     for (int i=0; i<dims.length; i++) { 
    707       if (dims[i] < min) min = dims[i]; 
    708       if (dims[i] > max) max = dims[i]; 
    709       else median = dims[i]; 
    710     } 
    711  
    712     int[] orderedDims = new int[] {max, median, min}; 
    713     for (int i=0; i<orderedDims.length; i++) { 
    714       if (orderedDims[i] == core.sizeZ[0] && 
    715         core.currentOrder[0].indexOf("Z") == -1) 
    716       { 
    717         core.currentOrder[0] += "Z"; 
    718       } 
    719       else if (orderedDims[i] == core.sizeC[0] && 
    720         core.currentOrder[0].indexOf("C") == -1) 
    721       { 
    722         core.currentOrder[0] += "C"; 
    723       } 
    724       else core.currentOrder[0] += "T"; 
    725     } 
     756    core.currentOrder[0] = "XYCTZ"; 
    726757 
    727758    FormatTools.populatePixels(store, this); 
Note: See TracChangeset for help on using the changeset viewer.