Giter VIP home page Giter VIP logo

platybrowser-project's Introduction

DOI

PlatyBrowser

This repository contains the data and the scripts for data generation for the PlatyBrowser, a resource for exploring a full EM volume of a 6 day old Platynereis larva combined with a gene expression atlas and tissue, cellular and ultra-structure segmentations. For details, see Whole-body integration of gene expression and single-cell morphology. It is implemented using MoBIE, a platform for exploring and sharing multi-modal big image data.

Data storage

Image meta-data and derived data is stored in the folder data. In order to deal with changes to this data, we follow a versioning scheme inspired by semantic versioning. Version numbers are given as MAJOR.MINOR.PATCH where

  • PATCH is increased if the derived data is updated, e.g. due to corrections in a segmentation or new attributes in a table.
  • MINOR is increased if new derived data is added, e.g. a new segmentation or a new table is added.
  • MAJOR is increased if a new modality is added, e.g. data from a different imaging source or a different specimen.

For a given version X.Y.Z, the data is stored in the directory data/X.Y.Z which contains the following subfolders:

  • images: Contains meta-data for all images in bigdata-viewer xml format. The actual image data (stored either as hdf5 or n5) is not under version control and can either be read from the local file system (subfolder local) or a remote object store (subfolder remote). In addition, the images folder contains a dictionary mapping image names to viewer and storage settings in images.json.
  • misc: Contains miscellanous data.
  • tables: Contains csv tables with additional data derived from the image data.

File naming

Image names must be prefixed by the header MODALITY-STAGE-ID-REGION, where

  • MODALITY is a shorthand for the imaging modality used to obtain the data, e.g. sbem for serial blockface electron microscopy.
  • STAGE is a shorthand for the develpmental stage, e.g. 6dpf for six days post fertilisation.
  • ID is a number that distinguishes individual animals of a given modality and stage or distinguishes different set-ups for averaging based modalities.
  • REGION is a shorthand for the region covered by the data, e.g. parapod for the parapodium or whole for the whole animal.

Table storage

Derived attributes are stored in csv tables, which must be associated with specific image data. The tables associated with a given image name must be stored in the sub-directory tables/image-name. If this directory exists, it must at least contain the file default.csv with spatial attributes of the objects in the image. If tables do not change between versions, they can be stored as relative soft-links to the old version.

Version updates

We provide three scripts to update the respective release types:

  • update_patch.py: Create new version folder and update derived data.
  • update_minor.py: Create new version folder and add new image data or derived data.
  • update_major.py: Create new version folder and add new modality. All three scripts take the path to a json file as argument, which encodes the data to update or to add.

For update_patch.py the json must contain a dictonary with the two keys segmentations and tables where each key maps to a list containing existing segmentation names. For names listed in segmentations, the segmentation AND corresponding tables (if present) will be updated. For tables, only the tables will be updated. The following example would trigger an update of the segmentation and tables for the cell segmentation and a table update for the nucleus segmentation:

{"segmentations": ["sbem-6dpf-1-whole-segmented-cells"],
 "tables": ["sbem-6dpf-1-whole-segmented-nuclei"]}

For update_minor.py and update_major.py, the json must contain a dictionary mapping the names of new image data to their source files and viewer settings. See example_updates/ for some example json update files.

In addition, update_registration.py can be used to update data undergoing registration with a new registration transformation. It creates a new patch version folder and updates all relevant data.

We do not add any files to version control automatically. So after calling one of the update scripts, add the new version folder to git and make a release via git tag -a X.Y.Z -m "DESCRIPTION".

Scripts

This repository also contains scripts that were used to generate most of the data for Whole-body integration of gene expression and single-cell morphology. mmpb contains a small python library that bundles most of this functionality as well as helper functions for the version updates.

Segmentation

The folder segmentation contains the scripts used to generate segmentations for cells, nuclei and other tissue derived from the EM data with automated segmentation approaches.

Registration

The folder registration contains the transformations for different registration versions as well as the scripts to generate the transformations for a given version. You can use the script registration/apply_registration.py to apply a registration transformation to a new input file.

Analysis

The folder analysis contains several scripts used for further data analyss, most notabbly cluster analysis based gene expression and cellular morphology.

Installation

We provide conda environments to run the python scripts. In order to install the main environment used to run the segmentation scripts and perform version updates, run

conda env create -f software/mmpb_environment.yaml
conda activate platybrowser
python setup.py install

To run the network training or prediction scripts a different environment is necessary, which can be installed via

conda env create -f software/train_environment.yaml
conda activate platybrowser-train
python setup.py install

Citation

If you use this resource, please cite Whole-body integration of gene expression and single-cell morphology. If you use the segmentation or registration functionality, please also include the appropriate citations, see segmentation/README.md or registration/README.md for details. For the initial gene expression atlas generated by ProSPr, please cite Whole-organism cellular gene-expression atlas reveals conserved cell types in the ventral nerve cord of Platynereis dumerilii.

Contributing data

If you want to contribute data to this resource, please raise an issue about this in this repository or contact us at [email protected].

platybrowser-project's People

Contributors

constantinpape avatar fynnbe avatar hernandomv avatar hernymv avatar k-meech avatar tischi avatar vzinche avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

platybrowser-project's Issues

Label disappears in s5

Get ready, this is a really weird bug :)

In my training data loading I am relying on s5 resolution to calculate bounding boxes, etc, and I got an error that the label_id 16198 doesn't exist. (version 1.0.1)
This shouldn't be the case since it exists in s4 and has 2317 pixels.
Then, if I get it correctly, in s5 there should still be 2317 / 2**3 = 289 pixels.

Why is there nothing in s5?

Leveling

@constantinpape

I think we should add the leveling information (what happens when one clicks on the level button) to the repo. Maybe a file named leveling.json in the misc folder.
For platynereis the content would need to be:

double[] normalVector = new double[]{0.70,0.56,0.43};

If the file would be absent the button would not be generated. What do you think?

amazon aws error

