diff --git a/src/main/java/org/janelia/saalfeldlab/n5/universe/metadata/ome/ngff/v05/TransformUtils.java b/src/main/java/org/janelia/saalfeldlab/n5/universe/metadata/ome/ngff/v05/TransformUtils.java index 39d0824..4b88c3c 100644 --- a/src/main/java/org/janelia/saalfeldlab/n5/universe/metadata/ome/ngff/v05/TransformUtils.java +++ b/src/main/java/org/janelia/saalfeldlab/n5/universe/metadata/ome/ngff/v05/TransformUtils.java @@ -31,8 +31,11 @@ public class TransformUtils { - public static double[][] affineToMatrix( final AffineGet affine ) - { + public static double[][] affineToMatrix( final AffineGet affine ) { + + if (affine == null) + return null; + // AffineGets always have numSourceDimensions == numTargetDimensions final int N = affine.numSourceDimensions(); final double[][] mtx = new double[N][N+1]; diff --git a/src/main/java/org/janelia/saalfeldlab/n5/universe/metadata/ome/ngff/v05/transformations/AffineCoordinateTransform.java b/src/main/java/org/janelia/saalfeldlab/n5/universe/metadata/ome/ngff/v05/transformations/AffineCoordinateTransform.java index 57e38cb..1c57725 100644 --- a/src/main/java/org/janelia/saalfeldlab/n5/universe/metadata/ome/ngff/v05/transformations/AffineCoordinateTransform.java +++ b/src/main/java/org/janelia/saalfeldlab/n5/universe/metadata/ome/ngff/v05/transformations/AffineCoordinateTransform.java @@ -14,14 +14,13 @@ public AffineCoordinateTransform( BaseLinearCoordinateTransform ct ) } public AffineCoordinateTransform( final double[] affine) { - super("affine"); - this.affineFlat = affine; - buildTransform(affine ); + super("affine", affine); + buildTransform(affine); } public AffineCoordinateTransform( final String name, final String inputSpace, final String outputSpace, final double[] affine) { - super("affine", name, inputSpace, outputSpace ); + super("affine", name, inputSpace, outputSpace, affine ); this.affineFlat = affine; buildTransform( affine ); } @@ -36,13 +35,12 @@ public AffineCoordinateTransform(final String name, final N5Reader n5, final Str public AffineCoordinateTransform( final String name, final String[] inputAxes, final String[] outputAxes, final double[] affine ) { - super("affine", name, inputAxes, outputAxes ); - this.affineFlat = affine; + super("affine", name, inputAxes, outputAxes, affine ); } public AffineCoordinateTransform( final String name, final String path, final String inputSpace, final String outputSpace) { - super(name, path, inputSpace, outputSpace ); + super("affine", name, path, inputSpace, outputSpace ); } public JsonElement getJsonParameter() { diff --git a/src/main/java/org/janelia/saalfeldlab/n5/universe/metadata/ome/ngff/v05/transformations/BaseLinearCoordinateTransform.java b/src/main/java/org/janelia/saalfeldlab/n5/universe/metadata/ome/ngff/v05/transformations/BaseLinearCoordinateTransform.java index dc53d94..1d4be8d 100644 --- a/src/main/java/org/janelia/saalfeldlab/n5/universe/metadata/ome/ngff/v05/transformations/BaseLinearCoordinateTransform.java +++ b/src/main/java/org/janelia/saalfeldlab/n5/universe/metadata/ome/ngff/v05/transformations/BaseLinearCoordinateTransform.java @@ -3,6 +3,7 @@ import org.janelia.saalfeldlab.n5.N5Reader; import org.janelia.saalfeldlab.n5.universe.metadata.ome.ngff.v05.TransformUtils; +import com.google.gson.Gson; import com.google.gson.JsonArray; import com.google.gson.JsonElement; @@ -24,6 +25,13 @@ public BaseLinearCoordinateTransform(final String type) { super(type); } + public BaseLinearCoordinateTransform(final String type, final double[] affineFlat) { + + super(type); + this.affineFlat = affineFlat; + buildJsonParameter(); + } + public BaseLinearCoordinateTransform( final BaseLinearCoordinateTransform other ) { super(other.type, other.path); this.affine = other.affine; @@ -32,20 +40,38 @@ public BaseLinearCoordinateTransform( final BaseLinearCoordinateTransform oth this.name = other.name; this.input = other.input; this.output = other.output; + buildJsonParameter(); } - public BaseLinearCoordinateTransform( final String type, final String name, final String inputSpace, final String outputSpace) { - super(type, name, null, inputSpace, outputSpace ); + public BaseLinearCoordinateTransform(final String type, final String name, final String inputSpace, final String outputSpace) { + + super(type, name, null, inputSpace, outputSpace); + } + + public BaseLinearCoordinateTransform(final String type, final String name, final String inputSpace, final String outputSpace, final double[] affineFlat) { + + super(type, name, null, inputSpace, outputSpace); + this.affineFlat = affineFlat; + buildJsonParameter(); } public BaseLinearCoordinateTransform(final String type, final String name, final N5Reader n5, final String path, final String inputSpace, final String outputSpace) { - super(type, name, path, inputSpace, outputSpace ); + + super(type, name, path, inputSpace, outputSpace); } - public BaseLinearCoordinateTransform( final String type, final String name, + public BaseLinearCoordinateTransform(final String type, final String name, final String[] inputAxes, final String[] outputAxes) { + + super(type, name, null, inputAxes, outputAxes); + } + + public BaseLinearCoordinateTransform( final String type, final String name, + final String[] inputAxes, final String[] outputAxes, final double[] affineFlat) { super(type, name, null, inputAxes, outputAxes ); + this.affineFlat = affineFlat; + buildJsonParameter(); } public BaseLinearCoordinateTransform( final String type, final String name, final String path, @@ -58,6 +84,12 @@ public JsonElement getJsonParameter() { return affine; } + protected void buildJsonParameter() { + + if( affineFlat != null ) + affine = new Gson().toJsonTree(affineFlat); + } + public void interpretParameters() { if (!affine.isJsonArray()) @@ -114,6 +146,9 @@ public T buildTransform(double[] parameters) { @Override public double[] getParameters(N5Reader n5) { + if (n5 == null) + return null; + final double[] paramsFlat = getDoubleArray(n5, getParameterPath()); if (paramsFlat != null) return paramsFlat;