Search in sources :

Example 1 with FilePattern

use of loci.formats.FilePattern in project bioformats by openmicroscopy.

the class ImagePlusReader method constructImageTitle.

private String constructImageTitle(IFormatReader r, String file, String seriesName, boolean groupFiles) {
    String[] used = r.getUsedFiles();
    String title = file.substring(file.lastIndexOf(File.separator) + 1);
    if (used.length > 1 && groupFiles) {
        FilePattern fp = new FilePattern(new Location(file));
        title = fp.getPattern();
        if (title == null) {
            title = file;
            if (title.indexOf('.') != -1) {
                title = title.substring(0, title.lastIndexOf("."));
            }
        }
        title = title.substring(title.lastIndexOf(File.separator) + 1);
    }
    if (seriesName != null && !file.endsWith(seriesName) && r.getSeriesCount() > 1) {
        title += " - " + seriesName;
    }
    if (title.length() > 128) {
        String a = title.substring(0, 62);
        String b = title.substring(title.length() - 62);
        title = a + "..." + b;
    }
    return title;
}
Also used : FilePattern(loci.formats.FilePattern) Location(loci.common.Location)

Example 2 with FilePattern

use of loci.formats.FilePattern in project bioformats by openmicroscopy.

the class LeicaReader method parseFilenames.

private void parseFilenames(int seriesIndex) throws IOException {
    int maxPlanes = 0;
    final List<String> f = new ArrayList<String>();
    int tempImages = in.readInt();
    if (((long) tempImages * nameLength) > in.length()) {
        in.order(!isLittleEndian());
        tempImages = in.readInt();
        in.order(isLittleEndian());
    }
    CoreMetadata ms = core.get(seriesIndex);
    ms.sizeX = in.readInt();
    ms.sizeY = in.readInt();
    in.skipBytes(4);
    int samplesPerPixel = in.readInt();
    ms.rgb = samplesPerPixel > 1;
    ms.sizeC = samplesPerPixel;
    boolean tiffsExist = false;
    String dirPrefix = new Location(currentId).getAbsoluteFile().getParent();
    if (!dirPrefix.endsWith(File.separator))
        dirPrefix += File.separator;
    String prefix = "";
    for (int j = 0; j < tempImages; j++) {
        // read in each filename
        prefix = getString(nameLength);
        f.add(dirPrefix + prefix);
        // test to make sure the path is valid
        Location test = new Location(f.get(f.size() - 1)).getAbsoluteFile();
        LOGGER.debug("Expected to find TIFF file {}", test.getAbsolutePath());
        if (!test.exists()) {
            LOGGER.debug("  file does not exist");
        }
        if (!tiffsExist)
            tiffsExist = test.exists();
    }
    if (!tiffsExist) {
        // Strategy for handling renamed files:
        // 1) Assume that files for each series follow a pattern.
        // 2) Assign each file group to the first series with the correct count.
        LOGGER.info("Handling renamed TIFF files");
        String[] listing = getTIFFList();
        // grab the file patterns
        final List<String> filePatterns = new ArrayList<String>();
        for (String q : listing) {
            Location l = new Location(q).getAbsoluteFile();
            if (!l.exists()) {
                l = new Location(dirPrefix, q).getAbsoluteFile();
            }
            FilePattern pattern = new FilePattern(l);
            if (!pattern.isValid())
                continue;
            AxisGuesser guess = new AxisGuesser(pattern, "XYZCT", 1, 1, 1, false);
            String fp = pattern.getPattern();
            if (guess.getAxisCountS() >= 1) {
                String pre = pattern.getPrefix(guess.getAxisCountS());
                final List<String> fileList = new ArrayList<String>();
                for (int n = 0; n < listing.length; n++) {
                    Location p = new Location(dirPrefix, listing[n]);
                    if (p.getAbsolutePath().startsWith(pre)) {
                        fileList.add(listing[n]);
                    }
                }
                fp = FilePattern.findPattern(l.getAbsolutePath(), dirPrefix, fileList.toArray(new String[fileList.size()]));
            }
            if (fp != null && !filePatterns.contains(fp)) {
                filePatterns.add(fp);
            }
        }
        for (String q : filePatterns) {
            String[] pattern = new FilePattern(q).getFiles();
            if (pattern.length == tempImages) {
                // make sure that this pattern hasn't already been used
                boolean validPattern = true;
                for (int n = 0; n < seriesIndex; n++) {
                    if (files[n] == null)
                        continue;
                    if (files[n].contains(pattern[0])) {
                        validPattern = false;
                        break;
                    }
                }
                if (validPattern) {
                    files[seriesIndex] = new ArrayList<String>();
                    files[seriesIndex].addAll(Arrays.asList(pattern));
                }
            }
        }
    } else {
        files[seriesIndex] = f;
        for (int s = 0; s < seriesIndex; s++) {
            if (files[s] != null) {
                if (files[s].get(0).equals(f.get(0))) {
                    valid[s] = false;
                    files[s] = null;
                }
            }
        }
    }
    if (files[seriesIndex] == null)
        valid[seriesIndex] = false;
    else {
        ms.imageCount = files[seriesIndex].size();
        maxPlanes = (int) Math.max(maxPlanes, ms.imageCount);
    }
}
Also used : ArrayList(java.util.ArrayList) FilePattern(loci.formats.FilePattern) CoreMetadata(loci.formats.CoreMetadata) AxisGuesser(loci.formats.AxisGuesser) Location(loci.common.Location)