Error when trying to run. Recently updated.

[ERROR] Module threw exception
com.amazonaws.services.s3.model.AmazonS3Exception: Bad Request (Service: Amazon S3; Status Code: 400; Error Code: 400 Bad Request; Request ID: null; S3 Extended Request ID: null), S3 Extended Request ID: null
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1712)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeOneRequest(AmazonHttpClient.java:1367)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:1113)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:770)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:744)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:726)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$500(AmazonHttpClient.java:686)
at com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:668)
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:532)
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:512)
at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4914)
at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4860)
at com.amazonaws.services.s3.AmazonS3Client.getAcl(AmazonS3Client.java:3887)
at com.amazonaws.services.s3.AmazonS3Client.getBucketAcl(AmazonS3Client.java:1226)
at com.amazonaws.services.s3.AmazonS3Client.getBucketAcl(AmazonS3Client.java:1216)
at com.amazonaws.services.s3.AmazonS3Client.doesBucketExistV2(AmazonS3Client.java:1352)
at org.janelia.saalfeldlab.n5.s3.N5AmazonS3Reader.(N5AmazonS3Reader.java:148)
at org.janelia.saalfeldlab.n5.s3.N5AmazonS3Reader.(N5AmazonS3Reader.java:182)
at bdv.img.n5.XmlIoN5S3ImageLoader.getReader(XmlIoN5S3ImageLoader.java:120)
at bdv.img.n5.XmlIoN5S3ImageLoader.fromXml(XmlIoN5S3ImageLoader.java:85)
at bdv.img.n5.XmlIoN5S3ImageLoader.fromXml(XmlIoN5S3ImageLoader.java:49)
at mpicbg.spim.data.generic.sequence.XmlIoAbstractSequenceDescription.fromXml(XmlIoAbstractSequenceDescription.java:111)
at mpicbg.spim.data.generic.XmlIoAbstractSpimData.fromXml(XmlIoAbstractSpimData.java:153)
at mpicbg.spim.data.generic.XmlIoAbstractSpimData.load(XmlIoAbstractSpimData.java:95)
at de.embl.cba.bdv.utils.BdvUtils.openSpimData(BdvUtils.java:1364)
at de.embl.cba.bdv.utils.sources.LazySpimSource.initSpimData(LazySpimSource.java:61)
at de.embl.cba.bdv.utils.sources.LazySpimSource.wrappedVolatileSource(LazySpimSource.java:38)
at de.embl.cba.bdv.utils.sources.LazySpimSource.getType(LazySpimSource.java:109)
at de.embl.cba.bdv.utils.sources.LazySpimSource.getType(LazySpimSource.java:20)
at bdv.util.BdvFunctions.addSource(BdvFunctions.java:572)
at bdv.util.BdvFunctions.show(BdvFunctions.java:196)
at de.embl.cba.mobie.viewer.SourcesPanel.showIntensitySource(SourcesPanel.java:389)
at de.embl.cba.mobie.viewer.SourcesPanel.addSourceToViewer(SourcesPanel.java:363)
at de.embl.cba.mobie.viewer.SourcesPanel.addSourceToPanelAndViewer(SourcesPanel.java:338)
at de.embl.cba.mobie.viewer.SourcesPanel.addSourceToPanelAndViewer(SourcesPanel.java:295)
at de.embl.cba.mobie.bookmark.BookmarksManager.addSourcesToPanelAndViewer(BookmarksManager.java:46)
at de.embl.cba.mobie.bookmark.BookmarksManager.setView(BookmarksManager.java:32)
at de.embl.cba.mobie.viewer.MoBIEViewer.(MoBIEViewer.java:99)
at de.embl.cba.mobie.viewer.MoBIEViewer.(MoBIEViewer.java:47)
at de.embl.cba.mobie.command.OpenPlatyBrowserCommand.run(OpenPlatyBrowserCommand.java:16)
at org.scijava.command.CommandModule.run(CommandModule.java:196)
at org.scijava.module.ModuleRunner.run(ModuleRunner.java:165)
at org.scijava.module.ModuleRunner.call(ModuleRunner.java:124)
at org.scijava.module.ModuleRunner.call(ModuleRunner.java:63)
at org.scijava.thread.DefaultThreadService.lambda$wrap$2(DefaultThreadService.java:225)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)

Clean up proofreading projects

We have several versions of proofreading projects for cells and cilia. This should be cleaned up, and the label multiset version needs to be used for everything.

Adding this here to keep track of it, although this issue is not directly linked to the repo.

Repository names

@constantinpape
some things here may be to platynereis-centric.

  • the organisation name could rather be mmb
  • the repo platybrowser could be named platynereis (since it does not actually contain the browser, just the data....)

bookmarks

We have the following json definition for storing bookmark entries:

