Changeset 2376


Ignore:
Timestamp:
03/02/07 11:09:52 (13 years ago)
Author:
melissa
Message:

More thorough metadata parsing.

File:
1 edited

Legend:

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

    r2366 r2376  
    4040 
    4141public class ICSReader extends FormatReader { 
     42 
     43  // -- Constants -- 
     44 
     45  /** Metadata field categories. */ 
     46  private String[] CATEGORIES = new String[] { 
     47    "ics_version", "filename", "source", "layout", "representation",  
     48    "parameter", "sensor", "history", "end" 
     49  }; 
     50 
     51  /** Metadata field subcategories. */ 
     52  private String[] SUB_CATEGORIES = new String[] { 
     53    "file", "offset", "parameters", "order", "sizes", "coordinates", 
     54    "significant_bits", "format", "sign", "compression", "byte_order", 
     55    "origin", "scale", "units", "labels", "SCIL_TYPE", "type", "model", 
     56    "s_params" 
     57  }; 
     58 
     59  /** Metadata field sub-subcategories. */ 
     60  private String[] SUB_SUB_CATEGORIES = new String[] { 
     61    "Channels", "PinholeRadius", "LambdaEx", "LambdaEm", "ExPhotonCnt", 
     62    "RefInxMedium", "NumAperture", "RefInxLensMedium", "PinholeSpacing" 
     63  }; 
    4264 
    4365  // -- Fields -- 
     
    206228  /* @see IFormatReader#getUsedFiles(String) */ 
    207229  public String[] getUsedFiles(String id) throws FormatException, IOException { 
    208     if (!id.equals(currentId)) initFile(id); 
    209     if (versionTwo) return new String[] {currentIdsId}; 
     230    if (!id.equals(currentIdsId) && !id.equals(currentIcsId)) initFile(id); 
     231    if (versionTwo) { 
     232      return new String[] {currentIdsId == null ? id : currentIdsId}; 
     233    } 
    210234    return new String[] {currentIdsId, currentIcsId}; 
    211235  } 
     
    245269      char[] c = icsId.toCharArray(); 
    246270      c[c.length - 2]--; 
    247       /*id = */icsId = new String(c); 
     271      icsId = new String(c); 
    248272    } 
    249273 
     
    285309    while (line != null && !line.trim().equals("end")) { 
    286310      t = new StringTokenizer(line); 
    287       while(t.hasMoreTokens()) { 
     311      StringBuffer key = new StringBuffer(); 
     312      while (t.hasMoreTokens()) { 
    288313        token = t.nextToken(); 
    289         if (!token.equals("layout") && !token.equals("representation") && 
    290           !token.equals("parameter") && !token.equals("history") && 
    291           !token.equals("sensor")) 
    292         { 
    293           if (t.countTokens() < 3) { 
    294             try { 
    295               addMeta(token, t.nextToken()); 
    296             } 
    297             catch (NoSuchElementException e) { } 
     314        boolean foundValue = true; 
     315        for (int i=0; i<CATEGORIES.length; i++) { 
     316          if (token.equals(CATEGORIES[i])) foundValue = false; 
     317        } 
     318        for (int i=0; i<SUB_CATEGORIES.length; i++) { 
     319          if (token.equals(SUB_CATEGORIES[i])) foundValue = false; 
     320        } 
     321        for (int i=0; i<SUB_SUB_CATEGORIES.length; i++) { 
     322          if (token.equals(SUB_SUB_CATEGORIES[i])) foundValue = false; 
     323        } 
     324       
     325        if (foundValue) { 
     326          StringBuffer value = new StringBuffer(); 
     327          value.append(token); 
     328          while (t.hasMoreTokens()) { 
     329            value.append(" "); 
     330            value.append(t.nextToken()); 
    298331          } 
    299           else { 
    300             String meta = t.nextToken(); 
    301             while (t.hasMoreTokens()) { 
    302               meta = meta + " " + t.nextToken(); 
    303             } 
    304             addMeta(token, meta); 
    305           } 
    306         } 
    307       } 
    308       try { 
    309         line = st.nextToken(); 
    310       } 
    311       catch (NoSuchElementException e) { line = null; } 
    312     } 
    313  
    314     String images = (String) getMeta("sizes"); 
    315     String ord = (String) getMeta("order"); 
     332          addMeta(key.toString().trim(), value.toString().trim()); 
     333        } 
     334        else { 
     335          key.append(token); 
     336          key.append(" "); 
     337        } 
     338      } 
     339      if (st.hasMoreTokens()) line = st.nextToken();  
     340      else line = null; 
     341    } 
     342 
     343    String images = (String) getMeta("layout sizes"); 
     344    String ord = (String) getMeta("layout order"); 
    316345    ord = ord.trim(); 
    317346    // bpp, width, height, z, channels 
     
    357386    if (numImages == 0) numImages++; 
    358387 
    359     String endian = (String) getMeta("byte_order"); 
     388    String endian = (String) getMeta("representation byte_order"); 
    360389    littleEndian = true; 
    361390 
     
    364393      String firstByte = endianness.nextToken(); 
    365394      int first = Integer.parseInt(firstByte); 
    366       littleEndian = ((String) getMeta("format")).equals("real") ?  
     395      littleEndian =  
     396        ((String) getMeta("representation format")).equals("real") ?  
    367397        first == 1 : first != 1; 
    368398    } 
    369399 
    370     String test = (String) getMeta("compression"); 
     400    String test = (String) getMeta("representation compression"); 
    371401    boolean gzip = (test == null) ? false : test.equals("gzip"); 
    372402 
     
    410440    // populate Pixels element 
    411441 
    412     String o = (String) getMeta("order"); 
     442    String o = (String) getMeta("layout order"); 
    413443    o = o.trim(); 
    414444    o = o.substring(o.indexOf("x")).trim(); 
     
    425455 
    426456    int bitsPerPixel = 
    427       Integer.parseInt((String) getMeta("significant_bits")); 
    428     String fmt = (String) getMeta("format"); 
    429     String sign = (String) getMeta("sign"); 
     457      Integer.parseInt((String) getMeta("layout significant_bits")); 
     458    String fmt = (String) getMeta("representation format"); 
     459    String sign = (String) getMeta("representation sign"); 
    430460 
    431461    if (bitsPerPixel < 32) littleEndian = !littleEndian; 
     
    473503      null); // Use pixels index 0 
    474504 
     505    String pixelSizes = (String) getMeta("parameter scale"); 
     506    o = (String) getMeta("layout order"); 
     507    if (pixelSizes != null) { 
     508      StringTokenizer pixelSizeTokens = new StringTokenizer(pixelSizes); 
     509      StringTokenizer axisTokens = new StringTokenizer(o); 
     510     
     511      Float pixX = null, pixY = null, pixZ = null, pixC = null, pixT = null;  
     512     
     513      while (pixelSizeTokens.hasMoreTokens()) { 
     514        String axis = axisTokens.nextToken().trim().toLowerCase(); 
     515        String size = pixelSizeTokens.nextToken().trim(); 
     516        if (axis.equals("x")) pixX = new Float(size);  
     517        else if (axis.equals("y")) pixY = new Float(size);  
     518        else if (axis.equals("ch")) pixC = new Float(size);  
     519        else if (axis.equals("z")) pixZ = new Float(size);  
     520        else if (axis.equals("t")) pixT = new Float(size);  
     521      } 
     522      store.setDimensions(pixX, pixY, pixZ, pixC, pixT, null); 
     523    } 
     524 
     525    String em = (String) getMeta("sensor s_params LambdaEm"); 
     526    String ex = (String) getMeta("sensor s_params LambdaEx"); 
     527    int[] emWave = new int[sizeC[0]];  
     528    int[] exWave = new int[sizeC[0]];  
     529    if (em != null) { 
     530      StringTokenizer emTokens = new StringTokenizer(em); 
     531      for (int i=0; i<sizeC[0]; i++) { 
     532        emWave[i] = (int) Float.parseFloat(emTokens.nextToken().trim()); 
     533      } 
     534    } 
     535    if (ex != null) { 
     536      StringTokenizer exTokens = new StringTokenizer(ex); 
     537      for (int i=0; i<sizeC[0]; i++) { 
     538        exWave[i] = (int) Float.parseFloat(exTokens.nextToken().trim()); 
     539      } 
     540    } 
     541 
    475542    for (int i=0; i<sizeC[0]; i++) { 
    476       store.setLogicalChannel(i, null, null, null, null, null, null, null); 
     543      store.setLogicalChannel(i, null, null, new Integer(emWave[i]),  
     544        new Integer(exWave[i]), null, null, null); 
    477545    } 
    478546  } 
Note: See TracChangeset for help on using the changeset viewer.