diff --git a/org.knime.knip.io/src/org/knime/knip/io/formats/ICSFormat.java b/org.knime.knip.io/src/org/knime/knip/io/formats/ICSFormat.java
index 5125a0a0..0da98ac4 100644
--- a/org.knime.knip.io/src/org/knime/knip/io/formats/ICSFormat.java
+++ b/org.knime.knip.io/src/org/knime/knip/io/formats/ICSFormat.java
@@ -66,18 +66,20 @@
import net.imagej.axis.Axes;
import net.imagej.axis.AxisType;
import net.imagej.axis.CalibratedAxis;
+import net.imglib2.Interval;
import org.scijava.Priority;
import org.scijava.plugin.Plugin;
/**
- * SCIFIO Format supporting the ICS image
+ * SCIFIO Format supporting the
+ * ICS image
* format.
*
* @author Mark Hiner
*/
-@Plugin(type = Format.class, name = "Image Cytometry Standard", priority = Priority.HIGH_PRIORITY)
+@Plugin(type = Format.class, name = "Image Cytometry Standard",
+ priority = Priority.HIGH)
public class ICSFormat extends AbstractFormat {
// -- AbstractFormat Methods --
@@ -204,12 +206,12 @@ else if (axis.equals("t") && axesSizes[n] > 1) {
imageMeta.addAxis(Axes.TIME, (int) axesSizes[n]);
}
else {
- final long timeLength =
- imageMeta.getAxisLength(Axes.TIME) * (int) axesSizes[n];
+ final long timeLength = imageMeta.getAxisLength(Axes.TIME) *
+ (int) axesSizes[n];
imageMeta.setAxisLength(Axes.TIME, timeLength);
- imageMeta.getAxis(Axes.TIME).setUnit(
- units == null ? "seconds" : units[n]);
}
+ imageMeta.getAxis(Axes.TIME).setUnit(
+ units == null ? "seconds" : units[n]);
}
else if (axis.equals("bits")) {
bitsPerPixel = (int) axesSizes[n];
@@ -238,6 +240,7 @@ else if (axis.startsWith("f")) {
}
imageMeta.addAxis(type, (long) axesSizes[n]);
+ imageMeta.getAxis(type).setUnit(units == null ? "unknown" : units[n]);
}
if (paramLabels[n] != null && paramLabels[n].equals(MICRO_TIME)) {
imageMeta.setAxisType(imageMeta.getAxes().size() - 1,
@@ -273,8 +276,8 @@ else if (axis.startsWith("f")) {
final int bytes = bitsPerPixel / 8;
- if (bitsPerPixel < 32) imageMeta
- .setLittleEndian(!get(0).isLittleEndian());
+ if (bitsPerPixel < 32) imageMeta.setLittleEndian(!get(0)
+ .isLittleEndian());
final boolean floatingPt = rFormat.equals("real");
final boolean signed = isSigned();
@@ -563,12 +566,11 @@ public void putExposureTime(final Double expTime) {
public String getDate() {
String date = null;
- final String[] kv =
- findValueForKey("history date", "history created on",
- "history creation date");
+ final String[] kv = findValueForKey("history date", "history created on",
+ "history creation date");
if (kv != null) {
- if (kv[0].equalsIgnoreCase("history date") ||
- kv[0].equalsIgnoreCase("history created on"))
+ if (kv[0].equalsIgnoreCase("history date") || kv[0].equalsIgnoreCase(
+ "history created on"))
{
if (kv[1].indexOf(" ") > 0) {
date = kv[1].substring(0, kv[1].lastIndexOf(" "));
@@ -579,8 +581,8 @@ else if (kv[0].equalsIgnoreCase("history creation date")) {
}
}
- if (date != null) date =
- DateTools.formatDate(date, ICSFormat.ICSUtils.DATE_FORMATS);
+ if (date != null) date = DateTools.formatDate(date,
+ ICSFormat.ICSUtils.DATE_FORMATS);
return date;
}
@@ -600,9 +602,8 @@ public String getMicroscopeManufacturer() {
public boolean getLifetime() {
final String[] kv = findValueForKey("history type");
boolean lifetime = false;
- if (kv != null &&
- (kv[1].equalsIgnoreCase("time resolved") || kv[1]
- .equalsIgnoreCase("FluorescenceLifetime")))
+ if (kv != null && (kv[1].equalsIgnoreCase("time resolved") || kv[1]
+ .equalsIgnoreCase("FluorescenceLifetime")))
{
lifetime = true;
}
@@ -689,8 +690,7 @@ public Double[] getTimestamps() {
public Hashtable getChannelNames() {
final String[] kv = findValueForKey("parameter ch");
- final Hashtable channelNames =
- new Hashtable<>();
+ final Hashtable channelNames = new Hashtable<>();
if (kv != null) {
final String[] names = kv[1].split(" ");
for (int n = 0; n < names.length; n++) {
@@ -713,8 +713,7 @@ public void addCubeChannel(final Hashtable channelNames) {
public Hashtable getPinholes() {
final String[] kv = findValueForKey("sensor s_params pinholeradius");
- final Hashtable pinholes =
- new Hashtable<>();
+ final Hashtable pinholes = new Hashtable<>();
if (kv != null) {
final String pins[] = kv[1].split(" ");
int channel = 0;
@@ -789,8 +788,7 @@ public Integer[] getEXSingleton() {
public Hashtable getWavelengths() {
final String[] kv = findValueForKey("history wavelength*");
- final Hashtable wavelengths =
- new Hashtable<>();
+ final Hashtable wavelengths = new Hashtable<>();
if (kv != null) {
final String[] waves = kv[1].split(" ");
for (int n = 0; n < waves.length; n++) {
@@ -800,13 +798,13 @@ public Hashtable getWavelengths() {
return wavelengths;
}
- public void
- addLaserWavelength(final Hashtable wavelengths)
+ public void addLaserWavelength(
+ final Hashtable wavelengths)
{
final String[] kv = findValueIteration("history laser", "wavelength");
if (kv != null) {
- final int laser =
- Integer.parseInt(kv[0].substring(13, kv[0].indexOf(" ", 13))) - 1;
+ final int laser = Integer.parseInt(kv[0].substring(13, kv[0].indexOf(
+ " ", 13))) - 1;
kv[1] = kv[1].replaceAll("nm", "").trim();
try {
wavelengths.put(new Integer(laser), new Integer(kv[1]));
@@ -969,7 +967,8 @@ public Double getExposureTime() {
* Given a list of tokens and an array of lists of regular expressions,
* tries to find a match. If no match is found, looks in OTHER_KEYS.
*/
- String[] findKeyValue(final String[] tokens, final String[][] regexesArray)
+ String[] findKeyValue(final String[] tokens,
+ final String[][] regexesArray)
{
String[] keyValue = findKeyValueForCategory(tokens, regexesArray);
if (null == keyValue) {
@@ -1042,13 +1041,13 @@ private String[] findValueForKey(final String... keys) {
* Returns an array containing the first matching key and its
* corresponding value if found, and an empty array otherwise.
*/
- private String[] findValueIteration(final String starts, final String ends)
+ private String[] findValueIteration(final String starts,
+ final String ends)
{
// TODO not sure how to represent this in the ICSUtils key tree
for (final String key : keyValPairs.keySet()) {
- if ((starts == null || key.startsWith(starts)) &&
- (ends == null || key.endsWith(ends))) return new String[] { key,
- keyValPairs.get(key) };
+ if ((starts == null || key.startsWith(starts)) && (ends == null || key
+ .endsWith(ends))) return new String[] { key, keyValPairs.get(key) };
}
return null;
@@ -1070,8 +1069,8 @@ private String[] findKeyValueForCategory(final String[] tokens,
final int splitIndex = 1 + regexes.length; // add one for
// the category
final String key = concatenateTokens(tokens, 0, splitIndex);
- final String value =
- concatenateTokens(tokens, splitIndex, tokens.length);
+ final String value = concatenateTokens(tokens, splitIndex,
+ tokens.length);
keyValue = new String[] { key, value };
break;
}
@@ -1096,13 +1095,14 @@ private String[] findKeyValueOther(final String[] tokens,
// does token match first regex?
if (tokens[i].toLowerCase().matches(regexes[0])) {
// do remaining tokens match remaining regexes?
- if (1 == regexes.length || compareTokens(tokens, i + 1, regexes, 1))
+ if (1 == regexes.length || compareTokens(tokens, i + 1, regexes,
+ 1))
{
// if so, return key/value
final int splitIndex = i + regexes.length;
final String key = concatenateTokens(tokens, 0, splitIndex);
- final String value =
- concatenateTokens(tokens, splitIndex, tokens.length);
+ final String value = concatenateTokens(tokens, splitIndex,
+ tokens.length);
keyValue = new String[] { key, value };
break;
}
@@ -1124,7 +1124,8 @@ private boolean compareTokens(final String[] tokens, final int tokenIndex,
boolean returnValue = true;
int i, j;
for (i = tokenIndex, j = regexesIndex; j < regexes.length; ++i, ++j) {
- if (i >= tokens.length || !tokens[i].toLowerCase().matches(regexes[j]))
+ if (i >= tokens.length || !tokens[i].toLowerCase().matches(
+ regexes[j]))
{
returnValue = false;
break;
@@ -1189,10 +1190,10 @@ public static class Parser extends AbstractParser {
* @return True if the provided id is a version 2 ics id.
*/
public boolean isVersionTwo(final String id) throws IOException {
- final RandomAccessInputStream f =
- new RandomAccessInputStream(getContext(), id);
- final boolean singleFile =
- f.readString(17).trim().equals("ics_version\t2.0");
+ final RandomAccessInputStream f = new RandomAccessInputStream(
+ getContext(), id);
+ final boolean singleFile = f.readString(17).trim().equals(
+ "ics_version\t2.0");
f.close();
return singleFile;
}
@@ -1207,16 +1208,16 @@ protected void typedParse(final RandomAccessInputStream stream,
{
findCompanion(stream, meta);
- final RandomAccessInputStream reader =
- new RandomAccessInputStream(getContext(), meta.getIcsId());
+ final RandomAccessInputStream reader = new RandomAccessInputStream(
+ getContext(), meta.getIcsId());
reader.seek(0);
- reader.readString(ICSUtils.NL);
- String line = reader.readString(ICSUtils.NL);
+ reader.findString(ICSUtils.NL);
+ String line = reader.findString(ICSUtils.NL);
// Extracts the key, value pairs from each line and
// inserts them into the ICSMetadata object
- while (line != null && !line.trim().equals("end") &&
- reader.getFilePointer() < reader.length() - 1)
+ while (line != null && !line.trim().equals("end") && reader
+ .getFilePointer() < reader.length() - 1)
{
line = line.trim().toLowerCase();
final String[] tokens = line.split("[ \t]");
@@ -1260,8 +1261,8 @@ protected void typedParse(final RandomAccessInputStream stream,
}
}
- line = reader.readString(ICSUtils.NL);
- }
+ line = reader.findString(ICSUtils.NL);
+ }
reader.close();
getSource().close();
@@ -1270,21 +1271,21 @@ protected void typedParse(final RandomAccessInputStream stream,
updateSource(id);
if (meta.versionTwo) {
- String s = getSource().readString(ICSUtils.NL);
+ String s = getSource().findString(ICSUtils.NL);
while (!s.trim().equals("end"))
- s = getSource().readString(ICSUtils.NL);
+ s = getSource().findString(ICSUtils.NL);
}
meta.offset = getSource().getFilePointer();
getSource().seek(0);
- meta.hasInstrumentData =
- nullKeyCheck(new String[] { "history cube emm nm",
- "history cube exc nm", "history objective NA", "history stage xyzum",
- "history objective magnification", "history objective mag",
- "history objective WorkingDistance", "history objective type",
- "history objective", "history objective immersion" });
+ meta.hasInstrumentData = nullKeyCheck(new String[] {
+ "history cube emm nm", "history cube exc nm", "history objective NA",
+ "history stage xyzum", "history objective magnification",
+ "history objective mag", "history objective WorkingDistance",
+ "history objective type", "history objective",
+ "history objective immersion" });
}
// -- Helper Methods --
@@ -1330,8 +1331,8 @@ else if (ext.equals("ids")) {
// check if we have a v2 ICS file - means there is no companion IDS
// file
- final RandomAccessInputStream f =
- new RandomAccessInputStream(getContext(), icsId);
+ final RandomAccessInputStream f = new RandomAccessInputStream(
+ getContext(), icsId);
final String version = f.readString(17).trim();
f.close();
@@ -1382,28 +1383,28 @@ protected String[] createDomainArray() {
// -- Reader API Methods --
@Override
- public ByteArrayPlane openPlane(final int imageIndex,
- final long planeIndex, final ByteArrayPlane plane, final long[] planeMin,
- final long[] planeMax, final SCIFIOConfig config) throws FormatException,
- IOException
+ public ByteArrayPlane openPlane(final int imageIndex, final long planeIndex,
+ final ByteArrayPlane plane, final Interval bounds,
+ final SCIFIOConfig config) throws FormatException, IOException
{
final Metadata meta = getMetadata();
FormatTools.checkPlaneForReading(meta, imageIndex, planeIndex, plane
- .getData().length, planeMin, planeMax);
+ .getData().length, bounds);
final int xAxis = meta.get(imageIndex).getAxisIndex(Axes.X);
final int yAxis = meta.get(imageIndex).getAxisIndex(Axes.Y);
- final int x = (int) planeMin[xAxis], y = (int) planeMin[yAxis], w =
- (int) planeMax[xAxis], h = (int) planeMax[yAxis];
- final int bpp =
- FormatTools.getBytesPerPixel(meta.get(imageIndex).getPixelType());
+ final int x = (int) bounds.min(xAxis), y = (int) bounds.min(yAxis), //
+ w = (int) bounds.dimension(xAxis), h = (int) bounds.dimension(yAxis);
+
+ final int bpp = FormatTools.getBytesPerPixel(meta.get(imageIndex)
+ .getPixelType());
final int len = (int) FormatTools.getPlaneSize(this, imageIndex);
final int rowLen = (int) FormatTools.getPlaneSize(meta, w, 1, imageIndex);
- final long[] coordinates =
- FormatTools.rasterToPosition(imageIndex, planeIndex, meta);
- final long[] prevCoordinates =
- FormatTools.rasterToPosition(imageIndex, prevPlane, meta);
+ final long[] coordinates = FormatTools.rasterToPosition(imageIndex,
+ planeIndex, meta);
+ final long[] prevCoordinates = FormatTools.rasterToPosition(imageIndex,
+ prevPlane, meta);
if (!gzip) {
getStream().seek(getMetadata().offset + planeIndex * len);
@@ -1437,9 +1438,8 @@ public ByteArrayPlane openPlane(final int imageIndex,
toSkip -= gzipStream.skip(toSkip);
}
- data =
- new byte[(int) (len * (meta.storedRGB() ? meta.get(imageIndex)
- .getAxisLength(Axes.CHANNEL) : 1))];
+ data = new byte[(int) (len * (meta.storedRGB() ? meta.get(imageIndex)
+ .getAxisLength(Axes.CHANNEL) : 1))];
int toRead = data.length;
while (toRead > 0) {
toRead -= gzipStream.read(data, data.length - toRead, toRead);
@@ -1448,53 +1448,48 @@ public ByteArrayPlane openPlane(final int imageIndex,
}
// FIXME: Why not getMetadata().getSizeC()?
- final int sizeC =
- (int) (meta.getLifetime() ? 1 : meta.get(imageIndex).getAxisLength(
- Axes.CHANNEL));
+ final int sizeC = (int) (meta.getLifetime() ? 1 : meta.get(imageIndex)
+ .getAxisLength(Axes.CHANNEL));
// FIXME: This logic needs to be reworked!
- if (!getMetadata().get(imageIndex).isMultichannel() &&
- getMetadata().storedRGB())
+ if (!getMetadata().get(imageIndex).isMultichannel() && getMetadata()
+ .storedRGB())
{
// channels are stored interleaved, but because there are more
// than we
// can display as RGB, we need to separate them
- getStream().seek(
- getMetadata().offset +
- len *
- FormatTools.positionToRaster(0, this, new long[] { coordinates[0],
- 0, coordinates[2] }));
+ getStream().seek(getMetadata().offset + len * FormatTools
+ .positionToRaster(0, this, new long[] { coordinates[0], 0,
+ coordinates[2] }));
if (!gzip && data == null) {
- data =
- new byte[(int) (len * getMetadata().get(imageIndex).getAxisLength(
- Axes.CHANNEL))];
+ data = new byte[(int) (len * getMetadata().get(imageIndex)
+ .getAxisLength(Axes.CHANNEL))];
getStream().read(data);
}
- else if (!gzip &&
- (coordinates[0] != prevCoordinates[0] || coordinates[2] != prevCoordinates[2]))
+ else if (!gzip && (coordinates[0] != prevCoordinates[0] ||
+ coordinates[2] != prevCoordinates[2]))
{
getStream().read(data);
}
for (int row = y; row < h + y; row++) {
for (int col = x; col < w + x; col++) {
- final int src =
- (int) (bpp * ((planeIndex % meta.get(imageIndex).getAxisLength(
- Axes.CHANNEL)) + sizeC *
- (row * (row * meta.get(imageIndex).getAxisLength(Axes.X) + col))));
+ final int src = (int) (bpp * ((planeIndex % meta.get(imageIndex)
+ .getAxisLength(Axes.CHANNEL)) + sizeC * (row * (row * meta.get(
+ imageIndex).getAxisLength(Axes.X) + col))));
final int dest = bpp * ((row - y) * w + (col - x));
System.arraycopy(data, src, plane.getBytes(), dest, bpp);
}
}
}
else if (gzip) {
- final RandomAccessInputStream s =
- new RandomAccessInputStream(getContext(), data);
- readPlane(s, imageIndex, planeMin, planeMax, plane);
+ final RandomAccessInputStream s = new RandomAccessInputStream(
+ getContext(), data);
+ readPlane(s, imageIndex, bounds, plane);
s.close();
}
else {
- readPlane(getStream(), imageIndex, planeMin, planeMax, plane);
+ readPlane(getStream(), imageIndex, bounds, plane);
}
if (invertY) {
@@ -1503,8 +1498,8 @@ else if (gzip) {
final int topOffset = r * rowLen;
final int bottomOffset = (h - r - 1) * rowLen;
System.arraycopy(plane.getBytes(), topOffset, row, 0, rowLen);
- System.arraycopy(plane.getBytes(), bottomOffset, plane.getBytes(), topOffset,
- rowLen);
+ System.arraycopy(plane.getBytes(), bottomOffset, plane.getBytes(),
+ topOffset, rowLen);
System.arraycopy(row, 0, plane.getBytes(), bottomOffset, rowLen);
}
}
@@ -1595,54 +1590,52 @@ protected String[] makeCompressionTypes() {
@Override
protected void initialize(final int imageIndex, final long planeIndex,
- final long[] planeMin, final long[] planeMax) throws FormatException,
- IOException
+ final Interval bounds) throws FormatException, IOException
{
if (!isInitialized(imageIndex, (int) planeIndex)) {
if (!SCIFIOMetadataTools.wholePlane(imageIndex, getMetadata(),
- planeMin, planeMax))
+ bounds))
{
- pixels.seek(pixelOffset + (planeIndex + 1) *
- getMetadata().get(imageIndex).getPlaneSize());
+ pixels.seek(pixelOffset + (planeIndex + 1) * getMetadata().get(
+ imageIndex).getPlaneSize());
}
}
- super.initialize(imageIndex, planeIndex, planeMin, planeMax);
+ super.initialize(imageIndex, planeIndex, bounds);
}
// -- Writer API Methods --
@Override
public void writePlane(final int imageIndex, final long planeIndex,
- final Plane plane, final long[] planeMin, final long[] planeMax)
- throws FormatException, IOException
+ final Plane plane, final Interval bounds) throws FormatException,
+ IOException
{
- checkParams(imageIndex, planeIndex, plane.getBytes(), planeMin, planeMax);
+ checkParams(imageIndex, planeIndex, plane.getBytes(), bounds);
final Metadata meta = getMetadata();
- final boolean interleaved =
- plane.getImageMetadata().getInterleavedAxisCount() > 0;
+ final boolean interleaved = plane.getImageMetadata()
+ .getInterleavedAxisCount() > 0;
final int xAxis = meta.get(imageIndex).getAxisIndex(Axes.X);
final int yAxis = meta.get(imageIndex).getAxisIndex(Axes.Y);
- final int x = (int) planeMin[xAxis], y = (int) planeMin[yAxis], w =
- (int) planeMax[xAxis], h = (int) planeMax[yAxis];
-
+ final int x = (int) bounds.min(xAxis), y = (int) bounds.min(yAxis), //
+ w = (int) bounds.dimension(xAxis), h = (int) bounds.dimension(yAxis);
int rgbChannels = 1;
if (meta.get(imageIndex).isMultichannel()) {
final int cIndex = meta.get(imageIndex).getAxisIndex(Axes.CHANNEL);
- rgbChannels = (int) (planeMax[cIndex] - planeMin[cIndex]);
+ rgbChannels = (int) (bounds.dimension(cIndex));
}
final int sizeX = (int) meta.get(imageIndex).getAxisLength(Axes.X);
final int pixelType = getMetadata().get(imageIndex).getPixelType();
final int bytesPerPixel = FormatTools.getBytesPerPixel(pixelType);
- final int planeSize =
- (int) (meta.get(0).getSize() / meta.get(0).getPlaneCount());
+ final int planeSize = (int) (meta.get(0).getSize() / meta.get(0)
+ .getPlaneCount());
pixels.seek(pixelOffset + planeIndex * planeSize);
- if (SCIFIOMetadataTools.wholePlane(imageIndex, meta, planeMin, planeMax) &&
+ if (SCIFIOMetadataTools.wholePlane(imageIndex, meta, bounds) &&
(interleaved || rgbChannels == 1))
{
pixels.write(plane.getBytes());
@@ -1653,9 +1646,8 @@ public void writePlane(final int imageIndex, final long planeIndex,
final ByteArrayOutputStream strip = new ByteArrayOutputStream();
for (int col = 0; col < w; col++) {
for (int c = 0; c < rgbChannels; c++) {
- final int index =
- interleaved ? rgbChannels * (row * w + col) + c : w *
- (c * h + row) + col;
+ final int index = interleaved ? rgbChannels * (row * w + col) + c
+ : w * (c * h + row) + col;
strip.write(plane.getBytes(), index * bytesPerPixel,
bytesPerPixel);
}
@@ -1675,9 +1667,9 @@ public boolean canDoStacks() {
@Override
public int[] getPixelTypes(final String codec) {
- return new int[] { FormatTools.INT8, FormatTools.UINT8,
- FormatTools.INT16, FormatTools.UINT16, FormatTools.INT32,
- FormatTools.UINT32, FormatTools.FLOAT };
+ return new int[] { FormatTools.INT8, FormatTools.UINT8, FormatTools.INT16,
+ FormatTools.UINT16, FormatTools.INT32, FormatTools.UINT32,
+ FormatTools.FLOAT };
}
public void close(final int imageIndex) throws IOException {
@@ -1749,8 +1741,8 @@ public void setDest(final RandomAccessOutputStream out,
final int imageIndex, final SCIFIOConfig config) throws FormatException,
IOException
{
- final String currentId =
- getMetadata().idsId != null ? getMetadata().idsId : getMetadata().icsId;
+ final String currentId = getMetadata().idsId != null ? getMetadata().idsId
+ : getMetadata().icsId;
super.setDest(out, imageIndex, config);
@@ -1783,13 +1775,14 @@ public void setDest(final RandomAccessOutputStream out,
out.writeBytes("representation\tformat\t" +
(pixelType == FormatTools.FLOAT ? "real\n" : "integer\n"));
- out.writeBytes("representation\tsign\t" +
- (signed ? "signed\n" : "unsigned\n"));
+ out.writeBytes("representation\tsign\t" + (signed ? "signed\n"
+ : "unsigned\n"));
out.writeBytes("representation\tcompression\tuncompressed\n");
out.writeBytes("representation\tbyte_order\t");
for (int i = 0; i < sizes[0] / 8; i++) {
- if ((littleEndian && (sizes[0] < 32 || pixelType == FormatTools.FLOAT)) ||
- (!littleEndian && sizes[0] >= 32 && pixelType != FormatTools.FLOAT))
+ if ((littleEndian && (sizes[0] < 32 ||
+ pixelType == FormatTools.FLOAT)) || (!littleEndian &&
+ sizes[0] >= 32 && pixelType != FormatTools.FLOAT))
{
out.writeBytes((i + 1) + "\t");
}
@@ -1825,8 +1818,8 @@ else if (axis.type() == Axes.TIME) {
pixelOffset = out.getFilePointer();
}
else if (FormatTools.checkSuffix(currentId, "ics")) {
- final RandomAccessInputStream in =
- new RandomAccessInputStream(getContext(), currentId);
+ final RandomAccessInputStream in = new RandomAccessInputStream(
+ getContext(), currentId);
in.findString("\nend\n");
pixelOffset = in.getFilePointer();
in.close();
@@ -1845,15 +1838,14 @@ else if (FormatTools.checkSuffix(currentId, "ics")) {
/* Sets the ICS Metadta icsId and idsId fields */
private void updateMetadataIds(final String id) {
- getMetadata().idsId =
- FormatTools.checkSuffix(id, "ids") ? id : makeIdsId(id);
- getMetadata().icsId =
- FormatTools.checkSuffix(id, "ics") ? id : makeIcsId(id);
+ getMetadata().idsId = FormatTools.checkSuffix(id, "ids") ? id : makeIdsId(
+ id);
+ getMetadata().icsId = FormatTools.checkSuffix(id, "ics") ? id : makeIcsId(
+ id);
}
- private int[]
- overwriteDimensions(final Metadata meta, final int imageIndex)
- throws IOException
+ private int[] overwriteDimensions(final Metadata meta, final int imageIndex)
+ throws IOException
{
getStream().seek(dimensionOffset);
// final int sizeX = (int) meta.getAxisLength(imageIndex, Axes.X);
@@ -1871,15 +1863,15 @@ private void updateMetadataIds(final String id) {
if (meta.get(imageIndex).isMultichannel()) {
dimOrder.append("ch\t");
- sizes[nextSize++] =
- (int) (meta.get(imageIndex).getAxisLength(Axes.CHANNEL));
+ sizes[nextSize++] = (int) (meta.get(imageIndex).getAxisLength(
+ Axes.CHANNEL));
}
for (final CalibratedAxis axis : meta.get(imageIndex).getAxes()) {
if (axis.type() == Axes.CHANNEL) {
if (dimOrder.indexOf("ch") == -1) {
- sizes[nextSize++] =
- (int) meta.get(imageIndex).getAxisLength(Axes.CHANNEL);
+ sizes[nextSize++] = (int) meta.get(imageIndex).getAxisLength(
+ Axes.CHANNEL);
dimOrder.append("ch");
}
else {
@@ -1887,20 +1879,21 @@ private void updateMetadataIds(final String id) {
}
}
else {
- sizes[nextSize++] =
- (int) meta.get(imageIndex).getAxisLength(axis.type());
+ sizes[nextSize++] = (int) meta.get(imageIndex).getAxisLength(axis
+ .type());
dimOrder.append(String.valueOf(axis.type().getLabel().charAt(0))
.toLowerCase());
}
dimOrder.append("\t");
}
- getStream().writeBytes(
- "layout\torder\tbits\t" + dimOrder.toString() + "\n");
+ getStream().writeBytes("layout\torder\tbits\t" + dimOrder.toString() +
+ "\n");
getStream().writeBytes("layout\tsizes\t");
for (final int size : sizes) {
getStream().writeBytes(size + "\t");
}
- while ((getStream().getFilePointer() - dimensionOffset) < dimensionLength - 1)
+ while ((getStream().getFilePointer() -
+ dimensionOffset) < dimensionLength - 1)
{
getStream().writeBytes(" ");
}
@@ -1937,8 +1930,8 @@ public static class ICSUtils {
// -- Constants --
- /** Newline characters. */
- public static final String NL = "\r\n";
+ /** Newline terminator sequences. */
+ private static final String[] NL = {"\n", "\r\n"};
public static final String LEAF = "VALID_LEAF";
@@ -2107,64 +2100,67 @@ public void translateImageMetadata(final List source,
// only the keyValPairs will be modified
Hashtable keyValPairs = null;
- if (dest.getKeyValPairs() == null) keyValPairs =
- new Hashtable<>();
+ if (dest.getKeyValPairs() == null) keyValPairs = new Hashtable<>();
else keyValPairs = dest.getKeyValPairs();
final int numAxes = source.get(0).getAxes().size();
String order = "";
String sizes = "";
+ String units = "";
for (int i = 0; i < numAxes; i++) {
- final AxisType axis = source.get(0).getAxis(i).type();
+ CalibratedAxis axis = source.get(0).getAxis(i);
+ final AxisType axisType = axis.type();
// flag for RGB images
- if (axis.equals(Axes.X)) {
+ if (axisType.equals(Axes.X)) {
order += "x";
}
- else if (axis.equals(Axes.Y)) {
+ else if (axisType.equals(Axes.Y)) {
order += "y";
}
- else if (axis.equals(Axes.Z)) {
+ else if (axisType.equals(Axes.Z)) {
order += "z";
}
- else if (axis.equals(Axes.TIME)) {
+ else if (axisType.equals(Axes.TIME)) {
order += "t";
}
- else if (axis.equals(Axes.CHANNEL)) {
+ else if (axisType.equals(Axes.CHANNEL)) {
// ICS flag for RGB images
if (source.get(0).isMultichannel()) {
order = "c " + order;
sizes = source.get(0).getAxisLength(i) + " " + sizes;
+ units += axis.unit() + " ";
continue;
}
order += "c";
}
- else if (axis.equals(SCIFIOAxes.PHASE)) {
+ else if (axisType.equals(SCIFIOAxes.PHASE)) {
order += "p";
}
- else if (axis.equals(SCIFIOAxes.FREQUENCY)) {
+ else if (axisType.equals(SCIFIOAxes.FREQUENCY)) {
order += "f";
}
else {
- if (axis.getLabel().equals("bits")) order += "bits";
+ if (axisType.getLabel().equals("bits")) order += "bits";
else order += "u";
}
order += " ";
sizes += source.get(0).getAxisLength(i) + " ";
+ units += axis.unit() + " ";
}
keyValPairs.put("layout sizes", sizes);
keyValPairs.put("layout order", order);
- keyValPairs.put("layout significant_bits", "" +
- source.get(0).getBitsPerPixel());
+ keyValPairs.put("layout significant_bits", "" + source.get(0)
+ .getBitsPerPixel());
- if (source.get(0).getAxisLength(SCIFIOAxes.LIFETIME) > 1) keyValPairs
- .put("history type", "time resolved");
+ if (source.get(0).getAxisLength(SCIFIOAxes.LIFETIME) > 1) keyValPairs.put(
+ "history type", "time resolved");
boolean signed = false;
boolean fPoint = false;
@@ -2201,7 +2197,7 @@ else if (axis.equals(SCIFIOAxes.FREQUENCY)) {
}
keyValPairs.put("representation byte_order", byteOrder);
-
+
final List axes = source.get(0).getAxes();
String scale = "";