{"<name>": {"Layers": {"<layer-name>": {"Color": "<color-name>",
                                        "MinValue": <min-display-value>,
                                        "MaxValue": <max-display-value>,
                                        "SelectedIds": [<list of ids>],
                                        "ShowIn3d": <show this layer in 3d?>,
                                        "Tables": {"<table-name>": ["<column-name>", "<color-map>"]}},
                    "Position": [<position-coordinates>],
                    "View": [<affine-view-transformation>]}

Most of the fields are optional. I have added bookmarks for the Figure 2 panels.
Note that the SelectedIds in there are not yet up-to-date, I will fix this soon.
@Tischer could you check that this format works for you?

@HernandoMV @K-Meech @vzinche could you also have a look at this and see if you can fit your relevant panels into that format? Let me know if anything is unclear.

bookmark problem

Error when going to a bookmark (tested on Figure 2 Nephridia). All datasets suddenly close (black screens)

Exception in thread "AWT-EventQueue-0" java.lang.NoSuchMethodError: de.embl.cba.tables.view.TableRowsTableView.setTablesDirectory(Ljava/lang/String;)V
at de.embl.cba.mobie.viewer.SourcesPanel.configureTableView(SourcesPanel.java:491)
at de.embl.cba.mobie.viewer.SourcesPanel.showAnnotatedLabelsSource(SourcesPanel.java:460)
at de.embl.cba.mobie.viewer.SourcesPanel.addSourceToViewer(SourcesPanel.java:354)
at de.embl.cba.mobie.viewer.SourcesPanel.addSourceToPanelAndViewer(SourcesPanel.java:338)
at de.embl.cba.mobie.viewer.SourcesPanel.addSourceToPanelAndViewer(SourcesPanel.java:295)
at de.embl.cba.mobie.bookmark.BookmarksManager.addSourcesToPanelAndViewer(BookmarksManager.java:46)
at de.embl.cba.mobie.bookmark.BookmarksManager.setView(BookmarksManager.java:32)
at de.embl.cba.mobie.viewer.ActionPanel.lambda$addBookmarksUI$13(ActionPanel.java:499)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6539)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at java.awt.Component.processEvent(Component.java:6304)
at java.awt.Container.processEvent(Container.java:2239)
at java.awt.Component.dispatchEventImpl(Component.java:4889)
at java.awt.Container.dispatchEventImpl(Container.java:2297)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4535)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4476)
at java.awt.Container.dispatchEventImpl(Container.java:2283)
at java.awt.Window.dispatchEventImpl(Window.java:2746)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84)
at java.awt.EventQueue$4.run(EventQueue.java:733)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:730)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

Platybrowser doesn't open due to json syntax error

When I try to open the Platybrowser I get the exception below.
It looks like some json cannot be parsed correctly.
Could this be due to some recent change in parsing the bookmarks, @tischi @K-Meech?

ERROR] Module threw exception
java.lang.RuntimeException: java.util.concurrent.ExecutionException: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $
	at net.imglib2.cache.util.CacheAsUncheckedCacheAdapter.get(CacheAsUncheckedCacheAdapter.java:45)
	at bdv.AbstractSpimSource.getSource(AbstractSpimSource.java:230)
	at bdv.AbstractSpimSource.getSource(AbstractSpimSource.java:222)
	at bdv.tools.transformation.TransformedSource.getSource(TransformedSource.java:218)
	at de.embl.cba.bdv.utils.sources.LazySpimSource.getSource(LazySpimSource.java:119)
	at bdv.tools.transformation.TransformedSource.getSource(TransformedSource.java:218)
	at bdv.tools.InitializeViewerState.initTransform(InitializeViewerState.java:118)
	at bdv.tools.InitializeViewerState.initTransform(InitializeViewerState.java:79)
	at bdv.util.BdvHandle.tryInitTransform(BdvHandle.java:195)
	at bdv.util.BdvHandle.add(BdvHandle.java:179)
	at bdv.util.BdvFunctions.addSource(BdvFunctions.java:585)
	at bdv.util.BdvFunctions.show(BdvFunctions.java:196)
	at de.embl.cba.mobie.ui.viewer.SourcesPanel.showIntensitySource(SourcesPanel.java:387)
	at de.embl.cba.mobie.ui.viewer.SourcesPanel.addSourceToViewer(SourcesPanel.java:364)
	at de.embl.cba.mobie.ui.viewer.SourcesPanel.addSourceToPanelAndViewer(SourcesPanel.java:339)
	at de.embl.cba.mobie.ui.viewer.SourcesPanel.addSourceToPanelAndViewer(SourcesPanel.java:296)
	at de.embl.cba.mobie.bookmark.BookmarksManager.addSourcesToPanelAndViewer(BookmarksManager.java:53)
	at de.embl.cba.mobie.bookmark.BookmarksManager.setView(BookmarksManager.java:35)
	at de.embl.cba.mobie.ui.viewer.MoBIEViewer.<init>(MoBIEViewer.java:87)
	at de.embl.cba.mobie.ui.viewer.MoBIEViewer.<init>(MoBIEViewer.java:52)
	at de.embl.cba.mobie.ui.command.OpenPlatyBrowserCommand.run(OpenPlatyBrowserCommand.java:16)
	at org.scijava.command.CommandModule.run(CommandModule.java:196)
	at org.scijava.module.ModuleRunner.run(ModuleRunner.java:165)
	at org.scijava.module.ModuleRunner.call(ModuleRunner.java:124)
	at org.scijava.module.ModuleRunner.call(ModuleRunner.java:63)
	at org.scijava.thread.DefaultThreadService.lambda$wrap$2(DefaultThreadService.java:225)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
Caused by: java.util.concurrent.ExecutionException: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $
	at net.imglib2.cache.ref.WeakRefLoaderCache.get(WeakRefLoaderCache.java:112)
	at net.imglib2.cache.ref.BoundedSoftRefLoaderCache.get(BoundedSoftRefLoaderCache.java:54)
	at net.imglib2.cache.util.LoaderCacheAsCacheAdapter.get(LoaderCacheAsCacheAdapter.java:43)
	at net.imglib2.cache.util.CacheAsUncheckedCacheAdapter.get(CacheAsUncheckedCacheAdapter.java:41)
	... 29 more
Caused by: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $
	at com.google.gson.Gson.fromJson(Gson.java:944)
	at com.google.gson.Gson.fromJson(Gson.java:897)
	at org.janelia.saalfeldlab.n5.GsonAttributesParser.readAttributes(GsonAttributesParser.java:115)
	at org.janelia.saalfeldlab.n5.s3.N5AmazonS3Reader.getAttributes(N5AmazonS3Reader.java:237)
	at org.janelia.saalfeldlab.n5.AbstractGsonReader.getDatasetAttributes(AbstractGsonReader.java:81)
	at de.embl.cba.mobie.n5.N5ImageLoader$SetupImgLoader.prepareCachedImage(N5ImageLoader.java:277)
	at de.embl.cba.mobie.n5.N5ImageLoader$SetupImgLoader.getVolatileImage(N5ImageLoader.java:221)
	at bdv.VolatileSpimSource.getImage(VolatileSpimSource.java:71)
	at bdv.AbstractSpimSource.lambda$new$0(AbstractSpimSource.java:163)
	at net.imglib2.cache.ref.WeakRefLoaderCache.get(WeakRefLoaderCache.java:102)
	... 32 more
