Changeset 5109


Ignore:
Timestamp:
05/14/09 09:52:25 (11 years ago)
Author:
melissa
Message:

Various fixes for reading Metamorph datasets that contain an .nd file.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/components/bio-formats/src/loci/formats/in/MetamorphReader.java

    r5094 r5109  
    103103 
    104104  private String ndFilename; 
     105  private boolean canLookForND = true; 
    105106 
    106107  // -- Constructor -- 
     
    173174    // the original file is a .nd file, so we need to construct a new reader 
    174175    // for the constituent STK files 
    175     if (stkReader == null) stkReader = new MetamorphReader(); 
     176    if (stkReader == null) { 
     177      stkReader = new MetamorphReader(); 
     178      stkReader.setCanLookForND(false); 
     179    } 
    176180    stkReader.setId(file); 
    177181    int plane = stks[series].length == 1 ? no : coords[0]; 
    178     return stkReader.openBytes(plane, buf, x, y, w, h); 
     182    stkReader.openBytes(plane, buf, x, y, w, h); 
     183    return buf; 
    179184  } 
    180185 
     
    230235 
    231236    if (checkSuffix(id, ND_SUFFIX)) ndfile = new Location(id); 
    232     else { 
     237    else if (canLookForND) { 
    233238      // an STK file was passed to initFile 
    234239      // let's check the parent directory for an .nd file 
     
    257262 
    258263      int zc = getSizeZ(), cc = getSizeC(), tc = getSizeT(); 
     264      int nstages = 0; 
    259265      String z = null, c = null, t = null; 
    260266      Vector hasZ = new Vector(); 
    261267      waveNames = new Vector(); 
     268      boolean useWaveNames = true; 
    262269 
    263270      while (!line.equals("\"EndFile\"")) { 
     
    281288          stepSize = Float.parseFloat(value); 
    282289        } 
     290        else if (key.equals("NStagePositions")) { 
     291          nstages = Integer.parseInt(value); 
     292        } 
     293        else if (key.equals("WaveInFileName")) { 
     294          useWaveNames = Boolean.parseBoolean(value); 
     295        } 
    283296 
    284297        line = ndStream.readLine().trim(); 
     
    292305 
    293306      int numFiles = cc * tc; 
     307      if (nstages > 0) numFiles *= nstages; 
    294308 
    295309      // determine series count 
    296310 
    297       int seriesCount = 1; 
     311      int seriesCount = nstages == 0 ? 1 : nstages; 
     312      boolean differentZs = false; 
    298313      for (int i=0; i<cc; i++) { 
    299314        boolean hasZ1 = ((Boolean) hasZ.get(i)).booleanValue(); 
    300315        boolean hasZ2 = i != 0 && ((Boolean) hasZ.get(i - 1)).booleanValue(); 
    301         if (i > 0 && hasZ1 != hasZ2) seriesCount = 2; 
     316        if (i > 0 && hasZ1 != hasZ2) { 
     317          if (!differentZs) seriesCount *= 2; 
     318          differentZs = true; 
     319        } 
    302320      } 
    303321 
    304322      int channelsInFirstSeries = cc; 
    305       if (seriesCount == 2) { 
     323      if (differentZs) { 
    306324        channelsInFirstSeries = 0; 
    307325        for (int i=0; i<cc; i++) { 
     
    312330      stks = new String[seriesCount][]; 
    313331      if (seriesCount == 1) stks[0] = new String[numFiles]; 
    314       else { 
     332      else if (differentZs) { 
    315333        stks[0] = new String[channelsInFirstSeries * tc]; 
    316334        stks[1] = new String[(cc - channelsInFirstSeries) * tc]; 
     335      } 
     336      else { 
     337        for (int i=0; i<stks.length; i++) { 
     338          stks[i] = new String[numFiles / stks.length]; 
     339        } 
    317340      } 
    318341 
     
    332355      int[] pt = new int[seriesCount]; 
    333356      for (int i=0; i<tc; i++) { 
    334         for (int j=0; j<cc; j++) { 
    335           boolean validZ = ((Boolean) hasZ.get(j)).booleanValue(); 
    336           int seriesNdx = (seriesCount == 1 || validZ) ? 0 : 1; 
    337           stks[seriesNdx][pt[seriesNdx]] = prefix; 
    338           if (waveNames.get(j) != null) { 
    339             stks[seriesNdx][pt[seriesNdx]] += "_w" + (j + 1) + waveNames.get(j); 
     357        int ns = nstages == 0 ? 1 : nstages; 
     358        for (int s=0; s<ns; s++) { 
     359          for (int j=0; j<cc; j++) { 
     360            boolean validZ = ((Boolean) hasZ.get(j)).booleanValue(); 
     361            int seriesNdx = (seriesCount == 1 || validZ) ? 0 : 1; 
     362            stks[seriesNdx][pt[seriesNdx]] = prefix; 
     363            if (waveNames.get(j) != null) { 
     364              stks[seriesNdx][pt[seriesNdx]] += "_w" + (j + 1); 
     365              if (useWaveNames) { 
     366                stks[seriesNdx][pt[seriesNdx]] += waveNames.get(j); 
     367              } 
     368            } 
     369            if (nstages > 0) { 
     370              stks[seriesNdx][pt[seriesNdx]] += "_s" + (s + 1); 
     371            } 
     372            stks[seriesNdx][pt[seriesNdx]] += "_t" + (i + 1) + ".STK"; 
     373            pt[seriesNdx]++; 
    340374          } 
    341           stks[seriesNdx][pt[seriesNdx]] += "_t" + (i + 1) + ".STK"; 
    342           pt[seriesNdx]++; 
    343375        } 
    344376      } 
     
    362394                l = new Location(ndfile.getParent(), stks[s][f]); 
    363395                if (!l.exists()) { 
    364                   String filename = stks[s][f]; 
    365                   stks = null; 
    366                   throw new FormatException("Missing STK file: " + filename); 
     396                  stks[s][f] = stks[s][f].substring(0, 
     397                    stks[s][f].lastIndexOf(".")) + ".tif"; 
     398                  l = new Location(ndfile.getParent(), stks[s][f]); 
     399                  if (!l.exists()) { 
     400                    String filename = stks[s][f]; 
     401                    stks = null; 
     402                    throw new FormatException("Missing STK file: " + filename); 
     403                  } 
    367404                } 
    368405              } 
     
    375412              l = new Location(ndfile.getParent(), stks[s][f]); 
    376413              if (!l.exists()) { 
    377                 String filename = stks[s][f]; 
    378                 stks = null; 
    379                 throw new FormatException("Missing STK file: " + filename); 
     414                stks[s][f] = stks[s][f].substring(0, 
     415                  stks[s][f].lastIndexOf(".")) + ".tif"; 
     416                l = new Location(ndfile.getParent(), stks[s][f]); 
     417                if (!l.exists()) { 
     418                  String filename = stks[s][f]; 
     419                  stks = null; 
     420                  throw new FormatException("Missing STK file: " + filename); 
     421                } 
    380422              } 
    381423            } 
     
    531573    super.initStandardMetadata(); 
    532574 
    533     core[0].sizeZ = 0; 
     575    core[0].sizeZ = 1; 
    534576    core[0].sizeT = 0; 
    535577    int rgbChannels = getSizeC(); 
     
    624666      ifds = tempIFDs; 
    625667    } 
    626     catch (UnknownTagException exc) { trace(exc); } 
    627     catch (NullPointerException exc) { trace(exc); } 
    628     catch (IOException exc) { trace(exc); } 
    629     catch (FormatException exc) { trace(exc); } 
     668    catch (UnknownTagException exc) { if (debug) trace(exc); } 
     669    catch (NullPointerException exc) { if (debug) trace(exc); } 
     670    catch (IOException exc) { if (debug) trace(exc); } 
     671    catch (FormatException exc) { if (debug) trace(exc); } 
    630672 
    631673    // parse (mangle) TIFF comment 
     
    10161058    int denom = s.readInt(); 
    10171059    return new TiffRational(num, denom); 
     1060  } 
     1061 
     1062  private void setCanLookForND(boolean v) { 
     1063    FormatTools.assertId(currentId, false, 1); 
     1064    canLookForND = v; 
    10181065  } 
    10191066 
Note: See TracChangeset for help on using the changeset viewer.