Skip to content

Commit

Permalink
Merge branch 'master' of github.com:scalableminds/webknossos into no_…
Browse files Browse the repository at this point in the history
…type

* 'master' of github.com:scalableminds/webknossos:
  Ensure unique volume layer names when changing names in frontend (#6289)
  X-Auth Tokens everywhere (in datastore & tracingstore) (#6312)
  add mapping name param for rawcuboid (#6311)
  Fix zooming out for datasets with very large scale (#6304)
  Release 22.07.0 (#6307)
  added Sahil's publication to list
  • Loading branch information
hotzenklotz committed Jul 4, 2022
2 parents 2f4ec8f + ed90316 commit 3f3421e
Show file tree
Hide file tree
Showing 21 changed files with 380 additions and 168 deletions.
22 changes: 22 additions & 0 deletions CHANGELOG.released.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,28 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
and this project adheres to [Calendar Versioning](http://calver.org/) `0Y.0M.MICRO`.
For upgrade instructions, please check the [migration guide](MIGRATIONS.released.md).

## [22.07.0](https://github.com/scalableminds/webknossos/releases/tag/22.07.0) - 2022-06-28
[Commits](https://github.com/scalableminds/webknossos/compare/22.06.1...22.07.0)

### Highlights
- Added a image data download speed indicator to the statusbar. On hover a tooltip is shown that show the total amount of downloaded shard data. [#6269](https://github.com/scalableminds/webknossos/pull/6269)
- Provide a UI to download/export a dataset in view-mode. The UI explains how to access the data with the python library. [#6283](https://github.com/scalableminds/webknossos/pull/6283)

### Added
- Added a warning for when the resolution in the XY viewport on z=1-downsampled datasets becomes too low, explaining the problem and how to mitigate it. [#6255](https://github.com/scalableminds/webknossos/pull/6255)
- Added the possibility to view and download older versions of read-only annotations. [#6274](https://github.com/scalableminds/webknossos/pull/6274)
- Added a proofreading tool which can be used to edit agglomerate mappings. After activating an agglomerate mapping the proofreading tool can be selected. While the tool is active, agglomerates can be clicked to load their agglomerate skeletons. Use the context menu to delete or create edges for those agglomerate skeletons to split or merge agglomerates. The changes will immediately reflect in the segmentation and meshes. [#6195](https://github.com/scalableminds/webknossos/pull/6195)

### Changed
- For the api routes that return annotation info objects, the user field was renamed to owner. User still exists as an alias, but will be removed in a future release. [#6250](https://github.com/scalableminds/webknossos/pull/6250)
- Slimmed the URLs for annotations by removing `Explorational` and `Task`. The old URLs are still supported, but will be redirected to the new format. [#6208](https://github.com/scalableminds/webknossos/pull/6208)
- When creating a task from a base annotation, the starting position/rotation and bounding box as specified during task creation are now used and overwrite the ones from the original base annotation. [#6249](https://github.com/scalableminds/webknossos/pull/6249)
- Increased maximum interpolation depth from 8 to 100. [#6292](https://github.com/scalableminds/webknossos/pull/6292)

### Fixed
- Fixed that bounding boxes were deletable in read-only tracings although the delete button was disabled. [#6273](https://github.com/scalableminds/webknossos/pull/6273)
- Fixed that (old) sharing links with tokens did not work, because the token was removed during a redirection. [#6281](https://github.com/scalableminds/webknossos/pull/6281)

## [22.06.1](https://github.com/scalableminds/webknossos/releases/tag/22.06.1) - 2022-06-16
[Commits](https://github.com/scalableminds/webknossos/compare/22.06.0...22.06.1)

Expand Down
19 changes: 5 additions & 14 deletions CHANGELOG.unreleased.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,27 +8,18 @@ and this project adheres to [Calendar Versioning](http://calver.org/) `0Y.0M.MIC
For upgrade instructions, please check the [migration guide](MIGRATIONS.released.md).

## Unreleased

[Commits](https://github.com/scalableminds/webknossos/compare/22.06.1...HEAD)
[Commits](https://github.com/scalableminds/webknossos/compare/22.07.0...HEAD)

### Added
- Added a image data download speed indicator to the statusbar. On hover a tooltip is shown that show the total amount of downloaded shard data. [#6269](https://github.com/scalableminds/webknossos/pull/6269)
- Added a warning for when the resolution in the XY viewport on z=1-downsampled datasets becomes too low, explaining the problem and how to mitigate it. [#6255](https://github.com/scalableminds/webknossos/pull/6255)
- Provide a UI to download/export a dataset in view-mode. The UI explains how to access the data with the python library. [#6283](https://github.com/scalableminds/webknossos/pull/6283)
- Added the possibility to view and download older versions of read-only annotations. [#6274](https://github.com/scalableminds/webknossos/pull/6274)
- Added a proofreading tool which can be used to edit agglomerate mappings. After activating an agglomerate mapping the proofreading tool can be selected. While the tool is active, agglomerates can be clicked to load their agglomerate skeletons. Use the context menu to delete or create edges for those agglomerate skeletons to split or merge agglomerates. The changes will immediately reflect in the segmentation and meshes. [#6195](https://github.com/scalableminds/webknossos/pull/6195)
- Added a warning for invalid volume layer names. The layer names must now be unique among all layers in an annotation and must not contain url encoded special characters. [#6289](https://github.com/scalableminds/webknossos/pull/6289)
- Added optional mappingName parameter to `requestRawCuboid` datastore route, which allows to directly apply a specified mapping in the backend. [#6311](https://github.com/scalableminds/webknossos/pull/6311)
- Added option to use `X-Auth-Token` header instead of query parameter in every datastore and tracingstore route. [#6312](https://github.com/scalableminds/webknossos/pull/6312)
- Add new backend API routes for working with annotations without having to provide a 'type' argument. Note that these support stored annotations (Task and Explorational), but do not work for CompoundTask/CompoundProject/CompoundTaskType annotations. For the latter, please use the original route variants with explicit type. [#6285](https://github.com/scalableminds/webknossos/pull/6285)

### Changed

- For the api routes that return annotation info objects, the user field was renamed to owner. User still exists as an alias, but will be removed in a future release. [#6250](https://github.com/scalableminds/webknossos/pull/6250)
- Slimmed the URLs for annotations by removing `Explorational` and `Task`. The old URLs are still supported, but will be redirected to the new format. [#6208](https://github.com/scalableminds/webknossos/pull/6208)
- When creating a task from a base annotation, the starting position/rotation and bounding box as specified during task creation are now used and overwrite the ones from the original base annotation. [#6249](https://github.com/scalableminds/webknossos/pull/6249)
- Increased maximum interpolation depth from 8 to 100. [#6292](https://github.com/scalableminds/webknossos/pull/6292)

### Fixed
- Fixed that bounding boxes were deletable in read-only tracings although the delete button was disabled. [#6273](https://github.com/scalableminds/webknossos/pull/6273)
- Fixed that (old) sharing links with tokens did not work, because the token was removed during a redirection. [#6281](https://github.com/scalableminds/webknossos/pull/6281)
- Fixed that zooming out for datasets with very large scale was not possible until the coarsest level. [#6304](https://github.com/scalableminds/webknossos/pull/6304)

### Removed

Expand Down
8 changes: 8 additions & 0 deletions MIGRATIONS.released.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,14 @@ See `MIGRATIONS.unreleased.md` for the changes which are not yet part of an offi
This project adheres to [Calendar Versioning](http://calver.org/) `0Y.0M.MICRO`.
User-facing changes are documented in the [changelog](CHANGELOG.released.md).

## [22.07.0](https://github.com/scalableminds/webknossos/releases/tag/22.07.0) - 2022-06-28
[Commits](https://github.com/scalableminds/webknossos/compare/22.06.1...22.07.0)

- FossilDB now has to be started with two new additional column families: editableMappings,editableMappingUpdates. Note that this upgrade can not be trivially rolled back, since new rocksDB column families are added and it is not easy to remove them again from an existing database. In case webKnossos needs to be rolled back, it is recommended to still keep the new column families in FossilDB. [#6195](https://github.com/scalableminds/webknossos/pull/6195)

### Postgres Evolutions:


## [22.06.1](https://github.com/scalableminds/webknossos/releases/tag/22.06.1) - 2022-06-16
[Commits](https://github.com/scalableminds/webknossos/compare/22.06.0...22.06.1)

Expand Down
4 changes: 1 addition & 3 deletions MIGRATIONS.unreleased.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,6 @@ This project adheres to [Calendar Versioning](http://calver.org/) `0Y.0M.MICRO`.
User-facing changes are documented in the [changelog](CHANGELOG.released.md).

## Unreleased
[Commits](https://github.com/scalableminds/webknossos/compare/22.06.1...HEAD)

- FossilDB now has to be started with two new additional column families: editableMappings,editableMappingUpdates. Note that this upgrade can not be trivially rolled back, since new rocksDB column families are added and it is not easy to remove them again from an existing database. In case webKnossos needs to be rolled back, it is recommended to still keep the new column families in FossilDB. [#6195](https://github.com/scalableminds/webknossos/pull/6195)
[Commits](https://github.com/scalableminds/webknossos/compare/22.07.0...HEAD)

### Postgres Evolutions:
4 changes: 4 additions & 0 deletions docs/publications.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@
The following publications used webKnossos for exploring large 3D electron-microscopy (EM) and light-microscopy (LM) datasets as well as collaboratively generating annotations or other tasks. Please [get in touch with us](mailto:[email protected]) if your publication is missing.

## 2022
* Sahil Loomba, Jakob Straehle, Vijayan Gangadharan, Natalie Heike, Abdelrahman Khalifa, Alessandro Motta, Niansheng Ju, Meike Sievers, Jens Gempt, Hanno S. Meyer & Moritz Helmstaedter.
Connectomic comparison of mouse and human cortex.
[Science (2022). DOI: 10.1126/science.abo0924](https://www.science.org/doi/abs/10.1126/science.abo0924).

* Carles Bosch, Tobias Ackels, Alexandra Pacureanu, Yuxin Zhang, Christopher J. Peddie, Manuel Berning, Norman Rzepka, Marie-Christine Zdora, Isabell Whiteley, Malte Storm, Anne Bonnin, Christoph Rau, Troy Margrie, Lucy Collinson & Andreas T. Schaefer.
Functional and multiscale 3D structural investigation of brain tissue through correlative in vivo physiology, synchrotron micro-tomography and volume electron microscopy.
[Nature Communications (2022) DOI: 10.1038/s41467-022-30199-6.](http://doi.org/10.1038/s41467-022-30199-6)
Expand Down
10 changes: 6 additions & 4 deletions frontend/javascripts/admin/user/user_list_view.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -444,10 +444,12 @@ class UserListView extends React.PureComponent<Props, State> {
<EditableTextLabel
value={user.email}
label="Email"
rules={{
message: messages["auth.registration_email_invalid"],
type: "email",
}}
rules={[
{
message: messages["auth.registration_email_invalid"],
type: "email",
},
]}
onChange={(newEmail) => {
if (newEmail !== user.email) {
Modal.confirm({
Expand Down
6 changes: 6 additions & 0 deletions frontend/javascripts/messages.ts
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,12 @@ instead. Only enable this option if you understand its effect. All layers will n
"tracing.read_only_mode_notification":
"This annotation is in read-only mode and cannot be updated.",
"tracing.volume_missing_segmentation": "Volume is allowed, but segmentation does not exist.",
"tracing.volume_layer_name_duplication":
"This layer name already exists! Please change it to resolve duplicates.",
"tracing.volume_layer_name_includes_invalid_characters": (disallowedCharacters: string) =>
`This layer name includes the disallowed character${
disallowedCharacters.length > 1 ? "s" : ""
} "${disallowedCharacters}". Please delete ${disallowedCharacters.length > 1 ? "them" : "it"}.`,
"tracing.delete_initial_node": "Do you really want to delete the initial node?",
"tracing.delete_tree": "Do you really want to delete the whole tree?",
"tracing.delete_tree_with_initial_node":
Expand Down
37 changes: 24 additions & 13 deletions frontend/javascripts/oxalis/model/accessors/flycam_accessor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -128,27 +128,38 @@ export function _getMaximumZoomForAllResolutions(
maximumCapacity: number,
initializedGpuFactor: number,
): Array<number> {
// maximumIterationCount is used as an upper limit to avoid an endless loop, in case
// the following while loop causes havoc for some reason (e.g., because
// the calculated bucket size isn't strictly increasing anymore). It means,
// that even with the best GPU specs and biggest dataset (i.e., many magnifications),
// wk will at most zoom out until a zoom value of ZOOM_STEP_INTERVAL**maximumIterationCount.
// With the current values, this would indicate a maximum zoom value of ~ 35 000, meaning
// that ~ 15 different magnifications (~ log2 of 35000) are supported properly.
const maximumIterationCount = 120;
let currentIterationCount = 0;
// This function determines which zoom value ranges are valid for the given magnifications.
// The calculation iterates through several zoom values and checks the required bucket capacity
// against the capacity supported by the GPU.
// In each iteration, the last zoom value is incremented as if the user performed a zoom-out action.
//
// In theory, we could simply abort the loop once a maximum zoom value was found for all magnifications.
// However, to avoid an infinite loop in case of violated assumptions (e.g., because the calculated
// bucket size isn't strictly increasing anymore), we calculate an iteration limit.

// For that limit, we specify how many magnifications we want to support at least.
// 15 magnifications means that the highest mag would be something like [32768, 32768, 1024].
const MAX_SUPPORTED_MAGNIFICATION_COUNT = 15;
// From that, we calculate the theoretical maximum zoom value. The dataset scale is taken into account,
// because the entire scene is scaled with that.
const maxSupportedZoomValue = 2 ** MAX_SUPPORTED_MAGNIFICATION_COUNT * Math.max(...datasetScale);
// Since the viewports can be quite large, it can happen that even a zoom value of 1 is not feasible.
// That's why we start the search with a smaller value than 1. We use the ZOOM_STEP_INTERVAL factor
// to ensure that the calculated thresholds correspond to the normal zoom behavior.
let maxZoomValue = 1 / ZOOM_STEP_INTERVAL ** 20;
const ZOOM_IN_START_EXPONENT = 20;
let currentMaxZoomValue = 1 / ZOOM_STEP_INTERVAL ** ZOOM_IN_START_EXPONENT;
const maximumIterationCount =
Math.log(maxSupportedZoomValue) / Math.log(ZOOM_STEP_INTERVAL) + ZOOM_IN_START_EXPONENT;

let currentIterationCount = 0;
let currentResolutionIndex = 0;
const maxZoomValueThresholds = [];

while (
currentIterationCount < maximumIterationCount &&
currentResolutionIndex < resolutions.length
) {
const nextZoomValue = maxZoomValue * ZOOM_STEP_INTERVAL;
const nextZoomValue = currentMaxZoomValue * ZOOM_STEP_INTERVAL;
const nextCapacity = calculateTotalBucketCountForZoomLevel(
viewMode,
loadingStrategy,
Expand All @@ -164,11 +175,11 @@ export function _getMaximumZoomForAllResolutions(
);

if (nextCapacity > maximumCapacity) {
maxZoomValueThresholds.push(maxZoomValue);
maxZoomValueThresholds.push(currentMaxZoomValue);
currentResolutionIndex++;
}

maxZoomValue = nextZoomValue;
currentMaxZoomValue = nextZoomValue;
currentIterationCount++;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import {
getSegmentationLayerByName,
getSegmentationLayers,
getVisibleSegmentationLayer,
getDataLayers,
} from "oxalis/model/accessors/dataset_accessor";
import { getMaxZoomStepDiff } from "oxalis/model/bucket_data_handling/loading_strategy_logic";
import { getFlooredPosition, getRequestLogZoomStep } from "oxalis/model/accessors/flycam_accessor";
Expand Down Expand Up @@ -94,6 +95,18 @@ export function getReadableNameByVolumeTracingId(
return volumeDescriptor.name || "Volume Layer";
}

export function getAllReadableLayerNames(dataset: APIDataset, tracing: Tracing) {
const allReadableLayerNames = getDataLayers(dataset).map((currentLayer) =>
"tracingId" in currentLayer && currentLayer.tracingId != null
? getReadableNameByVolumeTracingId(tracing, currentLayer.tracingId)
: currentLayer.name,
);
if (tracing.skeleton != null) {
allReadableLayerNames.push("Skeletons");
}
return allReadableLayerNames;
}

function getSegmentationLayerForTracing(
state: OxalisState,
volumeTracing: VolumeTracing,
Expand Down
Loading

0 comments on commit 3f3421e

Please sign in to comment.