Changeset 3361


Ignore:
Timestamp:
11/12/07 08:49:03 (12 years ago)
Author:
melissa
Message:

Read each resolution level into its own series.

File:
1 edited

Legend:

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

    r3332 r3361  
    7777  private float pixelSizeX, pixelSizeY, pixelSizeZ; 
    7878  private float minX, minY, minZ, maxX, maxY, maxZ; 
     79  private int seriesCount; 
    7980 
    8081  // -- Constructor -- 
     
    106107        r.exec("g = ncfile.getRootGroup()"); 
    107108        findGroup("DataSet", "g", "g"); 
    108         findGroup("ResolutionLevel_0", "g", "g"); 
     109        findGroup("ResolutionLevel_" + series, "g", "g"); 
    109110        findGroup("TimePoint_" + zct[2], "g", "g"); 
    110111        findGroup("Channel_" + zct[1], "g", "g"); 
     
    122123    previousImageNumber = no; 
    123124 
    124     for (int y=0; y<core.sizeY[0]; y++) { 
    125       System.arraycopy(previousImage[zct[0]][y], 0, buf, y*core.sizeX[0], 
    126         core.sizeX[0]); 
     125    for (int y=0; y<core.sizeY[series]; y++) { 
     126      System.arraycopy(previousImage[zct[0]][y], 0, buf, y*core.sizeX[series], 
     127        core.sizeX[series]); 
    127128    } 
    128129 
     
    144145    previousImageNumber = -1; 
    145146    previousImage = null; 
     147    seriesCount = 0; 
    146148  } 
    147149 
     
    156158    pixelSizeX = pixelSizeY = pixelSizeZ = 1.0f; 
    157159 
     160    seriesCount = 0; 
     161 
    158162    previousImageNumber = -1; 
    159163    MetadataStore store = getMetadataStore(); 
    160     store.setImage(currentId, null, null, null); 
    161164 
    162165    try { 
     
    181184      l.add(r.getVar("dataSetInfo")); 
    182185      parseGroups(l); 
     186      l.clear(); 
     187      l.add(r.getVar("dataSet")); 
     188      parseGroups(l); 
    183189    } 
    184190    catch (ReflectException exc) { 
     
    186192    } 
    187193 
    188     core.currentOrder[0] = "XYZCT"; 
    189     core.rgb[0] = false; 
    190     core.thumbSizeX[0] = 128; 
    191     core.thumbSizeY[0] = 128; 
    192     core.pixelType[0] = FormatTools.UINT8; 
    193     core.imageCount[0] = core.sizeZ[0] * core.sizeC[0] * core.sizeT[0]; 
    194     core.orderCertain[0] = true; 
    195     core.littleEndian[0] = true; 
    196     core.interleaved[0] = false; 
    197     core.indexed[0] = false; 
    198  
    199     if (pixelSizeX == 1) pixelSizeX = (maxX - minX) / core.sizeX[0]; 
    200     if (pixelSizeY == 1) pixelSizeY = (maxY - minY) / core.sizeY[0]; 
    201     if (pixelSizeZ == 1) pixelSizeZ = (maxZ - minZ) / core.sizeZ[0]; 
     194    if (seriesCount > 1) { 
     195      int x = core.sizeX[0]; 
     196      int y = core.sizeY[0]; 
     197      int z = core.sizeZ[0]; 
     198      int c = core.sizeC[0]; 
     199      int t = core.sizeT[0]; 
     200      core = new CoreMetadata(seriesCount); 
     201      Arrays.fill(core.sizeX, x); 
     202      Arrays.fill(core.sizeY, y); 
     203      Arrays.fill(core.sizeZ, z); 
     204      Arrays.fill(core.sizeC, c); 
     205      Arrays.fill(core.sizeT, t); 
     206 
     207      for (int i=1; i<seriesCount; i++) { 
     208        findGroup("ResolutionLevel_" + i, "dataSet", "g"); 
     209        findGroup("TimePoint_0", "g", "g"); 
     210        findGroup("Channel_0", "g", "g"); 
     211        core.sizeX[i] = Integer.parseInt(getValue("g", "ImageSizeX")); 
     212        core.sizeY[i] = Integer.parseInt(getValue("g", "ImageSizeY")); 
     213      } 
     214    } 
     215 
     216    Arrays.fill(core.currentOrder, "XYZCT"); 
     217    Arrays.fill(core.rgb, false); 
     218    Arrays.fill(core.thumbSizeX, 128); 
     219    Arrays.fill(core.thumbSizeY, 128); 
     220    Arrays.fill(core.pixelType, FormatTools.UINT8); 
     221    Arrays.fill(core.imageCount, core.sizeZ[0] * core.sizeC[0] * core.sizeT[0]); 
     222    Arrays.fill(core.orderCertain, true); 
     223    Arrays.fill(core.littleEndian, true); 
     224    Arrays.fill(core.interleaved, false); 
     225    Arrays.fill(core.indexed, false); 
    202226 
    203227    FormatTools.populatePixels(store, this); 
    204     store.setDimensions(new Float(pixelSizeX), new Float(pixelSizeY), 
    205       new Float(pixelSizeZ), null, null, null); 
    206  
    207     for (int i=0; i<core.sizeC[0]; i++) { 
    208       String[] params = (String[]) channelParameters.get(i); 
    209  
    210       Float gainValue = null; 
    211       try { gainValue = new Float(params[0]); } 
    212       catch (NumberFormatException e) { } 
    213       catch (NullPointerException e) { } 
    214       Integer pinholeValue = null, emWaveValue = null, exWaveValue = null; 
    215       try { pinholeValue = new Integer(params[5]); } 
    216       catch (NumberFormatException e) { } 
    217       catch (NullPointerException e) { } 
    218       try { 
    219         if (params[1].indexOf("-") != -1) { 
    220           params[1] = params[1].substring(params[1].indexOf("-") + 1); 
     228    for (int i=0; i<seriesCount; i++) { 
     229      float px = pixelSizeX, py = pixelSizeY, pz = pixelSizeZ; 
     230      if (px == 1) px = (maxX - minX) / core.sizeX[i]; 
     231      if (py == 1) py = (maxY - minY) / core.sizeY[i]; 
     232      if (pz == 1) pz = (maxZ - minZ) / core.sizeZ[i]; 
     233      store.setDimensions(new Float(px), new Float(py), new Float(pz), 
     234        null, null, new Integer(i)); 
     235    } 
     236 
     237    for (int s=0; s<seriesCount; s++) { 
     238      store.setImage("Resolution Level " + s, null, null, new Integer(s)); 
     239      for (int i=0; i<core.sizeC[s]; i++) { 
     240        String[] params = (String[]) channelParameters.get(i); 
     241 
     242        Float gainValue = null; 
     243        try { gainValue = new Float(params[0]); } 
     244        catch (NumberFormatException e) { } 
     245        catch (NullPointerException e) { } 
     246        Integer pinholeValue = null, emWaveValue = null, exWaveValue = null; 
     247        try { pinholeValue = new Integer(params[5]); } 
     248        catch (NumberFormatException e) { } 
     249        catch (NullPointerException e) { } 
     250        try { 
     251          if (params[1].indexOf("-") != -1) { 
     252            params[1] = params[1].substring(params[1].indexOf("-") + 1); 
     253          } 
     254          emWaveValue = new Integer(params[1]); 
    221255        } 
    222         emWaveValue = new Integer(params[1]); 
    223       } 
    224       catch (NumberFormatException e) { } 
    225       catch (NullPointerException e) { } 
    226       try { 
    227         if (params[2].indexOf("-") != -1) { 
    228           params[2] = params[2].substring(params[2].indexOf("-") + 1); 
     256        catch (NumberFormatException e) { } 
     257        catch (NullPointerException e) { } 
     258        try { 
     259          if (params[2].indexOf("-") != -1) { 
     260            params[2] = params[2].substring(params[2].indexOf("-") + 1); 
     261          } 
     262          exWaveValue = new Integer(params[2]); 
    229263        } 
    230         exWaveValue = new Integer(params[2]); 
    231       } 
    232       catch (NumberFormatException e) { } 
    233       catch (NullPointerException e) { } 
    234  
    235       store.setLogicalChannel(i, params[6], null, 
    236         null, null, null, null, null, null, null, gainValue, null, 
    237         pinholeValue, null, params[7], null, null, null, null, 
    238         null, emWaveValue, exWaveValue, null, null, null); 
    239  
    240       Double minValue = null, maxValue = null; 
    241       try { minValue = new Double(params[4]); } 
    242       catch (NumberFormatException exc) { } 
    243       catch (NullPointerException exc) { } 
    244       try { maxValue = new Double(params[3]); } 
    245       catch (NumberFormatException exc) { } 
    246       catch (NullPointerException exc) { } 
    247  
    248       if (minValue != null && maxValue != null && maxValue.doubleValue() > 0) { 
    249         store.setChannelGlobalMinMax(i, minValue, maxValue, null); 
     264        catch (NumberFormatException e) { } 
     265        catch (NullPointerException e) { } 
     266 
     267        store.setLogicalChannel(i, params[6], null, 
     268          null, null, null, null, null, null, null, gainValue, null, 
     269          pinholeValue, null, params[7], null, null, null, null, 
     270          null, emWaveValue, exWaveValue, null, null, new Integer(s)); 
     271 
     272        Double minValue = null, maxValue = null; 
     273        try { minValue = new Double(params[4]); } 
     274        catch (NumberFormatException exc) { } 
     275        catch (NullPointerException exc) { } 
     276        try { maxValue = new Double(params[3]); } 
     277        catch (NumberFormatException exc) { } 
     278        catch (NullPointerException exc) { } 
     279 
     280        if (minValue != null && maxValue != null && maxValue.doubleValue() > 0) 
     281        { 
     282          store.setChannelGlobalMinMax(i, minValue, maxValue, new Integer(s)); 
     283        } 
    250284      } 
    251285    } 
     
    325359      String groupName = (String) r.getVar("groupName"); 
    326360      if (debug) LogTools.println("Parsing group: " + groupName); 
     361 
     362      if (groupName.startsWith("/DataSet/ResolutionLevel_")) { 
     363        int slash = groupName.indexOf("/", 25); 
     364        int n = Integer.parseInt(groupName.substring(25, 
     365          slash == -1 ? groupName.length() : slash)); 
     366        if (n == seriesCount) seriesCount++; 
     367      } 
     368 
    327369      r.exec("attributes = group.getAttributes()"); 
    328370      List l = (List) r.getVar("attributes"); 
     
    350392 
    351393      if (groupName.indexOf("/Channel_") != -1) { 
    352         for (int j=0; j<6; j++) { 
    353           if (params[j] != null) { 
    354             if (params[j].indexOf(" ") != -1) { 
    355               params[j] = params[j].substring(params[j].indexOf(" ") + 1); 
    356             } 
    357             if (params[j].indexOf("-") != -1) { 
    358               params[j] = params[j].substring(params[j].indexOf("-") + 1); 
    359             } 
    360             if (params[j].indexOf(".") != -1) { 
    361               params[j] = params[j].substring(0, params[j].indexOf(".")); 
     394        int ndx = groupName.indexOf("/Channel_") + 9; 
     395        int end = groupName.indexOf("/", ndx); 
     396        if (end == -1) end = groupName.length(); 
     397        int n = Integer.parseInt(groupName.substring(ndx, end)); 
     398        if (n == core.sizeC[0]) { 
     399          for (int j=0; j<6; j++) { 
     400            if (params[j] != null) { 
     401              if (params[j].indexOf(" ") != -1) { 
     402                params[j] = params[j].substring(params[j].indexOf(" ") + 1); 
     403              } 
     404              if (params[j].indexOf("-") != -1) { 
     405                params[j] = params[j].substring(params[j].indexOf("-") + 1); 
     406              } 
     407              if (params[j].indexOf(".") != -1) { 
     408                params[j] = params[j].substring(0, params[j].indexOf(".")); 
     409              } 
    362410            } 
    363411          } 
     412 
     413          channelParameters.add(params); 
     414          core.sizeC[0]++; 
    364415        } 
    365  
    366         channelParameters.add(params); 
    367         core.sizeC[0]++; 
    368416      } 
    369417 
Note: See TracChangeset for help on using the changeset viewer.