Skip to content
Open
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
17 changes: 17 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
**/.classpath
**/.project
**/.settings
**/target
.DS_Store
.classpath
.project
.settings
.factorypath
.idea
target
*.iml
*.class
*~
*.orig
# For Fiji #
*.jar
90 changes: 90 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>ome</groupId>
<artifactId>ome-ngff-java</artifactId>
<version>0.0.0-SNAPSHOT</version>

<url>https://github.com/ome/ome-ngff-java</url>
<name>OME NGFF Java</name>
<description>Java code for OME NGFF metadata</description>
<inceptionYear>2022</inceptionYear>
<organization>
<name>Open Microscopy Environment</name>
<url>http://www.openmicroscopy.org/</url>
</organization>
<issueManagement>
<system>Trac</system>
<url>https://trac.openmicroscopy.org/ome</url>
</issueManagement>
<licenses>
<license>
<!-- TODO -->
<name>???</name>
<distribution>repo</distribution>
</license>
</licenses>
<developers>
<!-- TODO -->
<developer>
<id>tischi</id>
<name>Christian Tischer</name>
<roles>
<role>lead</role>
<role>developer</role>
<role>debugger</role>
<role>reviewer</role>
<role>support</role>
<role>maintainer</role>
</roles>
</developer>
</developers>
<contributors>
</contributors>
<mailingLists>
<!-- TODO -->
</mailingLists>
<properties>
<!-- TODO -->
</properties>

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.0</version>
<configuration>
<argLine>-Xmx4024m</argLine>
</configuration>
</plugin>
</plugins>
</build>

<repositories>
<repository>
<id>central</id>
<name>Central Repository</name>
<url>https://repo.maven.apache.org/maven2</url>
</repository>
<repository>
<id>ome</id>
<name>OME Artifactory</name>
<url>https://artifacts.openmicroscopy.org/artifactory/maven/</url>
</repository>
</repositories>

<dependencies>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>10.0.1</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.9.1</version>
</dependency>
</dependencies>
</project>
127 changes: 127 additions & 0 deletions src/main/java/ome/ngff/MultiscalesV04.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
package ome.ngff;

import com.google.common.collect.Lists;
import com.google.gson.JsonElement;

import java.util.Arrays;
import java.util.List;

public class MultiscalesV04
{
// key in json for multiscales
public static final String MULTI_SCALE_KEY = "multiscales";

// Serialisation
private String version;
private String name;
private String type;
private Axis[] axes; // from v0.4+ within JSON
private Dataset[] datasets;
private CoordinateTransformations[] coordinateTransformations; // from v0.4+ within JSON

// Runtime

// Simply contains the {@codeAxes[] axes}
// but in reversed order to accommodate
// the Java array ordering of the image data.
private List< Axis > axisList;
private int numDimensions;

public MultiscalesV04() {
}

public static class Dataset {
public String path;
public CoordinateTransformations[] coordinateTransformations;
}

public static class CoordinateTransformations {
public String type;
public double[] scale;
public double[] translation;
public String path;
}

public static class Axis
{
public static final String CHANNEL_TYPE = "channel";
public static final String TIME_TYPE = "time";
public static final String SPATIAL_TYPE = "space";

public String name;
public String type;
public String unit;
}

public void init()
{
axisList = Lists.reverse( Arrays.asList( axes ) );
numDimensions = axisList.size();
}

// TODO Can this be done with a JSONAdapter ?
public void applyVersionFixes( JsonElement multiscales )
{
String version = multiscales.getAsJsonObject().get("version").getAsString();
if ( version.equals("0.3") ) {
JsonElement axes = multiscales.getAsJsonObject().get("axes");
// FIXME
// - populate Axes[]
// - populate coordinateTransformations[]
throw new RuntimeException("Parsing version 0.3 not yet implemented.");
} else if ( version.equals("0.4") ) {
// This should just work automatically
} else {
JsonElement axes = multiscales.getAsJsonObject().get("axes");
// FIXME
// - populate Axes[]
// - populate coordinateTransformations[]
throw new RuntimeException("Parsing version "+ version + " is not yet implemented.");
}
}

public int getChannelAxisIndex()
{
for ( int d = 0; d < numDimensions; d++ )
if ( axisList.get( d ).type.equals( Axis.CHANNEL_TYPE ) )
return d;
return -1;
}

public int getTimePointAxisIndex()
{
for ( int d = 0; d < numDimensions; d++ )
if ( axisList.get( d ).type.equals( Axis.TIME_TYPE ) )
return d;
return -1;
}

public int getSpatialAxisIndex( String axisName )
{
for ( int d = 0; d < numDimensions; d++ )
if ( axisList.get( d ).type.equals( Axis.SPATIAL_TYPE )
&& axisList.get( d ).name.equals( axisName ) )
return d;
return -1;
}

public List< Axis > getAxes()
{
return axisList;
}

public CoordinateTransformations[] getCoordinateTransformations()
{
return coordinateTransformations;
}

public Dataset[] getDatasets()
{
return datasets;
}

public int numDimensions()
{
return numDimensions;
}
}