Changeset 3445


Ignore:
Timestamp:
12/06/07 09:43:52 (12 years ago)
Author:
melissa
Message:

More robust support for stitching multi-series datasets - now supports an arbitrary number of series blocks (instead of just one).

Location:
trunk/loci/formats
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/loci/formats/AxisGuesser.java

    r3444 r3445  
    7070 
    7171  /** Prefix endings indicating series dimension. */ 
    72   protected static final String[] S = {"s", "series"}; 
     72  protected static final String[] S = {"s", "series", "e"}; 
    7373 
    7474  protected static final BigInteger TWO = new BigInteger("2"); 
  • trunk/loci/formats/FileStitcher.java

    r3444 r3445  
    9696  /** Current series number. */ 
    9797  private int series; 
     98 
     99  private String[] seriesBlocks; 
     100  private Vector fileVector; 
    98101 
    99102  // -- Constructors -- 
     
    819822  } 
    820823 
    821   // -- Helper methods -- 
     824  // -- Internal FormatReader API methods -- 
    822825 
    823826  /** Initializes the given file. */ 
     
    846849 
    847850      String[] blockPrefixes = fp.getPrefixes(); 
    848       BigInteger[] firsts = fp.getFirst(); 
    849       BigInteger[] steps = fp.getStep(); 
    850       String sBlock = null; 
    851       BigInteger first = null; 
    852       BigInteger step = null; 
     851      Vector sBlock = new Vector(); 
    853852 
    854853      for (int i=0; i<axes.length; i++) { 
    855854        if (axes[i] == AxisGuesser.S_AXIS) { 
    856           seriesCount = count[i]; 
    857           sBlock = blockPrefixes[i]; 
    858           first = firsts[i]; 
    859           step = steps[i]; 
    860         } 
    861       } 
    862  
     855          sBlock.add(blockPrefixes[i]); 
     856        } 
     857      } 
     858 
     859      seriesBlocks = (String[]) sBlock.toArray(new String[0]); 
     860      fileVector = new Vector(); 
     861 
     862      String file = fp.getFiles()[0]; 
     863      Location dir = new Location(file).getAbsoluteFile().getParentFile(); 
     864      String[] fs = dir.list(); 
     865 
     866      setFiles(fs, seriesBlocks[0], fp.getFirst()[0], fp.getLast()[0], 
     867        fp.getStep()[0], "", 0); 
     868 
     869      seriesCount = fileVector.size(); 
    863870      files = new String[seriesCount][]; 
    864871 
    865       String file = fp.getFiles()[0]; 
    866       String dir = 
    867         new Location(file).getAbsoluteFile().getParentFile().getPath(); 
    868       String prefix = fp.getPrefix(); 
    869       String suffix = fp.getSuffix(); 
    870  
    871       Vector[] v = new Vector[seriesCount]; 
    872       for (int i=0; i<v.length; i++) { 
    873         v[i] = new Vector(); 
    874       } 
    875       String[] list = new Location(dir).list(); 
    876       for (int i=0; i<list.length; i++) { 
    877         if (list[i].indexOf(File.separator) != -1) { 
    878           list[i] = list[i].substring(list[i].lastIndexOf(File.separator)); 
    879         } 
    880         if (list[i].startsWith(prefix) && list[i].endsWith(suffix)) { 
    881           for (int j=0; j<seriesCount; j++) { 
    882             BigInteger bb = new BigInteger(j + ""); 
    883             bb = bb.multiply(step); 
    884             bb = bb.add(first); 
    885             if (list[i].indexOf(sBlock + bb.toString()) != -1) { 
    886               v[j].add(list[i]); 
    887               break; 
    888             } 
    889           } 
    890         } 
    891       } 
    892  
    893872      for (int i=0; i<seriesCount; i++) { 
    894         String[] test = (String[]) v[i].toArray(new String[0]); 
    895         String p = FilePattern.findPattern(test[0], dir, test); 
    896         FilePattern pat = new FilePattern(p); 
    897         files[i] = pat.getFiles(); 
     873        files[i] = (String[]) fileVector.get(i); 
    898874      } 
    899875    } 
     
    919895        if (!new Location(files[i][j]).exists()) { 
    920896          throw new FormatException("File #" + i + 
    921             " (" + files[i] + ") does not exist."); 
     897            " (" + files[i][j] + ") does not exist."); 
    922898        } 
    923899      } 
     
    10781054  } 
    10791055 
     1056  // -- Helper methods -- 
     1057 
    10801058  /** Computes axis length arrays, and total axis lengths. */ 
    10811059  protected void computeAxisLengths() throws FormatException { 
     
    12441222  } 
    12451223 
     1224  private FilePattern getPattern(String[] f, String dir, String block) 
     1225  { 
     1226    Vector v = new Vector(); 
     1227    for (int i=0; i<f.length; i++) { 
     1228      if (f[i].indexOf(block) != -1 && new Location(f[i]).exists()) { 
     1229        v.add(f[i]); 
     1230      } 
     1231    } 
     1232    f = (String[]) v.toArray(new String[0]); 
     1233    return new FilePattern(FilePattern.findPattern(f[0], dir, f)); 
     1234  } 
     1235 
     1236  private void setFiles(String[] list, String prefix, BigInteger first, 
     1237    BigInteger last, BigInteger step, String dir, int blockNum) 
     1238  { 
     1239    long f = first.longValue(); 
     1240    long l = last.longValue(); 
     1241    long s = step.longValue(); 
     1242    for (long i=f; i<=l; i+=s) { 
     1243      FilePattern newPattern = getPattern(list, dir, prefix + i); 
     1244      if (blockNum == seriesBlocks.length - 1) { 
     1245        fileVector.add(newPattern.getFiles()); 
     1246      } 
     1247      else { 
     1248        String next = seriesBlocks[blockNum + 1]; 
     1249        String[] blocks = newPattern.getPrefixes(); 
     1250        BigInteger fi = null; 
     1251        BigInteger la = null; 
     1252        BigInteger st = null; 
     1253        for (int q=0; q<blocks.length; q++) { 
     1254          if (blocks[q].indexOf(next) != -1) { 
     1255            fi = newPattern.getFirst()[q]; 
     1256            la = newPattern.getLast()[q]; 
     1257            st = newPattern.getStep()[q]; 
     1258            break; 
     1259          } 
     1260        } 
     1261 
     1262        setFiles(newPattern.getFiles(), next, fi, la, st, dir, blockNum + 1); 
     1263      } 
     1264    } 
     1265  } 
     1266 
    12461267  // -- Deprecated FileStitcher API methods -- 
    12471268 
Note: See TracChangeset for help on using the changeset viewer.