Caused by: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $
	at com.google.gson.stream.JsonReader.beginObject(JsonReader.java:386)
	at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.read(MapTypeAdapterFactory.java:183)
	at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.read(MapTypeAdapterFactory.java:145)
	at com.google.gson.Gson.fromJson(Gson.java:932)
	... 41 more

AWS credentials failure

I am getting the following error when trying to load the plugin:
Adding source: sbem-6dpf-1-whole-raw...
[ERROR] Module threw exception
com.amazonaws.SdkClientException: Unable to load AWS credentials from any provider in the chain: [EnvironmentVariableCredentialsProvider: Unable to load AWS credentials from environment variables (AWS_ACCESS_KEY_ID (or AWS_ACCESS_KEY) and AWS_SECRET_KEY (or AWS_SECRET_ACCESS_KEY)), SystemPropertiesCredentialsProvider: Unable to load AWS credentials from Java system properties (aws.accessKeyId and aws.secretKey), com.amazonaws.auth.profile.ProfileCredentialsProvider@1ce3e4d7: profile file cannot be null, com.amazonaws.auth.EC2ContainerCredentialsProviderWrapper@484eb8d6: Unable to load credentials from service endpoint]
at com.amazonaws.auth.AWSCredentialsProviderChain.getCredentials(AWSCredentialsProviderChain.java:136)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.getCredentialsFromContext(AmazonHttpClient.java:1225)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.runBeforeRequestHandlers(AmazonHttpClient.java:801)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:751)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:744)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:726)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$500(AmazonHttpClient.java:686)
at com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:668)
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:532)
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:512)
at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4914)
at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4860)
at com.amazonaws.services.s3.AmazonS3Client.getAcl(AmazonS3Client.java:3887)
at com.amazonaws.services.s3.AmazonS3Client.getBucketAcl(AmazonS3Client.java:1226)
at com.amazonaws.services.s3.AmazonS3Client.getBucketAcl(AmazonS3Client.java:1216)
at com.amazonaws.services.s3.AmazonS3Client.doesBucketExistV2(AmazonS3Client.java:1352)
at org.janelia.saalfeldlab.n5.s3.N5AmazonS3Reader.(N5AmazonS3Reader.java:148)
at org.janelia.saalfeldlab.n5.s3.N5AmazonS3Reader.(N5AmazonS3Reader.java:182)
at bdv.img.n5.XmlIoN5S3ImageLoader.getReader(XmlIoN5S3ImageLoader.java:117)
at bdv.img.n5.XmlIoN5S3ImageLoader.fromXml(XmlIoN5S3ImageLoader.java:108)
at bdv.img.n5.XmlIoN5S3ImageLoader.fromXml(XmlIoN5S3ImageLoader.java:54)
at mpicbg.spim.data.generic.sequence.XmlIoAbstractSequenceDescription.fromXml(XmlIoAbstractSequenceDescription.java:111)
at mpicbg.spim.data.generic.XmlIoAbstractSpimData.fromXml(XmlIoAbstractSpimData.java:153)
at mpicbg.spim.data.generic.XmlIoAbstractSpimData.load(XmlIoAbstractSpimData.java:95)
at de.embl.cba.bdv.utils.BdvUtils.openSpimData(BdvUtils.java:1356)
at de.embl.cba.bdv.utils.sources.LazySpimSource.initSpimData(LazySpimSource.java:61)
at de.embl.cba.bdv.utils.sources.LazySpimSource.wrappedVolatileSource(LazySpimSource.java:38)
at de.embl.cba.bdv.utils.sources.LazySpimSource.getType(LazySpimSource.java:109)
at de.embl.cba.bdv.utils.sources.LazySpimSource.getType(LazySpimSource.java:20)
at bdv.util.BdvFunctions.addSource(BdvFunctions.java:572)
at bdv.util.BdvFunctions.show(BdvFunctions.java:196)
at de.embl.cba.platynereis.platybrowser.PlatyBrowserSourcesPanel.showIntensitySource(PlatyBrowserSourcesPanel.java:426)
at de.embl.cba.platynereis.platybrowser.PlatyBrowserSourcesPanel.addSourceToViewer(PlatyBrowserSourcesPanel.java:401)
at de.embl.cba.platynereis.platybrowser.PlatyBrowserSourcesPanel.addSourceToPanelAndViewer(PlatyBrowserSourcesPanel.java:376)
at de.embl.cba.platynereis.platybrowser.PlatyBrowserSourcesPanel.addSourceToPanelAndViewer(PlatyBrowserSourcesPanel.java:333)
at de.embl.cba.platynereis.platybrowser.PlatyBrowser.(PlatyBrowser.java:46)
at de.embl.cba.platynereis.platybrowser.command.OpenPlatyBrowserCommand.run(OpenPlatyBrowserCommand.java:24)
at org.scijava.command.CommandModule.run(CommandModule.java:199)
at org.scijava.module.ModuleRunner.run(ModuleRunner.java:168)
at org.scijava.module.ModuleRunner.call(ModuleRunner.java:127)
at org.scijava.module.ModuleRunner.call(ModuleRunner.java:66)
at org.scijava.thread.DefaultThreadService.lambda$wrap$2(DefaultThreadService.java:228)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)

cannot load mobie

after updating, MoBie GUI does not open, though the EM data loads

