Changeset 3443


Ignore:
Timestamp:
12/04/07 12:27:55 (12 years ago)
Author:
melissa
Message:
  • Fully parse SDT file info and setup blocks.
  • Significantly improved SDT plane access time.
  • Removed debugging statements.
Location:
trunk/loci/formats/in
Files:
3 edited

Legend:

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

    r3015 r3443  
    2727import java.io.IOException; 
    2828import java.util.Hashtable; 
     29import java.util.StringTokenizer; 
    2930import loci.formats.RandomAccessStream; 
    3031 
     
    470471    info = new String(infoBytes); 
    471472 
    472     // save file info to metadata table 
    473     if (meta != null) meta.put("File Info", info); 
    474     // TODO: parse individual parameters from info string and store them 
     473    StringTokenizer st = new StringTokenizer(info, "\n"); 
     474    int count = st.countTokens(); 
     475    st.nextToken(); 
     476    String key = null, value = null; 
     477    for (int i=1; i<count-1; i++) { 
     478      String token = st.nextToken().trim(); 
     479      if (token.indexOf(":") == -1) continue; 
     480      key = token.substring(0, token.indexOf(":")).trim(); 
     481      value = token.substring(token.indexOf(":") + 1).trim(); 
     482      meta.put(key, value); 
     483    } 
    475484 
    476485    // read setup 
     
    480489    setup = new String(setupBytes); 
    481490 
    482     // save setup to metadata table 
    483     if (meta != null) meta.put("Setup", setup); 
    484     // TODO: parse individual parameters from setup string and store them 
    485  
    486     // extract dimensional parameters from setup string 
    487     int xIndex = setup.indexOf(X_STRING); 
    488     if (xIndex > 0) { 
    489       int ndx = xIndex + X_STRING.length(); 
    490       int end = setup.indexOf("]", ndx); 
    491       width = Integer.parseInt(setup.substring(ndx, end)); 
    492     } 
    493     int yIndex = setup.indexOf(Y_STRING); 
    494     if (yIndex > 0) { 
    495       int ndx = yIndex + Y_STRING.length(); 
    496       int end = setup.indexOf("]", ndx); 
    497       height = Integer.parseInt(setup.substring(ndx, end)); 
    498     } 
    499     int tIndex = setup.indexOf(T_STRING); 
    500     if (tIndex > 0) { 
    501       int ndx = tIndex + T_STRING.length(); 
    502       int end = setup.indexOf("]", ndx); 
    503       timeBins = Integer.parseInt(setup.substring(ndx, end)); 
    504     } 
    505     int cIndex = setup.indexOf(C_STRING); 
    506     if (cIndex > 0) { 
    507       int ndx = cIndex + C_STRING.length(); 
    508       int end = setup.indexOf("]", ndx); 
    509       channels = Integer.parseInt(setup.substring(ndx, end)); 
     491    st = new StringTokenizer(setup, "\n"); 
     492    while (st.hasMoreTokens()) { 
     493      String token = st.nextToken().trim(); 
     494 
     495      if (token.startsWith("#SP") || token.startsWith("#DI") || 
     496        token.startsWith("#PR") || token.startsWith("#MP")) 
     497      { 
     498        int open = token.indexOf("["); 
     499        key = token.substring(open + 1, token.indexOf(",", open)); 
     500        value = token.substring(token.lastIndexOf(",") + 1, token.length() - 1); 
     501      } 
     502      else if (token.startsWith("#TR") || token.startsWith("#WI")) { 
     503        key = token.substring(0, token.indexOf("[")).trim(); 
     504        value = token.substring(token.indexOf("[") + 1, token.indexOf("]")); 
     505      } 
     506 
     507      if (key != null && value != null) meta.put(key, value); 
     508 
     509      if (token.indexOf(X_STRING) != -1) { 
     510        int ndx = token.indexOf(X_STRING) + X_STRING.length(); 
     511        int end = token.indexOf("]", ndx); 
     512        width = Integer.parseInt(token.substring(ndx, end)); 
     513      } 
     514      else if (token.indexOf(Y_STRING) != -1) { 
     515        int ndx = token.indexOf(Y_STRING) + Y_STRING.length(); 
     516        int end = token.indexOf("]", ndx); 
     517        height = Integer.parseInt(token.substring(ndx, end)); 
     518      } 
     519      else if (token.indexOf(T_STRING) != -1) { 
     520        int ndx = token.indexOf(T_STRING) + T_STRING.length(); 
     521        int end = token.indexOf("]", ndx); 
     522        timeBins = Integer.parseInt(token.substring(ndx, end)); 
     523      } 
     524      else if (token.indexOf(C_STRING) != -1) { 
     525        int ndx = token.indexOf(C_STRING) + C_STRING.length(); 
     526        int end = token.indexOf("]", ndx); 
     527        channels = Integer.parseInt(token.substring(ndx, end)); 
     528      } 
    510529    } 
    511530 
  • trunk/loci/formats/in/SDTReader.java

    r3418 r3443  
    144144      in.seek(off + 2 * core.sizeX[series] * core.sizeY[series] * 
    145145        timeBins * no); 
    146       byte[] timeBin = new byte[timeBins * 2]; 
     146      byte[] b = 
     147        new byte[timeBins * 2 * core.sizeX[series] * core.sizeY[series]]; 
     148      in.read(b); 
     149      int offset = 0; 
    147150      for (int y=0; y<core.sizeY[series]; y++) { 
    148151        for (int x=0; x<core.sizeX[series]; x++) { 
     
    151154          // combine lifetime bins into intensity value 
    152155          short sum = 0; 
    153           in.read(timeBin); 
    154156          for (int t=0; t<timeBins; t++) { 
    155             sum += DataTools.bytesToShort(timeBin, t*2, true); 
     157            sum += DataTools.bytesToShort(b, offset, true); 
     158            offset += 2; 
    156159          } 
    157160          int ndx = 2 * (core.sizeX[0] * y + x); 
  • trunk/loci/formats/in/TCSReader.java

    r3441 r3443  
    514514        } 
    515515 
    516         /* debug */ System.out.println(fullSeries); 
    517516        if (fullSeries.indexOf("Sequential Setting ") == -1) { 
    518517          if (fullSeries.equals("")) fullSeries = "Master sequential setting"; 
Note: See TracChangeset for help on using the changeset viewer.