Changeset 5620


Ignore:
Timestamp:
10/19/09 17:20:05 (10 years ago)
Author:
melissa
Message:

Fixed parsing of Metamorph ND files with 0 wavelengths and/or timepoints.

Files:
2 edited

Legend:

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

    r5614 r5620  
    322322      if (t != null) tc = Integer.parseInt(t); 
    323323 
     324      if (cc == 0) cc = 1; 
     325 
    324326      int numFiles = cc * tc; 
    325327      if (nstages > 0) numFiles *= nstages; 
     
    332334      boolean differentZs = false; 
    333335      for (int i=0; i<cc; i++) { 
    334         boolean hasZ1 = hasZ.get(i).booleanValue(); 
    335         boolean hasZ2 = i != 0 && hasZ.get(i - 1).booleanValue(); 
     336        boolean hasZ1 = i < hasZ.size() && hasZ.get(i).booleanValue(); 
     337        boolean hasZ2 = i != 0 && (i - 1 < hasZ.size()) && 
     338          hasZ.get(i - 1).booleanValue(); 
    336339        if (i > 0 && hasZ1 != hasZ2) { 
    337340          if (!differentZs) seriesCount *= 2; 
     
    369372 
    370373      for (int i=0; i<cc; i++) { 
    371         if (waveNames.get(i) != null) { 
     374        if (i < waveNames.size() && waveNames.get(i) != null) { 
    372375          String name = waveNames.get(i); 
    373376          waveNames.setElementAt(name.substring(1, name.length() - 1), i); 
     
    382385        for (int s=0; s<ns; s++) { 
    383386          for (int j=0; j<cc; j++) { 
    384             boolean validZ = hasZ.get(j).booleanValue(); 
     387            boolean validZ = j >= hasZ.size() || hasZ.get(j).booleanValue(); 
    385388            int seriesNdx = s * (seriesCount / ns); 
    386389            seriesNdx += (seriesCount == 1 || validZ) ? 0 : 1; 
    387390            stks[seriesNdx][pt[seriesNdx]] = prefix; 
    388             if (waveNames.get(j) != null) { 
     391            if (j < waveNames.size() && waveNames.get(j) != null) { 
    389392              stks[seriesNdx][pt[seriesNdx]] += "_w" + (j + 1); 
    390393              if (useWaveNames) { 
     
    395398              stks[seriesNdx][pt[seriesNdx]] += "_s" + (s + 1); 
    396399            } 
    397             stks[seriesNdx][pt[seriesNdx]] += "_t" + (i + 1) + ".STK"; 
     400            if (tc > 1) { 
     401              stks[seriesNdx][pt[seriesNdx]] += "_t" + (i + 1) + ".STK"; 
     402            } 
     403            else stks[seriesNdx][pt[seriesNdx]] += ".STK"; 
    398404            pt[seriesNdx]++; 
    399405          } 
     
    556562      if (firstSeriesChannels != null) { 
    557563        for (int c=0; c<firstSeriesChannels.length; c++) { 
    558           if (firstSeriesChannels[c] == ((i % 2) == 0)) { 
     564          if (firstSeriesChannels[c] == ((i % 2) == 0) && c < waveNames.size()) 
     565          { 
    559566            name += waveNames.get(c) + "/"; 
    560567          } 
    561568        } 
    562         name = name.substring(0, name.length() - 1); 
     569        if (name.length() > 0) { 
     570          name = name.substring(0, name.length() - 1); 
     571        } 
    563572      } 
    564573 
  • trunk/components/bio-formats/src/loci/formats/in/MetamorphReader.java

    r5614 r5620  
    322322      if (t != null) tc = Integer.parseInt(t); 
    323323 
     324      if (cc == 0) cc = 1; 
     325 
    324326      int numFiles = cc * tc; 
    325327      if (nstages > 0) numFiles *= nstages; 
     
    332334      boolean differentZs = false; 
    333335      for (int i=0; i<cc; i++) { 
    334         boolean hasZ1 = hasZ.get(i).booleanValue(); 
    335         boolean hasZ2 = i != 0 && hasZ.get(i - 1).booleanValue(); 
     336        boolean hasZ1 = i < hasZ.size() && hasZ.get(i).booleanValue(); 
     337        boolean hasZ2 = i != 0 && (i - 1 < hasZ.size()) && 
     338          hasZ.get(i - 1).booleanValue(); 
    336339        if (i > 0 && hasZ1 != hasZ2) { 
    337340          if (!differentZs) seriesCount *= 2; 
     
    369372 
    370373      for (int i=0; i<cc; i++) { 
    371         if (waveNames.get(i) != null) { 
     374        if (i < waveNames.size() && waveNames.get(i) != null) { 
    372375          String name = waveNames.get(i); 
    373376          waveNames.setElementAt(name.substring(1, name.length() - 1), i); 
     
    382385        for (int s=0; s<ns; s++) { 
    383386          for (int j=0; j<cc; j++) { 
    384             boolean validZ = hasZ.get(j).booleanValue(); 
     387            boolean validZ = j >= hasZ.size() || hasZ.get(j).booleanValue(); 
    385388            int seriesNdx = s * (seriesCount / ns); 
    386389            seriesNdx += (seriesCount == 1 || validZ) ? 0 : 1; 
    387390            stks[seriesNdx][pt[seriesNdx]] = prefix; 
    388             if (waveNames.get(j) != null) { 
     391            if (j < waveNames.size() && waveNames.get(j) != null) { 
    389392              stks[seriesNdx][pt[seriesNdx]] += "_w" + (j + 1); 
    390393              if (useWaveNames) { 
     
    395398              stks[seriesNdx][pt[seriesNdx]] += "_s" + (s + 1); 
    396399            } 
    397             stks[seriesNdx][pt[seriesNdx]] += "_t" + (i + 1) + ".STK"; 
     400            if (tc > 1) { 
     401              stks[seriesNdx][pt[seriesNdx]] += "_t" + (i + 1) + ".STK"; 
     402            } 
     403            else stks[seriesNdx][pt[seriesNdx]] += ".STK"; 
    398404            pt[seriesNdx]++; 
    399405          } 
     
    556562      if (firstSeriesChannels != null) { 
    557563        for (int c=0; c<firstSeriesChannels.length; c++) { 
    558           if (firstSeriesChannels[c] == ((i % 2) == 0)) { 
     564          if (firstSeriesChannels[c] == ((i % 2) == 0) && c < waveNames.size()) 
     565          { 
    559566            name += waveNames.get(c) + "/"; 
    560567          } 
    561568        } 
    562         name = name.substring(0, name.length() - 1); 
     569        if (name.length() > 0) { 
     570          name = name.substring(0, name.length() - 1); 
     571        } 
    563572      } 
    564573 
Note: See TracChangeset for help on using the changeset viewer.