Adding source: sbem-6dpf-1-whole-raw...
[ERROR] Module threw error
java.lang.NoSuchMethodError: de.embl.cba.bdv.utils.BdvUtils.getShortCutString(Ljava/lang/String;)Ljava/lang/String;
at de.embl.cba.mobie.ui.viewer.ActionPanel.installBdvBehavioursAndPopupMenu(ActionPanel.java:105)
at de.embl.cba.mobie.ui.viewer.ActionPanel.setBdvAndInstallBehavioursAndPopupMenu(ActionPanel.java:79)
at de.embl.cba.mobie.ui.viewer.MoBIEViewer.(MoBIEViewer.java:100)
at de.embl.cba.mobie.ui.viewer.MoBIEViewer.(MoBIEViewer.java:50)
at de.embl.cba.mobie.ui.command.OpenPlatyBrowserCommand.run(OpenPlatyBrowserCommand.java:16)
at org.scijava.command.CommandModule.run(CommandModule.java:196)
at org.scijava.module.ModuleRunner.run(ModuleRunner.java:165)
at org.scijava.module.ModuleRunner.call(ModuleRunner.java:124)
at org.scijava.module.ModuleRunner.call(ModuleRunner.java:63)
at org.scijava.thread.DefaultThreadService.lambda$wrap$2(DefaultThreadService.java:225)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)

Update README

The readme is not up-to-date with the new version folder layout.

Update image dict

As we have discussed, we should update the image dict to add the modality of the layer.
Following up on our skype call, I think there are 2 options to do this:

1.)
Add a Modality field with 3 options:

  • Image: Normal image layer, goes to the image dropdown in the plugin.
  • Segmentation: Segmentation layer with selectable objects, goes to the segmentation dropdown.
  • Mask: Segmentation layer without selectable objects, goes to the segmentation drowpdown.

2.)
Add a Modality field with 2 options:

  • Image: Normal image layer, goes to the image dropdown in the plugin.
  • Segmentation: Segmentation layer, goes to the segmentation dropdown.
    Add an additional field HasSelectableObjects or so, which indicates if objects in a segmentation can be selected.

I would prefer option 1 because it only adds one field.
@Tischer what do you prefer / any other option you would rather have?

Virtual cell files are missing segmented tag?

The virtual cells should behave like segmentations in the platy-browser, so do they need the segmentedtag in the filename?
Haven't checked how they are currently displayed in the browser.

AWS error: Data read has a different length than the expected

@constantinpape @axtimwalde
I got this error today browsing the Platy:

com.amazonaws.SdkClientException: Data read has a different length than the expected: dataLength=32768; expectedLength=761568; includeSkipped=true; in.getClass()=class com.amazonaws.services.s3.AmazonS3Client$2; markedSupported=false; marked=0; resetSinceLastMarked=false; markCount=0; resetCount=0
com.amazonaws.SdkClientException: Data read has a different length than the expected: dataLength=152733; expectedLength=697570; includeSkipped=true; in.getClass()=class com.amazonaws.services.s3.AmazonS3Client$2; markedSupported=false; marked=0; resetSinceLastMarked=false; markCount=0; resetCount=0
com.amazonaws.SdkClientException: Data read has a different length than the expected: dataLength=65536; expectedLength=738165; includeSkipped=true; in.getClass()=class com.amazonaws.services.s3.AmazonS3Client$2; markedSupported=false; marked=0; resetSinceLastMarked=false; markCount=0; resetCount=0
com.amazonaws.SdkClientException: Data read has a different length than the expected: dataLength=253066; expectedLength=750881; includeSkipped=true; in.getClass()=class com.amazonaws.services.s3.AmazonS3Client$2; markedSupported=false; marked=0; resetSinceLastMarked=false; markCount=0; resetCount=0

I don't think I have seen this yet. Any ideas?
The data still seemed to be loading fine...

Confusing definition of a Segmentation image

@constantinpape

Right now, I am having this in my code (with Segmentation occurring twice):

public class Metadata
{
        ...

	public enum Modality
	{
		Segmentation,
		FM,
		EM,
		XRay
	}

	public enum Type
	{
		Image,
		Segmentation,
		Mask,
	}
}

This has been growing like this for historical reasons.
We should think about it and clean this up at some point.

Rename version 0.6.6 to 1.0.0

I would like to call what is currently version 0.6.6 1.0.0 to indicate that this is the version at time of submission.
From my point all the data is added to this now, but we are still lacking a few things:

  • Check that gene and virtual cell assignments are correct, @vzinche
  • Check that the cell and nucleus morphology tables are correct and add the morphology clustering, @K-Meech

Please let me know if any of this is done, but this is not very urgent.

Confusing fields in image properties

Right now we use the fields MinValue and MaxValue to set the brightness of the color lut for all types in images.json. This is a bit confusing though, because for Segmentation and Mask the brightness value does not depend on the actual image values, which is implied by MinValue and MaxValue.
Instead, we should just have a single filed Transparency or Brightness for these two types.

This would need some adjustments to the color model in https://github.com/platybrowser/platybrowser-fiji though.

Add a license

We should think about adding a license to this.
This might be a bit tricky, because this repository contains code and data,
maybe we need two separate licenses for this.

Platybrowser doesn't load

When I start the default platybrowser I get these errors. Does anyone else also have it, or is it just me? It is for the mobie-beta update site, and I have all the recent image-j updates

