{"name":"napari-storm","display_name":"Napari STORM Plugin","visibility":"public","icon":null,"categories":[],"schema_version":"0.3.0","on_activate":null,"on_deactivate":null,"contributions":{"commands":[{"id":"napari-storm.show_dock","title":"Show STORM Analysis Dock","python_name":"napari_storm._dock_widget:napari_storm","short_title":null,"category":null,"icon":null,"enablement":null},{"id":"napari-storm.read","title":"Read localization file","python_name":"napari_storm._reader:napari_get_reader","short_title":null,"category":null,"icon":null,"enablement":null}],"readers":[{"command":"napari-storm.read","filename_patterns":["*.h5","*.hdf5","*.hdf","*.yaml","*.csv","*.smlm","*.npy","*.json","*.mfx","*.mat","*.pmx","*.ns","*.test"],"accepts_directories":true}],"writers":null,"widgets":[{"command":"napari-storm.show_dock","display_name":"Napari STORM","autogenerate":false}],"sample_data":null,"themes":null,"menus":{},"submenus":null,"keybindings":null,"configurations":{}},"package_metadata":{"metadata_version":"2.4","name":"napari-storm","version":"3.1.0","dynamic":["license-file"],"platform":null,"supported_platform":null,"summary":"A Napari plugin for visualizing single-molecule localization microscopy data.","description":"![napari-storm](https://raw.githubusercontent.com/napari-storm/napari-storm/main/resources/napari_storm_logo.png)\n\n# napari-storm\n\nA plugin for interactive visualization of Single Molecule Localization Microscopy (SMLM) datasets with Napari.  This package uses the (currently experimental) Napari Particles layer developed by Martin Weigert (https://github.com/maweigert).\n\n----------------------------------\n\n\n## Installation\n\nnapari-storm needs Python 3.10–3.12. It's recommended to install it into its\nown environment, e.g. with conda:\n\n    conda create --name napari-storm python=3.11 pip\n\n    conda activate napari-storm\n\nThen install from PyPI. The `[pyqt6]` extra brings in napari's Qt backend;\nwithout an extra, no Qt binding is installed and napari cannot open a window\n(use `[pyside6]` if you prefer PySide):\n\n    pip install \"napari-storm[pyqt6]\"\n\nTo work on napari-storm itself, install from a clone instead:\n\n    git clone https://github.com/napari-storm/napari-storm\n\n    cd napari-storm\n\n    pip install -e \".[dev,pyqt6]\"\n\n\n\n## Usage\n\n### Starting napari-storm\nWith the environment active -- an Anaconda Prompt after `conda activate napari-storm`, for\nexample -- run:\n\n    napari-storm\n\nThis opens napari with the napari-storm dock already docked on the right. `python -m napari_storm`\ndoes the same, and from a clone so does `python napari_start.py`.\n\nOr start napari itself and open the dock from the Plugins menu:\n\n    napari\n\n### Importing data into napari-storm\nDrag & drop onto the dock widget supported file types (Picasso, ThunderSTORM, MINFLUX, etc.) directly into napari or use the import file dialog.\n\nMINFLUX data is read in both Abberior layouts: the original one, and the flat\nlayout Imspector writes from **24.10** onwards. The newer one is accepted as\n`.npy`, `.json`, `.mat`, `.zarr`, and as pyMINFLUX's own `.pmx`. Which layout a\nfile uses is determined from the file, so there is nothing to choose. A `.zarr`\ndataset is a folder rather than a file; since a file dialog cannot select one,\npick any file inside it and the whole dataset opens.\n\nIf your file is not covered:\n\n\n- one can either write a custom import function by following the instructions in\n  `src/napari_storm/localization_dataset_types/Custom_Import.py`, then run it with the **Custom** button\n- try the (experimental) **Auto-detect Format** button, which will try to extract the headers of your file\nand lets you assign your data. This should work for any .hdf5, .csv or .npy file.\n\n### Basic usage\nWhen a dataset is imported you should be able to see five tabs in the widget: Data Controls, File Infos, Decorators,\nData Filter and Data adjustment. In the data controls tab you can change the render range, load\na new file, merge the currently open dataset with another file and change your view.\nThere is also the option to change the colormap, add a scalebar or activate rainbow colour coding (for 3D datasets),\nand adjust the contrast with the slider beneath the colormap. The contrast acts on the reconstruction itself -- the\nGaussians summed where they overlap -- so its lower handle hides sparse regions while keeping dense ones, and its upper\nhandle sets how many overlapping localizations it takes to reach full brightness.\n\nThe File Infos tab simply displays information on the currently opened datasets.\n\nIn the decorators tab you can switch the rendering style from the scientific Gaussian to an alternative visualisation -- points, spheres,\nuncertainty ellipses and more -- connect each MINFLUX trace's localizations in the order they were measured, activate a grid plane\nand customize a lot of things for the grid as well as the render range box.\n\nLast but not least is the data filter tab, which gives you the option to filter your displayed datasets by all properties available in the dataset.\nThere you will find two sliders, where the top one lets you change the x-range of the displayed property and the other one controls\nthe cut-off/cut-on of your filter. To apply the filter settings to the dataset simply press\none of the apply buttons.\n\n### Tips\n- Double click or drag the tabs anywhere to detach them from the window. This way you have an overview over all of them at the same time\n- For STORM/PALM ... datasets, it is possible to change the rendering options in the data controls tab to **Variable-size gaussian**, to include the uncertainty values or photon counts for the rendering\n- hold shift and drag the mouse for panning\n\n## Documentation\n\nFull documentation is at **https://napari-storm.readthedocs.io/** — a\nstep-by-step tutorial, how the renderer works, and the embedding API for\ndriving napari-storm from another application.\n\nThere is also a custom Q&A GPT for this repo specifically, available at\nhttps://chatgpt.com/g/g-68aebb6371a88191877094b48513d690-napari-storm-q-a\n\nTo build the docs locally, install the pinned toolchain (once):\n\n```bash\npip install -r docs/requirements.txt\n```\n\nThen serve them with live reload:\n\n```bash\nmkdocs serve\n```\n\n## Acknowledgements\n\nnapari-storm builds on work by others, with thanks:\n\n- **[napari-particles](https://github.com/maweigert/napari-particles)** by Martin\n  Weigert (BSD-3-Clause), the experimental Particles layer this plugin renders\n  through. The modules derived from it live in\n  `src/napari_storm/napari_particles/` and carry their own `NOTICE`.\n- **[pyMINFLUX](https://pyminflux.ethz.ch/)** by the Single Cell Facility of the\n  D-BSSE, ETH Zurich ([source](https://github.com/bsse-scf/pyMINFLUX),\n  Apache-2.0). Its `MinFluxReaderV2` is the reference for the MINFLUX layout\n  Imspector writes from 24.10 onwards: the version markers that tell the two\n  layouts apart, the per-container quirks, and the `.pmx` structure were all\n  read from it. napari-storm's reader is an independent implementation and\n  contains no pyMINFLUX code, but it would not exist without theirs having\n  documented the format first.\n\n## Issues\n\nIf you encounter any problems, please [file an issue] along with a detailed description.\n\n[file an issue]: https://github.com/napari-storm/napari-storm/issues\n","description_content_type":"text/markdown","keywords":null,"home_page":"https://github.com/napari-storm/napari-storm","download_url":null,"author":"Lenny Reinkensmeier","author_email":"lrein@live.de","maintainer":null,"maintainer_email":null,"license":"BSD-3-Clause","classifier":["Framework :: napari","Programming Language :: Python :: 3","Programming Language :: Python :: 3.10","Programming Language :: Python :: 3.11","Programming Language :: Python :: 3.12","Operating System :: OS Independent"],"requires_dist":["napari<0.8,>=0.4","qtpy","numpy","pandas","matplotlib","imageio","tifffile","h5py","vispy","scikit-image","scikit-learn","pillow","scipy","zarr<3","napari[pyqt6]<0.8,>=0.4; extra == \"pyqt6\"","PySide6; extra == \"pyside6\"","pre-commit; extra == \"dev\"","pytest; extra == \"dev\"","pytest-cov; extra == \"dev\"","pytest-qt; extra == \"dev\"","napari[all]<0.8,>=0.4; extra == \"dev\"","tox; extra == \"dev\"","twine; extra == \"dev\"","build; extra == \"dev\""],"requires_python":">=3.10","requires_external":null,"project_url":["Bug Tracker, https://github.com/napari-storm/napari-storm/issues","Documentation, https://napari-storm.readthedocs.io/","Source Code, https://github.com/napari-storm/napari-storm","User Support, https://github.com/napari-storm/napari-storm/issues"],"provides_extra":["pyqt6","pyside6","dev"],"provides_dist":null,"obsoletes_dist":null},"npe1_shim":false}