Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 56 additions & 0 deletions components/formats-bsd/src/loci/formats/Memoizer.java
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,8 @@
import loci.common.services.DependencyException;
import loci.common.services.ServiceException;
import loci.common.services.ServiceFactory;
import loci.formats.in.DynamicMetadataOptions;
import loci.formats.in.MetadataOptions;
import loci.formats.meta.MetadataRetrieve;
import loci.formats.meta.MetadataStore;
import loci.formats.services.OMEXMLService;
Expand Down Expand Up @@ -430,6 +432,7 @@ public void saveStop() throws IOException {
*/
public Memoizer() {
this(DEFAULT_MINIMUM_ELAPSED);
configure(reader.getMetadataOptions());
}

/**
Expand All @@ -444,6 +447,7 @@ public Memoizer() {
public Memoizer(long minimumElapsed) {
this(minimumElapsed, null);
this.doInPlaceCaching = true;
configure(reader.getMetadataOptions());
}

/**
Expand All @@ -462,6 +466,7 @@ public Memoizer(long minimumElapsed, File directory) {
super();
this.minimumElapsed = minimumElapsed;
this.directory = directory;
configure(reader.getMetadataOptions());
}

/**
Expand All @@ -474,6 +479,7 @@ public Memoizer(long minimumElapsed, File directory) {
*/
public Memoizer(IFormatReader r) {
this(r, DEFAULT_MINIMUM_ELAPSED);
configure(reader.getMetadataOptions());
}

/**
Expand All @@ -490,6 +496,7 @@ public Memoizer(IFormatReader r) {
public Memoizer(IFormatReader r, long minimumElapsed) {
this(r, minimumElapsed, null);
this.doInPlaceCaching = true;
configure(reader.getMetadataOptions());
}

/**
Expand All @@ -509,8 +516,57 @@ public Memoizer(IFormatReader r, long minimumElapsed, File directory) {
super(r);
this.minimumElapsed = minimumElapsed;
this.directory = directory;
configure(reader.getMetadataOptions());
}

/**
* Used to inject all the properties necessary for {@link Memoizer}
* creation into {@link MetadataOptions}. This is called by every
* constructor so that {@link IFormatReader} instances created
* internally can also make use of memoization.
*
* @param options
*/
public void configure(MetadataOptions options) {
String k = Memoizer.class.getName();
if (options instanceof DynamicMetadataOptions) {
((DynamicMetadataOptions) options).setFile(k + ".cacheDirectory", this.directory);
((DynamicMetadataOptions) options).setBoolean(k + ".inPlace", this.doInPlaceCaching);
((DynamicMetadataOptions) options).setLong(k + ".minimumElapsed", this.minimumElapsed);
}
}

/**
* If {@link MetadataOptions} have been configured per
* {@link #configure(MetadataOptions)}, then wrap the given
* {@link IFormatReader} with a {@link Memoizer} instance and return.
* Otherwise, return the {@link IFormatReader} unchanged.
*
* @param options If null, return the reader
* @param r
* @return Either a {@link Memoizer} or the {@link IFormatReader} argument.
*/
public static IFormatReader wrap(MetadataOptions options, IFormatReader r) {
if (options == null || !(options instanceof DynamicMetadataOptions)) {
return r;
}
String k = Memoizer.class.getName();
Long elapsed = ((DynamicMetadataOptions) options).getLong(k + ".minimumElapsed");
Boolean inplace = ((DynamicMetadataOptions) options).getBoolean(k + ".inPlace");
File cachedir = ((DynamicMetadataOptions) options).getFile(k + ".cacheDirectory");
if (elapsed == null || inplace == null) {
LOGGER.warn("config: memoizer options not found, reader will not be wrapped");
return r;
}
if (inplace) {
return new Memoizer(r, elapsed);
} else if (cachedir != null) {
return new Memoizer(r, elapsed, cachedir);
}
else {
return r;
}
}

/**
* Returns whether the {@link #reader} instance currently active was loaded
Expand Down
5 changes: 4 additions & 1 deletion components/formats-bsd/src/loci/formats/in/DicomReader.java
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,8 @@
import loci.formats.FormatException;
import loci.formats.FormatReader;
import loci.formats.FormatTools;
import loci.formats.IFormatReader;
import loci.formats.Memoizer;
import loci.formats.MetadataTools;
import loci.formats.UnsupportedCompressionException;
import loci.formats.codec.Codec;
Expand Down Expand Up @@ -153,7 +155,7 @@ public class DicomReader extends FormatReader {
private int originalSeries;
private int originalX, originalY;

private DicomReader helper;
private IFormatReader helper;

private List<String> companionFiles = new ArrayList<String>();

Expand Down Expand Up @@ -494,6 +496,7 @@ protected void initFile(String id) throws FormatException, IOException {
attachCompanionFiles();

helper = new DicomReader();
helper = Memoizer.wrap(getMetadataOptions(), helper);
helper.setGroupFiles(false);

m.littleEndian = true;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,8 @@
import loci.formats.FormatException;
import loci.formats.FormatReader;
import loci.formats.FormatTools;
import loci.formats.IFormatReader;
import loci.formats.Memoizer;
import loci.formats.MetadataTools;
import loci.formats.meta.MetadataStore;
import loci.formats.tiff.IFD;
Expand Down Expand Up @@ -99,7 +101,7 @@ public class MicromanagerReader extends FormatReader {
// -- Fields --

/** Helper reader for TIFF files. */
private MinimalTiffReader tiffReader;
private IFormatReader tiffReader;

private Vector<Position> positions;
private int start = 0;
Expand Down Expand Up @@ -260,6 +262,7 @@ public int getOptimalTileHeight() {
public void initFile(String id) throws FormatException, IOException {
super.initFile(id);
tiffReader = new MinimalTiffReader();
tiffReader = Memoizer.wrap(getMetadataOptions(), tiffReader);
positions = new Vector<Position>();

LOGGER.info("Reading metadata file");
Expand Down
4 changes: 3 additions & 1 deletion components/formats-bsd/src/loci/formats/in/NRRDReader.java
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@
import loci.formats.FormatTools;
import loci.formats.IFormatReader;
import loci.formats.ImageReader;
import loci.formats.Memoizer;
import loci.formats.MetadataTools;
import loci.formats.UnknownFormatException;
import loci.formats.UnsupportedCompressionException;
Expand All @@ -67,7 +68,7 @@ public class NRRDReader extends FormatReader {
// -- Fields --

/** Helper reader. */
private ImageReader helper;
private IFormatReader helper;

/** Name of data file, if the current extension is 'nhdr'. */
private String dataFile;
Expand Down Expand Up @@ -259,6 +260,7 @@ protected void initFile(String id) throws FormatException, IOException {
}
}
helper = new ImageReader(newClasses);
helper = Memoizer.wrap(getMetadataOptions(), helper);
helper.setMetadataOptions(
new DefaultMetadataOptions(MetadataLevel.MINIMUM));

Expand Down
3 changes: 3 additions & 0 deletions components/formats-bsd/src/loci/formats/in/OMETiffReader.java
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@
import loci.formats.FormatException;
import loci.formats.FormatTools;
import loci.formats.IFormatReader;
import loci.formats.Memoizer;
import loci.formats.MetadataTools;
import loci.formats.MissingLibraryException;
import loci.formats.Modulo;
Expand Down Expand Up @@ -548,6 +549,7 @@ protected void initFile(String id) throws FormatException, IOException {

if (!isGroupFiles() && !isSingleFile(currentId)) {
IFormatReader reader = new MinimalTiffReader();
reader = Memoizer.wrap(getMetadataOptions(), reader);
initializeReader(reader, currentId);
core.set(0, 0, new OMETiffCoreMetadata(reader.getCoreMetadataList().get(0)));
int ifdCount = reader.getImageCount();
Expand Down Expand Up @@ -1021,6 +1023,7 @@ else if (t == 0) {
}
if (info[s][0].reader == null) {
info[s][0].reader = new MinimalTiffReader();
info[s][0].reader = Memoizer.wrap(getMetadataOptions(), info[s][0].reader);
}
String firstFile = info[s][0].id;
if (firstFile == null ||
Expand Down
6 changes: 5 additions & 1 deletion components/formats-bsd/src/loci/formats/in/ZipReader.java
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,9 @@
import loci.formats.CoreMetadata;
import loci.formats.FormatException;
import loci.formats.FormatReader;
import loci.formats.IFormatReader;
import loci.formats.ImageReader;
import loci.formats.Memoizer;

/**
* Reader for Zip files.
Expand All @@ -54,7 +56,7 @@ public class ZipReader extends FormatReader {

// -- Fields --

private transient ImageReader reader;
private transient IFormatReader reader;
private String entryName;

private ArrayList<String> mappedFiles = new ArrayList<String>();
Expand Down Expand Up @@ -125,6 +127,7 @@ public void reopenFile() throws IOException {
}
else {
reader = new ImageReader();
reader = Memoizer.wrap(getMetadataOptions(), reader);
}
findZipEntries();
}
Expand All @@ -139,6 +142,7 @@ protected void initFile(String id) throws FormatException, IOException {
reader.close();
}
reader = new ImageReader();
reader = Memoizer.wrap(getMetadataOptions(), reader);

reader.setMetadataOptions(getMetadataOptions());
reader.setMetadataFiltered(isMetadataFiltered());
Expand Down
5 changes: 4 additions & 1 deletion components/formats-gpl/src/loci/formats/in/BDReader.java
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,8 @@
import loci.formats.FormatException;
import loci.formats.FormatReader;
import loci.formats.FormatTools;
import loci.formats.IFormatReader;
import loci.formats.Memoizer;
import loci.formats.MetadataTools;
import loci.formats.meta.MetadataStore;
import loci.formats.tiff.IFD;
Expand Down Expand Up @@ -81,7 +83,7 @@ public class BDReader extends FormatReader {
private List<String> wellLabels = new ArrayList<String>();
private String plateName, plateDescription;
private String[][] tiffs;
private MinimalTiffReader reader;
private IFormatReader reader;

private String roiFile;
private double[] emWave, exWave;
Expand Down Expand Up @@ -344,6 +346,7 @@ protected void initFile(String id) throws FormatException, IOException {
tiffs = getTiffs();

reader = new MinimalTiffReader();
reader = Memoizer.wrap(getMetadataOptions(), reader);
reader.setId(tiffs[0][0]);

int sizeX = reader.getSizeX();
Expand Down
5 changes: 4 additions & 1 deletion components/formats-gpl/src/loci/formats/in/CV7000Reader.java
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@
import loci.formats.FormatException;
import loci.formats.FormatReader;
import loci.formats.FormatTools;
import loci.formats.IFormatReader;
import loci.formats.Memoizer;
import loci.formats.MetadataTools;
import loci.formats.meta.MetadataStore;
import loci.formats.tiff.IFD;
Expand Down Expand Up @@ -79,7 +81,7 @@ public class CV7000Reader extends FormatReader {

private String[] allFiles;
private Location parent;
private MinimalTiffReader reader;
private IFormatReader reader;
private String wppPath;
private String detailPath;
private String measurementPath;
Expand Down Expand Up @@ -334,6 +336,7 @@ protected void initFile(String id) throws FormatException, IOException {
}

reader = new MinimalTiffReader();
reader = Memoizer.wrap(getMetadataOptions(), reader);
reader.setId(firstFile);
core.clear();
core.add(new CoreMetadata(reader.getCoreMetadataList().get(0)));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
import loci.formats.FormatReader;
import loci.formats.FormatTools;
import loci.formats.IFormatReader;
import loci.formats.Memoizer;
import loci.formats.MetadataTools;
import loci.formats.codec.Codec;
import loci.formats.codec.CodecOptions;
Expand Down Expand Up @@ -1076,12 +1077,13 @@ else if (dim.equals("T")) {
case PNG:
file = "tile.png";
reader = new APNGReader();
reader = Memoizer.wrap(getMetadataOptions(), reader);
case BMP:
if (reader == null) {
file = "tile.bmp";
reader = new BMPReader();
reader = Memoizer.wrap(getMetadataOptions(), reader);
}

byte[] b = new byte[(int) (end - offset)];
ets.read(b);
Location.mapFile(file, new ByteArrayHandle(b));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,8 @@
import loci.formats.FormatException;
import loci.formats.FormatReader;
import loci.formats.FormatTools;
import loci.formats.IFormatReader;
import loci.formats.Memoizer;
import loci.formats.MetadataTools;
import loci.formats.meta.MetadataStore;
import loci.formats.ome.OMEXMLMetadata;
Expand Down Expand Up @@ -146,7 +148,7 @@ public byte[] openBytes( final int no, final byte[] buf, final int x, final int
final int areaIndex = indices[ 1 ];
final WellInfo well = wells.get( wellIndex );
final AreaInfo area = well.areas.get( areaIndex );
final MinimalTiffReader tiffReader = new MinimalTiffReader();
final IFormatReader tiffReader = Memoizer.wrap(getMetadataOptions(), new MinimalTiffReader());

imageFolder = new Location(currentId).getAbsoluteFile().getParentFile();
imageFolder = new Location(imageFolder, "Image");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@
import loci.formats.FormatReader;
import loci.formats.FormatTools;
import loci.formats.IFormatReader;
import loci.formats.Memoizer;
import loci.formats.MetadataTools;
import loci.formats.meta.IMetadata;
import loci.formats.meta.MetadataStore;
Expand Down Expand Up @@ -856,6 +857,7 @@ protected IFormatReader getReader(String file, boolean omexml)
throws FormatException, IOException
{
IFormatReader pnl = new DeltavisionReader();
pnl = Memoizer.wrap(getMetadataOptions(), pnl);
initReader(pnl, file, omexml);
return pnl;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@
import loci.formats.FormatException;
import loci.formats.FormatReader;
import loci.formats.FormatTools;
import loci.formats.IFormatReader;
import loci.formats.Memoizer;
import loci.formats.MetadataTools;
import loci.formats.meta.MetadataStore;

Expand Down Expand Up @@ -80,7 +82,7 @@ public class ColumbusReader extends FormatReader {

private ArrayList<String> metadataFiles = new ArrayList<String>();
private ArrayList<Plane> planes = new ArrayList<Plane>();
private MinimalTiffReader reader;
private IFormatReader reader;

private int nFields = 0;
private String acquisitionDate;
Expand Down Expand Up @@ -296,6 +298,7 @@ public int compare(Plane p1, Plane p2) {
planes.clear();

reader = new MinimalTiffReader();
reader = Memoizer.wrap(getMetadataOptions(), reader);
reader.setId(tmpPlanes[0].file);
core = reader.getCoreMetadataList();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@
import loci.formats.FormatException;
import loci.formats.FormatReader;
import loci.formats.FormatTools;
import loci.formats.IFormatReader;
import loci.formats.Memoizer;
import loci.formats.MetadataTools;
import loci.formats.codec.JPEGTileDecoder;
import loci.formats.meta.MetadataStore;
Expand Down Expand Up @@ -148,7 +150,8 @@ public byte[] openBytes(int no, byte[] buf, int x, int y, int w, int h)
}

if (getSizeX() <= MAX_SIZE || getSizeY() <= MAX_SIZE) {
JPEGReader reader = new JPEGReader();
IFormatReader reader = new JPEGReader();
reader = Memoizer.wrap(getMetadataOptions(), reader);
reader.setId(file);
reader.openBytes(0, buf, x, y, w, h);
reader.close();
Expand Down
Loading