Example 3 with FilePattern

use of loci.formats.FilePattern in project bioformats by openmicroscopy.

the class MIASReader method initFile.

// -- Internal FormatReader API methods --
/* @see loci.formats.FormatReader#initFile(String) */
@Override
protected void initFile(String id) throws FormatException, IOException {
    super.initFile(id);
    if (checkSuffix(id, "txt")) {
        // first need to find a relevant TIFF file
        Location base = new Location(id).getAbsoluteFile();
        Location plate = null;
        if (base.getParentFile().getName().equals("Batchresults")) {
            Location experiment = base.getParentFile().getParentFile();
            String[] plates = experiment.list(true);
            Arrays.sort(plates);
            plate = new Location(experiment, plates[0]);
        } else {
            plate = base.getParentFile();
            if (plate.getName().equals("results"))
                plate = plate.getParentFile();
        }
        String[] list = plate.list(true);
        for (String f : list) {
            if (f.startsWith("Well")) {
                Location well = new Location(plate, f);
                String[] wellList = well.list(true);
                for (String file : wellList) {
                    String path = new Location(well, file).getAbsolutePath();
                    if (isThisType(path) && checkSuffix(path, new String[] { "tif", "tiff" })) {
                        initFile(path);
                        return;
                    }
                }
            }
        }
        throw new FormatException("Could not locate an appropriate TIFF file.");
    }
    if (!isGroupFiles()) {
        tiffs = new String[][] { { id } };
        readers = new MinimalTiffReader[1][1];
        readers[0][0] = new MinimalTiffReader();
        TiffReader r = new TiffReader();
        r.setMetadataStore(getMetadataStore());
        r.setId(tiffs[0][0]);
        core = new ArrayList<CoreMetadata>(r.getCoreMetadataList());
        metadataStore = r.getMetadataStore();
        final Map<String, Object> globalMetadata = r.getGlobalMetadata();
        for (final Map.Entry<String, Object> entry : globalMetadata.entrySet()) {
            addGlobalMeta(entry.getKey(), entry.getValue());
        }
        r.close();
        tileRows = 1;
        tileCols = 1;
        return;
    }
    analysisFiles = new ArrayList<AnalysisFile>();
    // MIAS is a high content screening format which supports multiple plates,
    // wells and fields.
    // Most of the metadata comes from the directory hierarchy, as very little
    // metadata is present in the actual files.
    // 
    // The directory hierarchy is either:
    // 
    // <experiment name>                        top level experiment directory
    // Batchresults                           analysis results for experiment
    // <plate number>_<plate barcode>         one directory for each plate
    // results                              analysis results for plate
    // Well<xxxx>                           one directory for each well
    // mode<x>_z<xxx>_t<xxx>_im<x>_<x>.tif
    // 
    // or:
    // 
    // <experiment name>                        top level experiment directory
    // <plate number>                         plate directory (3 digits)
    // <well number>                        well directory (4 digits)
    // <channel number>                   channel directory (1 digit)
    // <tile row>_<tile col>_<Z>_<T>.tif
    // 
    // Each TIFF file contains a single grayscale plane.  The "mode" block
    // refers to the channel number; the "z" and "t" blocks refer to the
    // Z section and timepoint, respectively.  The "im<x>_<x>" block gives
    // the row and column coordinates of the image within a mosaic.
    // 
    // We are initially given one of these TIFF files; from there, we need
    // to find the top level experiment directory and work our way down to
    // determine how many plates and wells are present.
    LOGGER.info("Building list of TIFF files");
    Location baseFile = new Location(id).getAbsoluteFile();
    Location plate = baseFile.getParentFile().getParentFile();
    String plateName = plate.getName();
    if (!(plateName.length() == 3 || (plateName.length() > 3 && plateName.replaceAll("\\d", "").startsWith("-")))) {
        plate = plate.getParentFile();
        plateName = plate.getName();
    }
    int plateNumber = Integer.parseInt(plateName.substring(0, 3));
    Location experiment = plate.getParentFile();
    String[] directories = experiment.list(true);
    Arrays.sort(directories);
    for (String dir : directories) {
        Location f = new Location(experiment, dir);
        if (dir.equals("Batchresults")) {
            String[] results = f.list(true);
            for (String result : results) {
                Location file = new Location(f, result);
                if (result.startsWith("NEO_Results")) {
                    resultFile = file.getAbsolutePath();
                    AnalysisFile af = new AnalysisFile();
                    af.filename = resultFile;
                    analysisFiles.add(af);
                } else if (result.startsWith("NEO_PlateOutput_")) {
                    int plateIndex = Integer.parseInt(result.substring(16, 19));
                    if (plateIndex == plateNumber) {
                        AnalysisFile af = new AnalysisFile();
                        af.filename = file.getAbsolutePath();
                        af.plate = 0;
                        analysisFiles.add(af);
                    }
                }
            }
        }
    }
    String[] list = plate.list(true);
    Arrays.sort(list);
    final List<String> wellDirectories = new ArrayList<String>();
    for (String dir : list) {
        Location f = new Location(plate, dir);
        if (f.getName().startsWith("Well") || f.getName().length() == 4) {
            // directory name is valid, but we need to make sure that the
            // directory contains a TIFF or a subdirectory
            String[] wellList = f.list(true);
            if (wellList != null) {
                boolean validWell = false;
                for (String potentialTIFF : wellList) {
                    if (potentialTIFF.toLowerCase().endsWith(".tif") || new Location(f, potentialTIFF).isDirectory()) {
                        validWell = true;
                        break;
                    }
                }
                if (validWell)
                    wellDirectories.add(f.getAbsolutePath());
            }
        } else if (f.getName().equals("results")) {
            String[] resultsList = f.list(true);
            for (String result : resultsList) {
                // exclude proprietary program state files
                if (!result.endsWith(".sav") && !result.endsWith(".dsv") && !result.endsWith(".dat")) {
                    Location r = new Location(f, result);
                    AnalysisFile af = new AnalysisFile();
                    af.filename = r.getAbsolutePath();
                    af.plate = 0;
                    if (result.toLowerCase().startsWith("well")) {
                        af.well = Integer.parseInt(result.substring(4, 8)) - 1;
                    }
                    analysisFiles.add(af);
                }
            }
        } else if (f.getName().equals("Nugenesistemplate.txt")) {
            templateFile = f.getAbsolutePath();
        }
    }
    int nWells = wellDirectories.size();
    LOGGER.debug("Found {} wells.", nWells);
    readers = new MinimalTiffReader[nWells][];
    tiffs = new String[nWells][];
    int[] zCount = new int[nWells];
    int[] cCount = new int[nWells];
    int[] tCount = new int[nWells];
    String[] order = new String[nWells];
    wellNumber = new int[nWells];
    String[] wells = wellDirectories.toArray(new String[nWells]);
    Arrays.sort(wells);
    for (int j = 0; j < nWells; j++) {
        Location well = new Location(wells[j]);
        String wellName = well.getName().replaceAll("Well", "");
        wellNumber[j] = Integer.parseInt(wellName) - 1;
        String[] tiffFiles = well.list(true);
        final List<String> tmpFiles = new ArrayList<String>();
        for (String tiff : tiffFiles) {
            String name = tiff.toLowerCase();
            if (name.endsWith(".tif") || name.endsWith(".tiff")) {
                tmpFiles.add(new Location(well, tiff).getAbsolutePath());
            }
        }
        if (tmpFiles.size() == 0) {
            LOGGER.debug("No TIFFs in well directory {}", wells[j]);
            // directories which contain the TIFFs
            for (String dir : tiffFiles) {
                Location file = new Location(well, dir);
                if (dir.length() == 1 && file.isDirectory()) {
                    cCount[j]++;
                    String[] tiffs = file.list(true);
                    for (String tiff : tiffs) {
                        String name = tiff.toLowerCase();
                        if (name.endsWith(".tif") || name.endsWith(".tiff")) {
                            tmpFiles.add(new Location(file, tiff).getAbsolutePath());
                        }
                    }
                }
            }
        }
        tiffFiles = tmpFiles.toArray(new String[0]);
        if (ArrayUtils.isEmpty(tiffFiles)) {
            throw new FormatException("Empty dataset - No tiff files were found.");
        }
        Location firstTiff = new Location(tiffFiles[0]);
        List<String> names = new ArrayList<String>();
        for (Location f : firstTiff.getParentFile().listFiles()) {
            names.add(f.getName());
        }
        FilePattern fp = new FilePattern(FilePattern.findPattern(firstTiff.getName(), null, names.toArray(new String[names.size()])));
        String[] blocks = fp.getPrefixes();
        order[j] = "XY";
        int[] count = fp.getCount();
        for (int block = blocks.length - 1; block >= 0; block--) {
            blocks[block] = blocks[block].toLowerCase();
            blocks[block] = blocks[block].substring(blocks[block].lastIndexOf("_") + 1);
            if (blocks[block].equals("z")) {
                zCount[j] = count[block];
                order[j] += 'Z';
            } else if (blocks[block].equals("t")) {
                tCount[j] = count[block];
                order[j] += 'T';
            } else if (blocks[block].equals("mode")) {
                cCount[j] = count[block];
                order[j] += 'C';
            } else if (blocks[block].equals("im"))
                tileRows = count[block];
            else if (blocks[block].equals(""))
                tileCols = count[block];
            else if (blocks[block].replaceAll("\\d", "").length() == 0) {
                if (block == 3)
                    tileRows = count[block];
                else if (block == 2)
                    tileCols = count[block];
                else if (block == 0) {
                    zCount[j] = count[block];
                    order[j] += 'Z';
                } else if (block == 1) {
                    tCount[j] = count[block];
                    order[j] += 'T';
                }
            } else {
                throw new FormatException("Unsupported block '" + blocks[block]);
            }
        }
        Arrays.sort(tiffFiles);
        tiffs[j] = tiffFiles;
        LOGGER.debug("Well {} has {} files.", j, tiffFiles.length);
        readers[j] = new MinimalTiffReader[tiffFiles.length];
        for (int k = 0; k < tiffFiles.length; k++) {
            readers[j][k] = new MinimalTiffReader();
        }
    }
    // Populate core metadata
    LOGGER.info("Populating core metadata");
    int nSeries = tiffs.length;
    bpp = new int[nSeries];
    if (readers.length == 0) {
        throw new FormatException("No wells were found.");
    }
    // assume that all wells have the same width, height, and pixel type
    readers[0][0].setId(tiffs[0][0]);
    tileWidth = readers[0][0].getSizeX();
    tileHeight = readers[0][0].getSizeY();
    if (tileCols == 0)
        tileCols = 1;
    if (tileRows == 0)
        tileRows = 1;
    core.clear();
    for (int i = 0; i < nSeries; i++) {
        CoreMetadata ms = new CoreMetadata();
        core.add(ms);
        ms.sizeZ = zCount[i];
        ms.sizeC = cCount[i];
        ms.sizeT = tCount[i];
        if (ms.sizeZ == 0)
            ms.sizeZ = 1;
        if (ms.sizeC == 0)
            ms.sizeC = 1;
        if (ms.sizeT == 0)
            ms.sizeT = 1;
        ms.sizeX = tileWidth * tileCols;
        ms.sizeY = tileHeight * tileRows;
        ms.pixelType = readers[0][0].getPixelType();
        ms.sizeC *= readers[0][0].getSizeC();
        ms.rgb = readers[0][0].isRGB();
        ms.littleEndian = readers[0][0].isLittleEndian();
        ms.interleaved = readers[0][0].isInterleaved();
        ms.indexed = readers[0][0].isIndexed();
        ms.falseColor = readers[0][0].isFalseColor();
        ms.dimensionOrder = order[i];
        if (ms.dimensionOrder.indexOf('Z') == -1) {
            ms.dimensionOrder += 'Z';
        }
        if (ms.dimensionOrder.indexOf('C') == -1) {
            ms.dimensionOrder += 'C';
        }
        if (ms.dimensionOrder.indexOf('T') == -1) {
            ms.dimensionOrder += 'T';
        }
        ms.imageCount = ms.sizeZ * ms.sizeT * cCount[i];
        if (ms.imageCount == 0) {
            ms.imageCount = 1;
        }
        bpp[i] = FormatTools.getBytesPerPixel(ms.pixelType);
    }
    // Populate metadata hashtable
    LOGGER.info("Populating metadata hashtable");
    if (resultFile != null && getMetadataOptions().getMetadataLevel() != MetadataLevel.MINIMUM) {
        String[] cols = null;
        final List<String> rows = new ArrayList<String>();
        boolean doKeyValue = true;
        int nStarLines = 0;
        String analysisResults = DataTools.readFile(resultFile);
        String[] lines = analysisResults.split("\n");
        for (String line : lines) {
            line = line.trim();
            if (line.length() == 0)
                continue;
            if (line.startsWith("******") && line.endsWith("******"))
                nStarLines++;
            if (doKeyValue) {
                String[] n = line.split("\t");
                if (n[0].endsWith(":"))
                    n[0] = n[0].substring(0, n[0].length() - 1);
                if (n.length >= 2)
                    addGlobalMeta(n[0], n[1]);
            } else {
                if (cols == null)
                    cols = line.split("\t");
                else
                    rows.add(line);
            }
            if (nStarLines == 2)
                doKeyValue = false;
        }
        for (String row : rows) {
            String[] d = row.split("\t");
            for (int col = 3; col < cols.length; col++) {
                addGlobalMeta("Plate " + d[0] + ", Well " + d[2] + " " + cols[col], d[col]);
                if (cols[col].equals("AreaCode")) {
                    String wellID = d[col].replaceAll("\\D", "");
                    wellColumns = Integer.parseInt(wellID);
                }
            }
        }
    }
    // Populate MetadataStore
    LOGGER.info("Populating MetadataStore");
    MetadataStore store = makeFilterMetadata();
    MetadataTools.populatePixels(store, this, true);
    // assume that a 96 well plate is 8x12, and a 384 well plate is 16x24
    if (wellColumns == 0) {
        if (nWells == 96) {
            wellColumns = 12;
        } else if (nWells == 384) {
            wellColumns = 24;
        } else {
            LOGGER.warn("Could not determine the plate dimensions.");
            wellColumns = 24;
        }
    }
    store.setPlateID(MetadataTools.createLSID("Plate", 0), 0);
    String plateAcqId = MetadataTools.createLSID("PlateAcquisition", 0, 0);
    store.setPlateAcquisitionID(plateAcqId, 0, 0);
    store.setPlateAcquisitionMaximumFieldCount(new PositiveInteger(1), 0, 0);
    for (int well = 0; well < nWells; well++) {
        int wellIndex = wellNumber[well];
        int row = wellIndex / wellColumns;
        int wellCol = (wellIndex % wellColumns) + 1;
        char wellRow = (char) ('A' + row);
        store.setWellID(MetadataTools.createLSID("Well", 0, well), 0, well);
        store.setWellRow(new NonNegativeInteger(row), 0, well);
        store.setWellColumn(new NonNegativeInteger(wellCol - 1), 0, well);
        String imageID = MetadataTools.createLSID("Image", well);
        String wellSampleID = MetadataTools.createLSID("WellSample", 0, well, 0);
        store.setWellSampleID(wellSampleID, 0, well, 0);
        store.setWellSampleIndex(new NonNegativeInteger(well), 0, well, 0);
        store.setImageID(imageID, well);
        store.setImageName("Well " + wellRow + wellCol, well);
        store.setWellSampleImageRef(imageID, 0, well, 0);
        store.setPlateAcquisitionWellSampleRef(wellSampleID, 0, 0, well);
    }
    MetadataLevel level = getMetadataOptions().getMetadataLevel();
    if (level != MetadataLevel.MINIMUM) {
        String experimentID = MetadataTools.createLSID("Experiment", 0);
        store.setExperimentID(experimentID, 0);
        store.setExperimentType(getExperimentType("Other"), 0);
        store.setExperimentDescription(experiment.getName(), 0);
        // populate SPW metadata
        store.setPlateColumnNamingConvention(getNamingConvention("Number"), 0);
        store.setPlateRowNamingConvention(getNamingConvention("Letter"), 0);
        parseTemplateFile(store);
        plateName = plateName.substring(plateName.indexOf('-') + 1);
        store.setPlateName(plateName, 0);
        store.setPlateExternalIdentifier(plateName, 0);
        for (int well = 0; well < nWells; well++) {
            // populate Image/Pixels metadata
            store.setImageExperimentRef(experimentID, well);
            String instrumentID = MetadataTools.createLSID("Instrument", 0);
            store.setInstrumentID(instrumentID, 0);
            store.setImageInstrumentRef(instrumentID, well);
        }
        roiFiles = new ArrayList<AnalysisFile>();
        for (AnalysisFile af : analysisFiles) {
            String file = af.filename;
            String name = new Location(file).getName();
            if (!name.startsWith("Well"))
                continue;
            if (name.endsWith("AllModesOverlay.tif")) {
                roiFiles.add(af);
            } else if (name.endsWith("overlay.tif")) {
                roiFiles.add(af);
            }
        }
        if (level != MetadataLevel.NO_OVERLAYS) {
            // populate image-level ROIs
            Color[] colors = new Color[getSizeC()];
            int nextROI = 0;
            for (AnalysisFile af : analysisFiles) {
                String file = af.filename;
                String name = new Location(file).getName();
                if (!name.startsWith("Well"))
                    continue;
                int[] position = getPositionFromFile(file);
                int well = position[0];
                if (name.endsWith("detail.txt")) {
                    String data = DataTools.readFile(file);
                    String[] lines = data.split("\n");
                    int start = 0;
                    while (start < lines.length && !lines[start].startsWith("Label")) {
                        start++;
                    }
                    if (start >= lines.length)
                        continue;
                    String[] columns = lines[start].split("\t");
                    List<String> columnNames = Arrays.asList(columns);
                    for (int j = start + 1; j < lines.length; j++) {
                        populateROI(columnNames, lines[j].split("\t"), well, nextROI++, position[1], position[2], store);
                    }
                } else if (name.endsWith("AllModesOverlay.tif")) {
                    // results/Well<nnnn>_mode<n>_z<nnn>_t<nnn>_AllModesOverlay.tif
                    if (colors[position[3]] != null)
                        continue;
                    try {
                        colors[position[3]] = getChannelColorFromFile(file);
                    } catch (IOException e) {
                    }
                    if (colors[position[3]] == null)
                        continue;
                    for (int s = 0; s < getSeriesCount(); s++) {
                        store.setChannelColor(colors[position[3]], s, position[3]);
                    }
                    if (position[3] == 0) {
                        nextROI += parseMasks(store, well, nextROI, file);
                    }
                } else if (name.endsWith("overlay.tif")) {
                    nextROI += parseMasks(store, well, nextROI, file);
                }
            }
        }
    }
}
Also used : ArrayList(java.util.ArrayList) PositiveInteger(ome.xml.model.primitives.PositiveInteger) NonNegativeInteger(ome.xml.model.primitives.NonNegativeInteger) Color(ome.xml.model.primitives.Color) IOException(java.io.IOException) CoreMetadata(loci.formats.CoreMetadata) FormatException(loci.formats.FormatException) MetadataStore(loci.formats.meta.MetadataStore) FilePattern(loci.formats.FilePattern) HashMap(java.util.HashMap) Map(java.util.Map) Location(loci.common.Location)

