Skip to content
Closed
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
2 changes: 1 addition & 1 deletion .github/workflows/build-main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ jobs:
sudo apt-get update
sudo apt-get install -y libblosc1
- name: Set up Java
uses: actions/setup-java@v3
uses: actions/setup-java@v4
with:
java-version: '8'
distribution: 'zulu'
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/build-pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ jobs:
sudo apt-get update
sudo apt-get install -y libblosc1
- name: Set up Java
uses: actions/setup-java@v3
uses: actions/setup-java@v4
with:
java-version: '8'
distribution: 'zulu'
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/platform-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ jobs:
pip install blosc --no-input --target src/test/resources
mv src/test/resources/lib64/* src/test/resources
- name: Set up Java
uses: actions/setup-java@v2
uses: actions/setup-java@v4
with:
java-version: '8'
distribution: 'zulu'
Expand Down
21 changes: 12 additions & 9 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@
<parent>
<groupId>org.scijava</groupId>
<artifactId>pom-scijava</artifactId>
<version>38.0.1</version>
<version>43.0.0</version>
</parent>

<groupId>org.janelia.saalfeldlab</groupId>
<artifactId>n5-viewer_fiji</artifactId>
<version>6.1.3-SNAPSHOT</version>
<version>6.1.3-alpha-4-SNAPSHOT</version>

<name>N5 Viewer for Fiji</name>
<description>BigDataViewer-based visualization tool for N5 datasets</description>
Expand Down Expand Up @@ -134,13 +134,16 @@
<bigdataviewer-core.version>10.6.1</bigdataviewer-core.version>
<bigdataviewer-vistools.version>1.0.0-beta-36</bigdataviewer-vistools.version>

<imglib2.version>7.1.1</imglib2.version>
<n5.version>3.3.0</n5.version>
<n5-aws-s3.version>4.2.1</n5-aws-s3.version>
<n5-google-cloud.version>4.1.1</n5-google-cloud.version>
<n5-ij.version>4.2.5</n5-ij.version>
<n5-imglib2.version>7.0.2</n5-imglib2.version>
<n5-universe.version>1.6.0</n5-universe.version>
<n5.version>4.0.0-alpha-10</n5.version>
<n5-aws-s3.version>4.4.0-alpha-7</n5-aws-s3.version>
<n5-blosc.version>2.0.0-alpha-4</n5-blosc.version>
<n5-google-cloud.version>5.2.0-alpha-6</n5-google-cloud.version>
<n5-hdf5.version>2.3.0-alpha-6</n5-hdf5.version>
<n5-ij.version>4.5.0-alpha-6</n5-ij.version>
<n5-imglib2.version>7.1.0-alpha-7</n5-imglib2.version>
<n5-universe.version>2.4.0-alpha-7</n5-universe.version>
<n5-zarr.version>2.0.0-alpha-7</n5-zarr.version>
<n5-zstandard.version>2.0.0-alpha-4</n5-zstandard.version>
</properties>

<dependencies>
Expand Down
9 changes: 8 additions & 1 deletion src/main/java/org/janelia/saalfeldlab/n5/bdv/N5Viewer.java
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@
import org.janelia.saalfeldlab.n5.universe.metadata.ome.ngff.v04.NgffSingleScaleAxesMetadata;
import org.janelia.saalfeldlab.n5.universe.metadata.ome.ngff.v04.OmeNgffMetadata;
import org.janelia.saalfeldlab.n5.universe.metadata.ome.ngff.v04.OmeNgffMultiScaleMetadata;
import org.janelia.saalfeldlab.n5.universe.metadata.ome.ngff.v05.OmeNgffV05Metadata;
import org.scijava.ui.behaviour.io.InputTriggerConfig;
import org.scijava.ui.behaviour.util.Actions;
import org.scijava.ui.behaviour.util.InputActionBindings;
Expand Down Expand Up @@ -543,6 +544,12 @@ public static <T extends NumericType<T> & NativeType<T>, V extends Volatile<T> &
.sort(multiScaleDataset.getPaths(), multiScaleDataset.spatialTransforms3d());
datasetsToOpen = msd.getPaths();
transforms = msd.getTransforms();
} else if (metadata instanceof OmeNgffV05Metadata) {
final OmeNgffV05Metadata multiScaleDataset = (OmeNgffV05Metadata)metadata;
final MultiscaleDatasets msd = MultiscaleDatasets
.sort(multiScaleDataset.getPaths(), multiScaleDataset.spatialTransforms3d());
datasetsToOpen = msd.getPaths();
transforms = msd.getTransforms();
} else if (metadata instanceof N5CosemMultiScaleMetadata) {
final N5CosemMultiScaleMetadata multiScaleDataset = (N5CosemMultiScaleMetadata)metadata;
final MultiscaleDatasets msd = MultiscaleDatasets
Expand Down Expand Up @@ -722,7 +729,7 @@ protected static <T extends NumericType<T> & NativeType<T>> RandomAccessibleInte
final N5Reader n5, final String dataset) {

final CachedCellImg<?, ?> img = N5Utils.openVolatile(n5, dataset);
final Object t = Util.getTypeFromInterval(img);
final Object t = img.getType();
if( t instanceof LabelMultisetType ) {

final CachedCellImg<LabelMultisetType, ?> lmsImg = (CachedCellImg<LabelMultisetType, ?>)img;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,20 @@
package org.janelia.saalfeldlab.n5.bdv;

import java.io.IOException;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.function.Consumer;

import javax.swing.JTree;

import org.janelia.saalfeldlab.n5.ij.N5Importer;
import org.janelia.saalfeldlab.n5.metadata.N5ViewerMultichannelMetadata;
import org.janelia.saalfeldlab.n5.metadata.imagej.ImagePlusLegacyMetadataParser;
import org.janelia.saalfeldlab.n5.ui.DataSelection;
import org.janelia.saalfeldlab.n5.ui.DatasetSelectorDialog;
import org.janelia.saalfeldlab.n5.ui.N5SwingTreeNode;
import org.janelia.saalfeldlab.n5.universe.metadata.N5CosemMetadataParser;
import org.janelia.saalfeldlab.n5.universe.metadata.N5CosemMultiScaleMetadata;
import org.janelia.saalfeldlab.n5.universe.metadata.N5GenericSingleScaleMetadataParser;
Expand All @@ -18,6 +23,7 @@
import org.janelia.saalfeldlab.n5.universe.metadata.N5ViewerMultiscaleMetadataParser;
import org.janelia.saalfeldlab.n5.universe.metadata.canonical.CanonicalMetadataParser;
import org.janelia.saalfeldlab.n5.universe.metadata.ome.ngff.v04.OmeNgffMetadataParser;
import org.janelia.saalfeldlab.n5.universe.metadata.ome.ngff.v05.OmeNgffV05MetadataParser;

import ij.ImageJ;

Expand All @@ -33,6 +39,7 @@
public class N5ViewerCreator {

public static final N5MetadataParser<?>[] n5vGroupParsers = new N5MetadataParser[]{
new OmeNgffV05MetadataParser(),
new OmeNgffMetadataParser(),
new N5CosemMultiScaleMetadata.CosemMultiScaleParser(),
new N5ViewerMultiscaleMetadataParser(),
Expand All @@ -50,6 +57,8 @@ public class N5ViewerCreator {
new N5GenericSingleScaleMetadataParser()
};

private DatasetSelectorDialog dialog;

private String lastOpenedContainer = "";

final public static void main(final String... args) {
Expand Down Expand Up @@ -112,7 +121,7 @@ public void openViewer(
final Consumer<Void> cancelConsumer) {

final ExecutorService exec = Executors.newFixedThreadPool(ij.Prefs.getThreads());
final DatasetSelectorDialog dialog = new DatasetSelectorDialog(
dialog = new DatasetSelectorDialog(
new N5Importer.N5ViewerReaderFun(),
new N5Importer.N5BasePathFun(),
lastOpenedContainer,
Expand All @@ -138,4 +147,52 @@ public void openViewer(
}
});
}

public void runWithDialog(final String pathToContainer, final List<String> selectThisSubPath) {

lastOpenedContainer = pathToContainer;
dialog = null;
openViewer((e) -> e.printStackTrace());
if (dialog == null) {
throw new RuntimeException("The \"Open N5\" didn't come up when it should.");
} else {
dialog.detectDatasets();
if (selectThisSubPath != null) {
boolean isDiscoveryFinished = dialog.waitUntilDiscoveryIsFinished(60000);
if (isDiscoveryFinished)
selectTreeItem(selectThisSubPath);
}
}
}

public void runWithDialog( final String pathToContainer )
{
runWithDialog( pathToContainer, Throwable::printStackTrace );
}

public void runWithDialog( final String pathToContainer, final Consumer< Exception > exceptionHandler )
{
lastOpenedContainer = pathToContainer;
dialog = null;
openViewer( exceptionHandler );
dialog.openContainer( pathToContainer );
}

private void selectTreeItem(final List<String> itemPath) {

final JTree t = dialog.getJTree();
int currRow = 0;
for (String subPath : itemPath) {
for (int r = currRow; r < t.getRowCount(); ++r, ++currRow) {
N5SwingTreeNode n = (N5SwingTreeNode)t.getPathForRow(r).getLastPathComponent();
if (n.getNodeName().equals(subPath)) {
t.expandRow(r);
t.setSelectionRow(r);
++currRow;
break;
}
}
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import org.janelia.saalfeldlab.n5.universe.N5DatasetDiscoverer;
import org.janelia.saalfeldlab.n5.universe.N5Factory;
import org.janelia.saalfeldlab.n5.universe.N5TreeNode;
import org.janelia.saalfeldlab.n5.universe.StorageFormat;
import org.janelia.saalfeldlab.n5.universe.metadata.N5Metadata;
import org.janelia.saalfeldlab.n5.universe.metadata.NgffTests;
import org.junit.After;
Expand Down Expand Up @@ -83,11 +84,10 @@ protected String tempN5Location() throws URISyntaxException {
@Test
public void testPermutations() throws IOException {

final N5Writer zarr = new N5Factory().openWriter(containerUri.toString());
final N5Writer zarr = new N5Factory().openWriter(StorageFormat.ZARR2, containerUri.toString());
// don't check every axis permutation, but some relevant ones, and some strange ones
final String[] names = new String[]{

// TODO five still don't work
"xyz", "zyx", "yzx",
"xyc", "xcy", "cyx",
"xyt", "xty", "tyx",
Expand Down Expand Up @@ -145,10 +145,6 @@ protected <T extends NumericType<T> & NativeType<T>> void writeAndTest(final N5W
final AffineTransform3D tform = new AffineTransform3D();
src.getSourceTransform(0, 0, tform);

// System.out.println("");
// System.out.println("" + sourcesAndConverters.size());
// System.out.println("");

// test
assertEquals(dset + "size x", NgffTests.NX, dims[0]);
assertEquals(dset + "size y", NgffTests.NY, dims[1]);
Expand Down