Console:
[ERROR] Module threw exception
java.lang.NullPointerException
at de.embl.cba.mobie.n5.N5ImageLoader.createSetupImgLoader(N5ImageLoader.java:164)
at de.embl.cba.mobie.n5.N5ImageLoader.open(N5ImageLoader.java:112)
at de.embl.cba.mobie.n5.N5ImageLoader.getSetupImgLoader(N5ImageLoader.java:156)
at de.embl.cba.mobie.n5.N5ImageLoader.getSetupImgLoader(N5ImageLoader.java:73)
at bdv.BigDataViewer.initSetupNumericType(BigDataViewer.java:261)
at bdv.BigDataViewer.initSetups(BigDataViewer.java:293)
at de.embl.cba.bdv.utils.sources.LazySpimSource.initSpimData(LazySpimSource.java:92)
at de.embl.cba.bdv.utils.sources.LazySpimSource.wrappedVolatileSource(LazySpimSource.java:66)
at de.embl.cba.bdv.utils.sources.LazySpimSource.getType(LazySpimSource.java:137)
at de.embl.cba.bdv.utils.sources.LazySpimSource.getType(LazySpimSource.java:48)
at bdv.util.BdvFunctions.addSource(BdvFunctions.java:581)
at bdv.util.BdvFunctions.show(BdvFunctions.java:196)
at de.embl.cba.mobie.ui.viewer.SourcesPanel.showIntensitySource(SourcesPanel.java:387)
at de.embl.cba.mobie.ui.viewer.SourcesPanel.addSourceToViewer(SourcesPanel.java:364)
at de.embl.cba.mobie.ui.viewer.SourcesPanel.addSourceToPanelAndViewer(SourcesPanel.java:339)
at de.embl.cba.mobie.ui.viewer.SourcesPanel.addSourceToPanelAndViewer(SourcesPanel.java:296)
at de.embl.cba.mobie.bookmark.BookmarksManager.addSourcesToPanelAndViewer(BookmarksManager.java:53)
at de.embl.cba.mobie.bookmark.BookmarksManager.setView(BookmarksManager.java:35)
at de.embl.cba.mobie.ui.viewer.MoBIEViewer.(MoBIEViewer.java:87)
at de.embl.cba.mobie.ui.viewer.MoBIEViewer.(MoBIEViewer.java:52)
at de.embl.cba.mobie.ui.command.OpenPlatyBrowserCommand.run(OpenPlatyBrowserCommand.java:16)
at org.scijava.command.CommandModule.run(CommandModule.java:196)
at org.scijava.module.ModuleRunner.run(ModuleRunner.java:165)
at org.scijava.module.ModuleRunner.call(ModuleRunner.java:124)
at org.scijava.module.ModuleRunner.call(ModuleRunner.java:63)
at org.scijava.thread.DefaultThreadService.lambda$wrap$2(DefaultThreadService.java:225)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)

Exception:
java.lang.RuntimeException: java.util.concurrent.ExecutionException: java.lang.NullPointerException
at net.imagej.legacy.LegacyService.runLegacyCompatibleCommand(LegacyService.java:307)
at net.imagej.legacy.DefaultLegacyHooks.interceptRunPlugIn(DefaultLegacyHooks.java:166)
at ij.IJ.runPlugIn(IJ.java)
at ij.Executer.runCommand(Executer.java:150)
at ij.Executer.run(Executer.java:68)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.util.concurrent.ExecutionException: java.lang.NullPointerException
at java.util.concurrent.FutureTask.report(FutureTask.java:122)
at java.util.concurrent.FutureTask.get(FutureTask.java:192)
at net.imagej.legacy.LegacyService.runLegacyCompatibleCommand(LegacyService.java:303)
... 5 more
Caused by: java.lang.NullPointerException
at de.embl.cba.mobie.n5.N5ImageLoader.createSetupImgLoader(N5ImageLoader.java:164)
at de.embl.cba.mobie.n5.N5ImageLoader.open(N5ImageLoader.java:112)
at de.embl.cba.mobie.n5.N5ImageLoader.getSetupImgLoader(N5ImageLoader.java:156)
at de.embl.cba.mobie.n5.N5ImageLoader.getSetupImgLoader(N5ImageLoader.java:73)
at bdv.BigDataViewer.initSetupNumericType(BigDataViewer.java:261)
at bdv.BigDataViewer.initSetups(BigDataViewer.java:293)
at de.embl.cba.bdv.utils.sources.LazySpimSource.initSpimData(LazySpimSource.java:92)
at de.embl.cba.bdv.utils.sources.LazySpimSource.wrappedVolatileSource(LazySpimSource.java:66)
at de.embl.cba.bdv.utils.sources.LazySpimSource.getType(LazySpimSource.java:137)
at de.embl.cba.bdv.utils.sources.LazySpimSource.getType(LazySpimSource.java:48)
at bdv.util.BdvFunctions.addSource(BdvFunctions.java:581)
at bdv.util.BdvFunctions.show(BdvFunctions.java:196)
at de.embl.cba.mobie.ui.viewer.SourcesPanel.showIntensitySource(SourcesPanel.java:387)
at de.embl.cba.mobie.ui.viewer.SourcesPanel.addSourceToViewer(SourcesPanel.java:364)
at de.embl.cba.mobie.ui.viewer.SourcesPanel.addSourceToPanelAndViewer(SourcesPanel.java:339)
at de.embl.cba.mobie.ui.viewer.SourcesPanel.addSourceToPanelAndViewer(SourcesPanel.java:296)
at de.embl.cba.mobie.bookmark.BookmarksManager.addSourcesToPanelAndViewer(BookmarksManager.java:53)
at de.embl.cba.mobie.bookmark.BookmarksManager.setView(BookmarksManager.java:35)
at de.embl.cba.mobie.ui.viewer.MoBIEViewer.(MoBIEViewer.java:87)
at de.embl.cba.mobie.ui.viewer.MoBIEViewer.(MoBIEViewer.java:52)
at de.embl.cba.mobie.ui.command.OpenPlatyBrowserCommand.run(OpenPlatyBrowserCommand.java:16)
at org.scijava.command.CommandModule.run(CommandModule.java:196)
at org.scijava.module.ModuleRunner.run(ModuleRunner.java:165)
at org.scijava.module.ModuleRunner.call(ModuleRunner.java:124)
at org.scijava.module.ModuleRunner.call(ModuleRunner.java:63)
at org.scijava.thread.DefaultThreadService.lambda$wrap$2(DefaultThreadService.java:225)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
... 1 more

cc @tischi @constantinpape @K-Meech