Example 4 with FilePattern

use of loci.formats.FilePattern in project bioformats by openmicroscopy.

the class FilePatternTest method testVarDir.

@Test
public void testVarDir() {
    String[] prefixes = { "z" };
    String[] blocks = { "<0-1>" };
    String suffix = SEPARATOR + "foo.tif";
    String pattern = mkPattern(prefixes, blocks, suffix);
    FilePattern fp = new FilePattern(pattern);
    assertTrue(fp.isValid());
    assertFalse(fp.isRegex());
    assertEquals(fp.getPattern(), pattern);
    assertEquals(fp.getPrefixes(), prefixes);
    for (int i = 0; i < prefixes.length; i++) {
        assertEquals(fp.getPrefix(i), prefixes[i]);
    }
    assertEquals(fp.getPrefix(), prefixes[0]);
    assertEquals(fp.getBlocks(), blocks);
    for (int i = 0; i < blocks.length; i++) {
        assertEquals(fp.getBlock(i), blocks[i]);
    }
    assertEquals(fp.getSuffix(), suffix);
    assertEquals(fp.getCount(), new int[] { 2 });
    assertEquals(fp.getElements(), new String[][] { { "0", "1" } });
    assertEqualsNoOrder(fp.getFiles(), new String[] { "z0" + suffix, "z1" + suffix });
    assertEquals(fp.getFirst(), new BigInteger[] { BigInteger.ZERO });
    assertEquals(fp.getLast(), new BigInteger[] { BigInteger.ONE });
    assertEquals(fp.getStep(), new BigInteger[] { BigInteger.ONE });
}
Also used : FilePattern(loci.formats.FilePattern) Test(org.testng.annotations.Test)

