Skip to content

Commit

Permalink
Merge branch 'master' into dont-require-bytes-codec-configuration
Browse files Browse the repository at this point in the history
  • Loading branch information
frcroth authored Dec 18, 2024
2 parents 87b0a05 + cc75b60 commit 71139f0
Show file tree
Hide file tree
Showing 11 changed files with 158 additions and 17 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.unreleased.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ For upgrade instructions, please check the [migration guide](MIGRATIONS.released
- Datasets can now be renamed and can have duplicate names. [#8075](https://github.com/scalableminds/webknossos/pull/8075)
- Improved the default colors for skeleton trees. [#8228](https://github.com/scalableminds/webknossos/pull/8228)
- Allowed to train an AI model using differently sized bounding boxes. We recommend all bounding boxes to have equal dimensions or to have dimensions which are multiples of the smallest bounding box. [#8222](https://github.com/scalableminds/webknossos/pull/8222)
- Within the bounding box tool, the cursor updates immediately after pressing `ctrl`, indicating that a bounding box can be moved instead of resized. [#8253](https://github.com/scalableminds/webknossos/pull/8253)

### Fixed
- Fixed that listing datasets with the `api/datasets` route without compression failed due to missing permissions regarding public datasets. [#8249](https://github.com/scalableminds/webknossos/pull/8249)
Expand All @@ -30,6 +31,7 @@ For upgrade instructions, please check the [migration guide](MIGRATIONS.released
- Fixed that the frontend did not ensure a minimum length for annotation layer names. Moreover, names starting with a `.` are also disallowed now. [#8244](https://github.com/scalableminds/webknossos/pull/8244)
- Fixed a bug where in the add remote dataset view the dataset name setting was not in sync with the datasource setting of the advanced tab making the form not submittable. [#8245](https://github.com/scalableminds/webknossos/pull/8245)
- Fix read and update dataset route for versions 8 and lower. [#8263](https://github.com/scalableminds/webknossos/pull/8263)
- Fixed that task bounding boxes are again converted to user bounding boxes when uploading annotations via nmls. [#8280](https://github.com/scalableminds/webknossos/pull/8280)
- Added missing legacy support for `isValidNewName` route. [#8252](https://github.com/scalableminds/webknossos/pull/8252)
- Fixed some layout issues in the upload view. [#8231](https://github.com/scalableminds/webknossos/pull/8231)
- Fixed `FATAL: role "postgres" does not exist` error message in Docker compose. [#8240](https://github.com/scalableminds/webknossos/pull/8240)
Expand Down
1 change: 1 addition & 0 deletions MIGRATIONS.unreleased.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ User-facing changes are documented in the [changelog](CHANGELOG.released.md).
## Unreleased
[Commits](https://github.com/scalableminds/webknossos/compare/24.12.0...HEAD)
- Removed support for HTTP API versions 3 and 4. [#8075](https://github.com/scalableminds/webknossos/pull/8075)
- New FossilDB version `0.1.33` (docker image `scalableminds/fossildb:master__504`) is required.

### Postgres Evolutions:
- [124-decouple-dataset-directory-from-name](conf/evolutions/124-decouple-dataset-directory-from-name)
4 changes: 2 additions & 2 deletions app/models/annotation/nml/NmlParser.scala
Original file line number Diff line number Diff line change
Expand Up @@ -156,11 +156,11 @@ class NmlParser @Inject()(datasetDAO: DatasetDAO) extends LazyLogging with Proto
taskBoundingBox: Option[BoundingBox] = if (sharedParsingParameters.isTaskUpload)
parseTaskBoundingBox(parameters \ "taskBoundingBox")
else None
userBoundingBoxes = parseBoundingBoxes(parameters \ "userBoundingBox")
} yield {
var userBoundingBoxes = parseBoundingBoxes(parameters \ "userBoundingBox")
if (!sharedParsingParameters.isTaskUpload) {
parseTaskBoundingBoxAsUserBoundingBox(parameters \ "taskBoundingBox", userBoundingBoxes)
.map(asUserBoundingBox => userBoundingBoxes :+ asUserBoundingBox)
.foreach(asUserBoundingBox => userBoundingBoxes = userBoundingBoxes :+ asUserBoundingBox)
}
NmlParsedParameters(
datasetIdOpt,
Expand Down
2 changes: 1 addition & 1 deletion docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -269,7 +269,7 @@ services:

# FossilDB
fossildb:
image: scalableminds/fossildb:master__484
image: scalableminds/fossildb:master__504
command:
- fossildb
- -c
Expand Down
99 changes: 99 additions & 0 deletions docs/publications.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,105 @@
# Publications
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.

## 2024
* Andrea Nathansen, Matthis Clausen, Manuel Berning, Ethan MacKenzie, Yuxin Zhang, Alexandra Pacureanu, Andreas T. Schaefer, Norman Rzepka, & Carles Bosch.
Cell nuclei segmentation in mm-scale x-ray holographic nanotomography images of mouse brain tissue.
[Developments in X-Ray Tomography XV. Vol. 13152. SPIE (2024). DOI: 10.1117/12.3028309](https://doi.org/10.1117/12.3028309)
**View data [#1](https://wklink.org/9238) [#2](https://wklink.org/9123)** in WEBKNOSSOS

* Anja Günther, Silke Haverkamp, Stephan Irsen, Paul V. Watkins, Karin Dedek, Henrik Mouritsen & Kevin L. Briggman.
Species–specific circuitry of double cone photoreceptors in two avian retinas.
[Communications Biology 7.1 (2024). DOI: 10.1038/s42003-024-06697-2](https://doi.org/10.1038/s42003-024-06697-2)
[**View data**](https://webknossos.mpinb.mpg.de/datasets/Briggman%20Lab/robin-retina-compressed-3/view#145000,59392,512,0,1.3) in WEBKNOSSOS

* Yan Lu, Jing Liu, Bei Li, Haoyu Wang , Fangfang Wang , Shengxiong Wang , Hao Wu , Hua Han & Yunfeng Hua.
Spatial patterns of noise-induced inner hair cell ribbon loss in the mouse mid-cochlea.
[Iscience 27.2 (2024). DOI: 10.1016/j.isci.2024.108825](https://doi.org/10.1016/j.isci.2024.108825)
**View data
[#1](https://wklink.org/3892)
[#2](https://wklink.org/7172)
[#3](https://wklink.org/1329)
[#4](https://wklink.org/9122)
[#5](https://wklink.org/7842)
[#6](https://wklink.org/1728)** in WEBKNOSSOS

* Meike Sievers, Alessandro Motta, Martin Schmidt, Yagmur Yener, Sahil Loomba, Kun Song, Johannes Bruett, & Moritz Helmstaedter.
Connectomic reconstruction of a cortical column.
[bioRxiv (2024). DOI: 2024.03.22.586254](https://doi.org/10.1101/2024.03.22.586254)

* Martin Schmidt, Alessandro Motta, Meike Sievers & Moritz Helmstaedter.
RoboEM: automated 3D flight tracing for synaptic-resolution connectomics.
[Nature Methods 21.5 (2024). DOI: 10.1038/s41592-024-02226-5](https://doi.org/10.1038/s41592-024-02226-5)

* Rosanna P. Sammons, Mourat Vezir, Laura Moreno-Velasquez, Gaspar Cano, Marta Orlando, Meike Sievers, Eleonora Grasso, Verjinia D. Metodieva, Richard Kempter, Helene Schmidt, & Dietmar Schmitz.
Structure and function of the hippocampal CA3 module.
[Proceedings of the National Academy of Sciences 121.6 (2024). DOI: 10.1073/pnas.2312281120](https://doi.org/10.1073/pnas.2312281120)

* Julia M. Michalska, Julia Lyudchik, Philipp Velicky, Hana Štefaničková, Jake F. Watson, Alban Cenameri, Christoph Sommer, Nicole Amberg, Alessandro Venturino, Karl Roessler, Thomas Czech, Romana Höftberger, Sandra Siegert, Gaia Novarino, Peter Jonas & Johann G. Danzl.
Imaging brain tissue architecture across millimeter to nanometer scales.
[Nature Biotechnology 42.7 (2024). DOI: 10.1038/s41587-023-01911-8](https://doi.org/10.1038/s41587-023-01911-8)

* Hongcheng Mai, Jie Luo, Luciano Hoeher, Rami Al-Maskari, Izabela Horvath, Ying Chen, Florian Kofler, Marie Piraud, Johannes C. Paetzold, Jennifer Modamio, Mihail Todorov, Markus Elsner, Farida Hellal & Ali Ertürk.
Whole-body cellular mapping in mouse using standard IgG antibodies.
[Nature Biotechnology 42.4 (2024). DOI: 10.1038/s41587-023-01846-0](https://doi.org/10.1038/s41587-023-01846-0)
[**View data**](https://webknossos.org/publications/64aeaa06fcf33704ca101ceb) in WEBKNOSSOS.

* Kievits, Arent J., Duinkerken, B. H. Peter, Lane, Ryan, de Heus, Cecilia, van Beijeren Bergen en Henegouwen, Daan, Höppener, Tibbe, Wolters, Anouk H. G., Liv, Nalan, Giepmans, Ben N. G. and Hoogenboom, Jacob P..
FAST-EM array tomography: a workflow for multibeam volume electron microscopy
[Methods in Microscopy (2024). DOI: 10.1515/mim-2024-0005](https://doi.org/10.1515/mim-2024-0005)

* Yan Lu, Yi Jiang, Fangfang Wang, Hao Wu & Yunfeng Hua.
Electron Microscopic Mapping of Mitochondrial Morphology in the Cochlear Nerve Fibers.
[Journal of the Association for Research in Otolaryngology 25.4 (2024). DOI: 10.1007/s10162-024-00957-y](https://doi.org/10.1007/s10162-024-00957-y)

* Vandana Sampathkumar, Kevin P. Koster, Briana J. Carroll, S. Murray Sherman, & Narayanan Kasthuri.
Synaptic integration of somatosensory and motor cortical inputs onto spiny projection neurons of mice caudoputamen.
[European Journal of Neuroscience 60.8 (2024). DOI: 10.1111/ejn.16538](https://doi.org/10.1111/ejn.16538)

* Angeles Salles, Emely Loscalzo, Jessica Montoya, Rosa Mendoza, Kevin M. Boergens & Cynthia F. Moss.
Auditory processing of communication calls in interacting bats.
[Iscience 27.6 (2024). DOI: 10.1016/j.isci.2024.109872](https://doi.org/10.1016/j.isci.2024.109872)

* Wen-Qing Huang, Haibin Sheng, Haoyu Wang, Yumeng Qi, Fangfang Wang, & Yunfeng Hua.
Volume electron microscopy reveals age-related ultrastructural differences of globular bush cell axons in mouse central auditory system.
[Neurobiology of Aging 136 (2024). DOI: 10.1016/j.neurobiolaging.2024.01.016](https://doi.org/10.1016/j.neurobiolaging.2024.01.016)

* Yi Jiang, Haoyu Wang, Kevin Boergens, Norman Rzepka, Fangfang Wang, & Yunfeng Hua.
Efficient cell-wide mapping of mitochondria in electron microscopic volumes using webKnossos.
[bioRxiv (2024). DOI: 10.1101/2024.10.20.619271](https://doi.org/10.1101/2024.10.20.619271)

* Yuh-Tarng Chen, Dominica de Thomas Wagner, Alastair J. Loutit, Ali Nourizonoz, Mary-Claude Croisier-Coeytaux, Jérôme Blanc, Graham Knott, Kuo-Sheng Lee, & Daniel Huber.
Lamellar Schwann cells in the Pacinian corpuscle potentiate vibration perception.
[bioRxiv (2024). DOI: 10.1101/2024.08.23.609459](https://doi.org/10.1101/2024.08.23.609459)

* Rafael Luján, Marta Turegano-Lopez, Carolina Aguado, & Angel Merchan-Perez.
Two- and three-dimensional electron microscopy techniques: powerful tools for studying the brain under physiological and pathological conditions.
[Advanced Technology in Neuroscience 1.2 (2024). DOI: 10.4103/ATN.ATN-D-24-00009](https://doi.org/10.4103/atn.atn-d-24-00009)

* Nare Karagulyan, Maja Überegger, Yumeng Qi, Norbert Babai, Florian Hofer, Lejo Johnson Chacko, Fangfang Wang, Maria Luque, Rudolf Glueckert, Anneliese Schrott-Fischer, Yunfeng Hua, Tobias Moser, & Christine Bandtlow.
Probing the role of synaptic adhesion molecule RTN4RL2 in setting up cochlear connectivity.
[bioRxiv (2024). DOI: 10.1101/2024.09.16.613011](https://doi.org/10.1101/2024.09.16.613011)

* Kristina D Micheva, Anish K Simhal, Jenna Schardt, Stephen J Smith, Richard J Weinberg, & Scott F Owen.
Data-driven synapse classification reveals a logic of glutamate receptor composition.
[bioRxiv (2024). DOI: 10.1101/2024.12.11.628056](https://doi.org/10.1101/2024.12.11.628056)

* Guangmei Liu, Shruthi Bandyadka, & Kimberly McCall.
Protocol to analyze 3D neurodegenerative vacuoles in Drosophila melanogaster.
[STAR protocols 5.2 (2024). DOI: 10.1016/j.xpro.2024.103017](https://doi.org/10.1016/j.xpro.2024.103017)

* Jakob Reichmann, Jonas Franz, Marina Eckermann, Katja Schulz, Brit Mollenhauer, Christine Stadelmann, & Tim Salditt.
3D imaging of neuronal inclusions and protein aggregates in human neurodegeneration by multiscale X-ray phase-contrast tomography.
[medRxiv (2024). DOI: 10.1101/2024.03.26.24304193](https://doi.org/10.1101/2024.03.26.24304193)

* Tay Won Shin, Hao Wang, Chi Zhang, Bobae An, Yangning Lu, Elizabeth Zhang, Xiaotang Lu, Emmanouil D. Karagiannis, Jeong Seuk Kang, Amauche Emenari, Panagiotis Symvoulidis, Shoh Asano, Leanne Lin, Emma K. Costa; IMAXT Grand Challenge Consortium, Adam H. Marblestone, Narayanan Kasthuri, Li-Huei Tsai, Edward S. Boyden.
Dense, Continuous Membrane Labeling and Expansion Microscopy Visualization of Ultrastructure in Tissues.
[bioRxiv (2024). DOI: 10.1101/2024.03.07.583776](https://doi.org/10.1101/2024.03.07.583776)

* Norman Rzepka.
Next-generation file formats (NGFF), RFC 2: Specification for using Zarr v3 in OME-Zarr
[NGFF RFC 2 (2024)](https://ngff.openmicroscopy.org/rfc/2/index.html).

## 2023
* Tri M. Nguyen, Logan A. Thomas, Jeff L. Rhoades, Ilaria Ricchi, Xintong Cindy Yuan, Arlo Sheridan, David G. C. Hildebrand, Jan Funke, Wade G. Regehr & Wei-Chung Allen Lee.
Structured cerebellar connectivity supports resilient pattern separation.
Expand Down
2 changes: 1 addition & 1 deletion fossildb/version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.1.31
0.1.33
21 changes: 15 additions & 6 deletions frontend/javascripts/libs/input.ts
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ export class InputKeyboardNoLoop {
supportInputElements?: boolean;
},
extendedCommands?: KeyBindingMap,
keyUpBindings?: KeyBindingMap,
) {
if (options) {
this.supportInputElements = options.supportInputElements || this.supportInputElements;
Expand All @@ -100,16 +101,17 @@ export class InputKeyboardNoLoop {
document.addEventListener("keydown", this.preventBrowserSearchbarShortcut);
this.attach(EXTENDED_COMMAND_KEYS, this.toggleExtendedMode);
// Add empty callback in extended mode to deactivate the extended mode via the same EXTENDED_COMMAND_KEYS.
this.attach(EXTENDED_COMMAND_KEYS, _.noop, true);
this.attach(EXTENDED_COMMAND_KEYS, _.noop, _.noop, true);
for (const key of Object.keys(extendedCommands)) {
const callback = extendedCommands[key];
this.attach(key, callback, true);
this.attach(key, callback, _.noop, true);
}
}

for (const key of Object.keys(initialBindings)) {
const callback = initialBindings[key];
this.attach(key, callback);
const keyUpCallback = keyUpBindings != null ? keyUpBindings[key] : _.noop;
this.attach(key, callback, keyUpCallback);
}
}

Expand Down Expand Up @@ -141,7 +143,12 @@ export class InputKeyboardNoLoop {
}
}

attach(key: KeyboardKey, callback: KeyboardHandler, isExtendedCommand: boolean = false) {
attach(
key: KeyboardKey,
keyDownCallback: KeyboardHandler,
keyUpCallback: KeyboardHandler = _.noop,
isExtendedCommand: boolean = false,
) {
const binding = [
key,
(event: KeyboardEvent) => {
Expand All @@ -163,13 +170,15 @@ export class InputKeyboardNoLoop {
}

if (!event.repeat) {
callback(event);
keyDownCallback(event);
} else {
event.preventDefault();
event.stopPropagation();
}
},
_.noop,
(event: KeyboardEvent) => {
keyUpCallback(event);
},
];
if (isExtendedCommand) {
KeyboardJS.withContext("extended", () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -265,7 +265,7 @@ export function createBoundingBoxAndGetEdges(
}

export const highlightAndSetCursorOnHoveredBoundingBox = _.throttle(
(position: Point2, planeId: OrthoView, event: MouseEvent) => {
(position: Point2, planeId: OrthoView, event: MouseEvent | KeyboardEvent) => {
const hoveredEdgesInfo = getClosestHoveredBoundingBox(position, planeId);
// Access the parent element as that is where the cursor style property is set
const inputCatcher = document.getElementById(`inputcatcher_${planeId}`)?.parentElement;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ import {
import { showToastWarningForLargestSegmentIdMissing } from "oxalis/view/largest_segment_id_modal";
import { getDefaultBrushSizes } from "oxalis/view/action-bar/toolbar_view";
import { userSettings } from "types/schemas/user_settings.schema";
import { highlightAndSetCursorOnHoveredBoundingBox } from "../combinations/bounding_box_handlers";

function ensureNonConflictingHandlers(
skeletonControls: Record<string, any>,
Expand Down Expand Up @@ -183,12 +184,29 @@ class BoundingBoxKeybindings {
static getKeyboardControls() {
return {
c: () => Store.dispatch(addUserBoundingBoxAction()),
meta: BoundingBoxKeybindings.createKeyDownAndUpHandler(),
ctrl: BoundingBoxKeybindings.createKeyDownAndUpHandler(),
};
}

static handleUpdateCursor = (event: KeyboardEvent) => {
const { viewModeData, temporaryConfiguration } = Store.getState();
const { mousePosition } = temporaryConfiguration;
if (mousePosition == null) return;
highlightAndSetCursorOnHoveredBoundingBox(
{ x: mousePosition[0], y: mousePosition[1] },
viewModeData.plane.activeViewport,
event,
);
};

static getExtendedKeyboardControls() {
return { x: () => setTool(AnnotationToolEnum.BOUNDING_BOX) };
}

static createKeyDownAndUpHandler() {
return (event: KeyboardEvent) => BoundingBoxKeybindings.handleUpdateCursor(event);
}
}

function createDelayAwareMoveHandler(multiplier: number) {
Expand Down Expand Up @@ -364,6 +382,7 @@ class PlaneController extends React.PureComponent<Props> {
});
const {
baseControls: notLoopedKeyboardControls,
keyUpControls,
extendedControls: extendedNotLoopedKeyboardControls,
} = this.getNotLoopedKeyboardControls();
const loopedKeyboardControls = this.getLoopedKeyboardControls();
Expand Down Expand Up @@ -397,6 +416,7 @@ class PlaneController extends React.PureComponent<Props> {
notLoopedKeyboardControls,
{},
extendedNotLoopedKeyboardControls,
keyUpControls,
);
this.storePropertyUnsubscribers.push(
listenToStoreProperty(
Expand Down Expand Up @@ -501,7 +521,11 @@ class PlaneController extends React.PureComponent<Props> {
this.props.tracing.volumes.length > 0
? VolumeKeybindings.getKeyboardControls()
: emptyDefaultHandler;
const { c: boundingBoxCHandler } = BoundingBoxKeybindings.getKeyboardControls();
const {
c: boundingBoxCHandler,
meta: boundingBoxMetaHandler,
ctrl: boundingBoxCtrlHandler,
} = BoundingBoxKeybindings.getKeyboardControls();
ensureNonConflictingHandlers(skeletonControls, volumeControls);
const extendedSkeletonControls =
this.props.tracing.skeleton != null ? SkeletonKeybindings.getExtendedKeyboardControls() : {};
Expand All @@ -524,6 +548,12 @@ class PlaneController extends React.PureComponent<Props> {
volumeCHandler,
boundingBoxCHandler,
),
ctrl: this.createToolDependentKeyboardHandler(null, null, boundingBoxCtrlHandler),
meta: this.createToolDependentKeyboardHandler(null, null, boundingBoxMetaHandler),
},
keyUpControls: {
ctrl: this.createToolDependentKeyboardHandler(null, null, boundingBoxCtrlHandler),
meta: this.createToolDependentKeyboardHandler(null, null, boundingBoxMetaHandler),
},
extendedControls,
};
Expand Down
4 changes: 2 additions & 2 deletions tools/hosting/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ version: "2.2"

services:
webknossos:
image: scalableminds/webknossos:${DOCKER_TAG:-23.04.0}
image: scalableminds/webknossos:${DOCKER_TAG:-24.12.0}
ports:
- "127.0.0.1:9000:9000"
depends_on:
Expand Down Expand Up @@ -58,7 +58,7 @@ services:

# FossilDB
fossildb:
image: scalableminds/fossildb:master__489
image: scalableminds/fossildb:master__504
command:
- fossildb
- -c
Expand Down
6 changes: 3 additions & 3 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -9330,11 +9330,11 @@ __metadata:
linkType: hard

"nanoid@npm:^3.3.1":
version: 3.3.2
resolution: "nanoid@npm:3.3.2"
version: 3.3.8
resolution: "nanoid@npm:3.3.8"
bin:
nanoid: bin/nanoid.cjs
checksum: 10c0/48a0e9e9f80ced7a7eedf4017236e355eb48284b2bc65e7d75df6348e679b5762ce2e4b375977222c9b4399729a4e564c53bcde814d405c135b0f77a24ecb27c
checksum: 10c0/4b1bb29f6cfebf3be3bc4ad1f1296fb0a10a3043a79f34fbffe75d1621b4318319211cd420549459018ea3592f0d2f159247a6f874911d6d26eaaadda2478120
languageName: node
linkType: hard

Expand Down

0 comments on commit 71139f0

Please sign in to comment.