Issue when adding ganglia_ids table to segmentation table in platyBrowser

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 2
	at de.embl.cba.tables.TableColumns.orderedStringColumnsFromTableFile(TableColumns.java:160)
	at de.embl.cba.tables.TableColumns.openAndOrderNewColumns(TableColumns.java:337)
	at de.embl.cba.tables.TableUIs.openTableForMergingUI(TableUIs.java:143)
	at de.embl.cba.tables.view.TableRowsTableView.lambda$null$4(TableRowsTableView.java:421)
	at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
	at java.awt.EventQueue.access$500(EventQueue.java:97)
	at java.awt.EventQueue$3.run(EventQueue.java:709)
	at java.awt.EventQueue$3.run(EventQueue.java:703)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

Views in bookmarks

@HernandoMV @vzinche @constantinpape @K-Meech

It turns out that the View AffineTransform in the Bookmarks.json only looks correct if the BigDataViewer window has the exact same size (in pixels) as for it had for the person recording this View. Maybe we could at least make it such that the Views look good if one keeps the default size of the BigDataViewer window when the application opens.

You can try this: resize the Bdv Window and view a Bookmark => the View may not fit.

Opinions?

Error with opening cell segmentation from local project

Opening the platybrowser from local files (arendt server version) works, but then leads to the error below when the cell segmentation is viewed. Possibly related to: mobie/mobie-viewer-fiji#62? (running on Windows 10)

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at de.embl.cba.tables.view.SegmentsBdvView.showSource(SegmentsBdvView.java:367)
at de.embl.cba.tables.view.SegmentsBdvView.showSourceSet(SegmentsBdvView.java:295)
at de.embl.cba.tables.view.SegmentsBdvView.showInitialSources(SegmentsBdvView.java:182)
at de.embl.cba.tables.view.SegmentsBdvView.(SegmentsBdvView.java:125)
at de.embl.cba.tables.view.combined.SegmentsTableBdvAnd3dViews.bdvView(SegmentsTableBdvAnd3dViews.java:118)
at de.embl.cba.tables.view.combined.SegmentsTableBdvAnd3dViews.show(SegmentsTableBdvAnd3dViews.java:63)
at de.embl.cba.tables.view.combined.SegmentsTableBdvAnd3dViews.(SegmentsTableBdvAnd3dViews.java:49)
at de.embl.cba.mobie.viewer.SourcesPanel.showAnnotatedLabelsSource(SourcesPanel.java:454)
at de.embl.cba.mobie.viewer.SourcesPanel.addSourceToViewer(SourcesPanel.java:354)
at de.embl.cba.mobie.viewer.SourcesPanel.addSourceToPanelAndViewer(SourcesPanel.java:338)
at de.embl.cba.mobie.viewer.SourcesPanel.addSourceToPanelAndViewer(SourcesPanel.java:295)
at de.embl.cba.mobie.viewer.ActionPanel.lambda$null$8(ActionPanel.java:433)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

cannot open platybrowser

after doing the new MoBIE update:

Adding source: sbem-6dpf-1-whole-raw...
[ERROR] Module threw error
java.lang.NoClassDefFoundError: net/imglib2/util/Cast
at bdv.img.n5.N5GenericImageLoader.createSetupImgLoader(N5GenericImageLoader.java:169)
at bdv.img.n5.N5GenericImageLoader.open(N5GenericImageLoader.java:114)
at bdv.img.n5.N5GenericImageLoader.getSetupImgLoader(N5GenericImageLoader.java:158)
at bdv.img.n5.N5GenericImageLoader.getSetupImgLoader(N5GenericImageLoader.java:75)
at bdv.BigDataViewer.initSetupNumericType(BigDataViewer.java:260)
at bdv.BigDataViewer.initSetups(BigDataViewer.java:292)
at de.embl.cba.bdv.utils.sources.LazySpimSource.initSpimData(LazySpimSource.java:64)
at de.embl.cba.bdv.utils.sources.LazySpimSource.wrappedVolatileSource(LazySpimSource.java:38)
at de.embl.cba.bdv.utils.sources.LazySpimSource.getType(LazySpimSource.java:109)
at de.embl.cba.bdv.utils.sources.LazySpimSource.getType(LazySpimSource.java:20)
at bdv.util.BdvFunctions.addSource(BdvFunctions.java:572)
at bdv.util.BdvFunctions.show(BdvFunctions.java:196)
at de.embl.cba.mobie.viewer.SourcesPanel.showIntensitySource(SourcesPanel.java:387)
at de.embl.cba.mobie.viewer.SourcesPanel.addSourceToViewer(SourcesPanel.java:362)
at de.embl.cba.mobie.viewer.SourcesPanel.addSourceToPanelAndViewer(SourcesPanel.java:337)
at de.embl.cba.mobie.viewer.SourcesPanel.addSourceToPanelAndViewer(SourcesPanel.java:294)
at de.embl.cba.mobie.bookmark.BookmarksManager.addSourcesToPanelAndViewer(BookmarksManager.java:46)
at de.embl.cba.mobie.bookmark.BookmarksManager.setView(BookmarksManager.java:32)
at de.embl.cba.mobie.viewer.MoBIEViewer.(MoBIEViewer.java:89)
at de.embl.cba.mobie.viewer.MoBIEViewer.(MoBIEViewer.java:49)
at de.embl.cba.mobie.command.OpenPlatyBrowserCommand.run(OpenPlatyBrowserCommand.java:16)
at org.scijava.command.CommandModule.run(CommandModule.java:199)
at org.scijava.module.ModuleRunner.run(ModuleRunner.java:168)
at org.scijava.module.ModuleRunner.call(ModuleRunner.java:127)
at org.scijava.module.ModuleRunner.call(ModuleRunner.java:66)
at org.scijava.thread.DefaultThreadService.lambda$wrap$2(DefaultThreadService.java:228)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.ClassNotFoundException: net.imglib2.util.Cast
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 30 more

Error with Open MoBIE Project..

Opening the mobie project (from usual remote location) leads to error copied below:
Running on Windows 10 - I wonder if this has any relation to: mobie/mobie-viewer-fiji#62