Example 5 with FilePattern

use of loci.formats.FilePattern in project bioformats by openmicroscopy.

the class FilePatternTest method testNonRegex.

@Test
public void testNonRegex() {
    String[] prefixes = { "z", "c", "t" };
    String[] blocks = { "<0-1>", "<R,G,B>", "<10-30:10>" };
    String suffix = ".tif";
    String pattern = mkPattern(prefixes, blocks, suffix);
    FilePattern fp = new FilePattern(pattern);
    assertTrue(fp.isValid());
    assertFalse(fp.isRegex());
    assertEquals(fp.getPattern(), pattern);
    assertEquals(fp.getPrefixes(), prefixes);
    for (int i = 0; i < prefixes.length; i++) {
        assertEquals(fp.getPrefix(i), prefixes[i]);
    }
    assertEquals(fp.getPrefix(), prefixes[0]);
    assertEquals(fp.getBlocks(), blocks);
    for (int i = 0; i < blocks.length; i++) {
        assertEquals(fp.getBlock(i), blocks[i]);
    }
    assertEquals(fp.getSuffix(), suffix);
    assertEquals(fp.getCount(), new int[] { 2, 3, 3 });
    assertEquals(fp.getElements(), new String[][] { { "0", "1" }, { "R", "G", "B" }, { "10", "20", "30" } });
    assertEqualsNoOrder(fp.getFiles(), new String[] { "z0cRt10.tif", "z0cRt20.tif", "z0cRt30.tif", "z0cGt10.tif", "z0cGt20.tif", "z0cGt30.tif", "z0cBt10.tif", "z0cBt20.tif", "z0cBt30.tif", "z1cRt10.tif", "z1cRt20.tif", "z1cRt30.tif", "z1cGt10.tif", "z1cGt20.tif", "z1cGt30.tif", "z1cBt10.tif", "z1cBt20.tif", "z1cBt30.tif" });
    assertEquals(fp.getFirst(), new BigInteger[] { new BigInteger("0"), null, new BigInteger("10") });
    assertEquals(fp.getLast(), new BigInteger[] { new BigInteger("1"), null, new BigInteger("30") });
    assertEquals(fp.getStep(), new BigInteger[] { new BigInteger("1"), null, new BigInteger("10") });
}
Also used : BigInteger(java.math.BigInteger) FilePattern(loci.formats.FilePattern) Test(org.testng.annotations.Test)

Aggregations

FilePattern (loci.formats.FilePattern)19 Location (loci.common.Location)10 ArrayList (java.util.ArrayList)6 Test (org.testng.annotations.Test)6 IOException (java.io.IOException)4 CoreMetadata (loci.formats.CoreMetadata)4 FormatException (loci.formats.FormatException)4 File (java.io.File)3 RandomAccessInputStream (loci.common.RandomAccessInputStream)3 AxisGuesser (loci.formats.AxisGuesser)3 MetadataStore (loci.formats.meta.MetadataStore)3 BigInteger (java.math.BigInteger)2 Path (java.nio.file.Path)2 ServiceFactory (loci.common.services.ServiceFactory)2 ImageReader (loci.formats.ImageReader)2 OMEXMLService (loci.formats.services.OMEXMLService)2 TiffParser (loci.formats.tiff.TiffParser)2 GenericDialog (ij.gui.GenericDialog)1 YesNoCancelDialog (ij.gui.YesNoCancelDialog)1 DirectoryChooser (ij.io.DirectoryChooser)1