java.io.FileNotFoundException: https://raw.githubusercontent.com/mobie-org/platybrowser-datasets/tree/master/data/master/data/datasets.json
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1890)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1492)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:263)
at java.net.URL.openStream(URL.java:1045)
at de.embl.cba.tables.FileAndUrlUtils.getInputStream(FileAndUrlUtils.java:102)
at de.embl.cba.mobie.dataset.DatasetsParser.datasetsFromFile(DatasetsParser.java:36)
at de.embl.cba.mobie.dataset.DatasetsParser.datasetsFromDataSource(DatasetsParser.java:18)
at de.embl.cba.mobie.viewer.MoBIEViewer.(MoBIEViewer.java:75)
at de.embl.cba.mobie.viewer.MoBIEViewer.(MoBIEViewer.java:59)
at de.embl.cba.mobie.command.OpenMoBIEProjectCommand.run(OpenMoBIEProjectCommand.java:19)
at org.scijava.command.CommandModule.run(CommandModule.java:196)
at org.scijava.module.ModuleRunner.run(ModuleRunner.java:165)
at org.scijava.module.ModuleRunner.call(ModuleRunner.java:124)
at org.scijava.module.ModuleRunner.call(ModuleRunner.java:63)
at org.scijava.thread.DefaultThreadService.lambda$wrap$2(DefaultThreadService.java:225)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
[ERROR] Module threw exception
java.lang.UnsupportedOperationException: Could not open or parse datasets file: https://raw.githubusercontent.com/mobie-org/platybrowser-datasets/tree/master/data/master/data/datasets.json
at de.embl.cba.mobie.dataset.DatasetsParser.datasetsFromDataSource(DatasetsParser.java:29)
at de.embl.cba.mobie.viewer.MoBIEViewer.(MoBIEViewer.java:75)
at de.embl.cba.mobie.viewer.MoBIEViewer.(MoBIEViewer.java:59)
at de.embl.cba.mobie.command.OpenMoBIEProjectCommand.run(OpenMoBIEProjectCommand.java:19)
at org.scijava.command.CommandModule.run(CommandModule.java:196)
at org.scijava.module.ModuleRunner.run(ModuleRunner.java:165)
at org.scijava.module.ModuleRunner.call(ModuleRunner.java:124)
at org.scijava.module.ModuleRunner.call(ModuleRunner.java:63)
at org.scijava.thread.DefaultThreadService.lambda$wrap$2(DefaultThreadService.java:225)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)

double 3dview window

Reproducible error trying to visualize gene expression, ganglia segmentation, and neuropil segmentation.
The browser opens 2 3Dviewer windows displaying the information separately. Clicking the 'V' checkbox twice on 'neuropil' (to try bring it to the other window) displays the following error:

Adding source: sbem-6dpf-1-whole-raw...
Adding source: prospr-6dpf-1-whole-arx...
Adding source: sbem-6dpf-1-whole-segmented-ganglia...
Adding source: sbem-6dpf-1-whole-segmented-neuropil...
3D [dev] 1.6.0-scijava-3-SNAPSHOT-pre11-daily-experimental daily

nFrames = 1
nFrames = 1
J3dI18N: Error looking up: GroupRetained2
java.util.concurrent.ExecutionException: org.scijava.java3d.MultipleParentException: GroupRetained2
	at java.util.concurrent.FutureTask.report(FutureTask.java:122)
	at java.util.concurrent.FutureTask.get(FutureTask.java:192)
	at ij3d.Image3DUniverse.addContent(Image3DUniverse.java:1746)
	at de.embl.cba.platynereis.platybrowser.PlatyBrowserSourcesPanel.showSourceInVolumeViewer(PlatyBrowserSourcesPanel.java:223)
	at de.embl.cba.platynereis.platybrowser.PlatyBrowserSourcesPanel.updateSource3dView(PlatyBrowserSourcesPanel.java:90)
	at de.embl.cba.platynereis.platybrowser.SourcesDisplayUI$2.lambda$actionPerformed$0(SourcesDisplayUI.java:55)
	at java.lang.Thread.run(Thread.java:748)
Caused by: org.scijava.java3d.MultipleParentException: GroupRetained2
	at org.scijava.java3d.GroupRetained.checkValidChild(GroupRetained.java:464)
	at org.scijava.java3d.GroupRetained.addChild(GroupRetained.java:473)
	at org.scijava.java3d.Group.addChild(Group.java:282)
	at ij3d.Image3DUniverse.addContentToScene(Image3DUniverse.java:1724)
	at ij3d.Image3DUniverse.access$300(Image3DUniverse.java:84)
	at ij3d.Image3DUniverse$5.call(Image3DUniverse.java:1772)
	at ij3d.Image3DUniverse$5.call(Image3DUniverse.java:1767)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	... 1 more

Clean up old data folder

There is still the old data folder on the arendt share: /g/arendt/EM_6dpf_segmentation/EM-Prospr.
We should check which data in there should be backed up and then remove it,

(Technically not a code issue, but I am adding it here so we can keep track of it.)

Bookmarks: color by column

@vzinche @constantinpape @HernandoMV @K-Meech

I think this is not yet entirely logical:

"sbem-6dpf-1-whole-segmented-cells": {
        "Tables": {
          "vc_assignments": [
            "expression_sum",
            "glasbey"
          ]
        }

There could be multiple additional tables, but there can be only one column based colouring scheme. Thus, I think the "expression_sum", "glasbey" is not a property of "vc_assignments", but of "sbem-6dpf-1-whole-segmented-cells".

I would propose to do it instead like this:

"sbem-6dpf-1-whole-segmented-cells": {
        "Tables": [ "default", "vc_assignments" ],
        "ColorMap": "Glasbey",
        "MaxValue": 1000,
        "MinValue": 0,
        "ColorByColumn": "expression_sum"
        }

, where, if "ColorByColumn" is missing, it defaults to "ColorByColumn" : "label_id"

An important point here is that I realised that bookmarks.json is very similar to images.json.
In fact, I am now trying to use the same code to parse both of them. To make this even more consistent, I would thus propose to make them even more similar, for example by introducing above changes.

What do you think?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.