{"name":"napari-nd2-spectral-ome-zarr","display_name":"ND2 Spectral OME-Zarr","visibility":"public","icon":"","categories":[],"schema_version":"0.2.1","on_activate":null,"on_deactivate":null,"contributions":{"commands":[{"id":"napari-nd2-spectral-ome-zarr.get_reader","title":"Open ND2 or OME-Zarr spectral image","python_name":"napari_nd2_spectral_ome_zarr._reader:napari_get_reader","short_title":null,"category":null,"icon":null,"enablement":null},{"id":"napari-nd2-spectral-ome-zarr.widget","title":"ND2 Spectral Export","python_name":"napari_nd2_spectral_ome_zarr._widget:Nd2SpectralWidget","short_title":null,"category":null,"icon":null,"enablement":null},{"id":"napari-nd2-spectral-ome-zarr.ome_zarr_browser","title":"OME-Zarr Browser","python_name":"napari_nd2_spectral_ome_zarr._ome_zarr_browser:OmeZarrBrowserWidget","short_title":null,"category":null,"icon":null,"enablement":null},{"id":"napari-nd2-spectral-ome-zarr.spectral_viewer","title":"Spectral Viewer","python_name":"napari_nd2_spectral_ome_zarr._spectral_viewer:SpectralViewerWidget","short_title":null,"category":null,"icon":null,"enablement":null},{"id":"napari-nd2-spectral-ome-zarr.spectral_analysis","title":"Spectral Analysis","python_name":"napari_nd2_spectral_ome_zarr._spectral_analysis:SpectralAnalysisWidget","short_title":null,"category":null,"icon":null,"enablement":null},{"id":"napari-nd2-spectral-ome-zarr.spatial_ratio_analysis","title":"Spatial Ratio Analysis","python_name":"napari_nd2_spectral_ome_zarr._spatial_ratio_analysis:SpatialRatioAnalysisWidget","short_title":null,"category":null,"icon":null,"enablement":null}],"readers":[{"command":"napari-nd2-spectral-ome-zarr.get_reader","filename_patterns":["*.nd2","*.zarr","*.ome.zarr"],"accepts_directories":true}],"writers":null,"widgets":[{"command":"napari-nd2-spectral-ome-zarr.widget","display_name":"ND2 Spectral Export","autogenerate":false},{"command":"napari-nd2-spectral-ome-zarr.ome_zarr_browser","display_name":"OME-Zarr Browser","autogenerate":false},{"command":"napari-nd2-spectral-ome-zarr.spectral_viewer","display_name":"Spectral Viewer","autogenerate":false},{"command":"napari-nd2-spectral-ome-zarr.spectral_analysis","display_name":"Spectral Analysis","autogenerate":false},{"command":"napari-nd2-spectral-ome-zarr.spatial_ratio_analysis","display_name":"Spatial Ratio Analysis","autogenerate":false}],"sample_data":null,"themes":null,"menus":{},"submenus":null,"keybindings":null,"configuration":[]},"package_metadata":{"metadata_version":"2.4","name":"napari-nd2-spectral-ome-zarr","version":"1.5.1","dynamic":["license-file"],"platform":null,"supported_platform":null,"summary":"A napari plugin for Nikon ND2 spectral imaging workflows, including ND2-to-OME-Zarr conversion, OME-Zarr reading, spectral visualization, and ROI-based analysis across 400-740 nm.","description":"# napari-nd2-spectral-ome-zarr\n\nThis napari plugin supports spectral fluorescence imaging workflows for\nsolvatochromic dye analysis (e.g., Nile Red) across the visible emission\nrange (~400–740 nm). It provides ND2-to-OME-Zarr conversion, ROI-based\nspectral extraction, kernel-based spatial ratio analysis, emission-ratio\nanalysis, and aggregation from ROI to image-level and animal-level datasets.\n\n## Supported microscopy systems\n\nTested with spectral ND2 datasets generated from:\n\n- Nikon A1 spectral detector systems\n- Nikon AX spectral detector systems\n\n## Plugin Overview\n\nThe plugin is organized as 5 subplugins:\n\n1. `ND2 Spectral Export`\n- convert single files or batches from ND2 to OME-Zarr\n- preserve relative folder structure during batch export\n- track per-file conversion status, output paths, and failures\n\n2. `OME-Zarr Browser`\n- browse, filter, validate, and open single or batch OME-Zarr datasets from a dedicated browser widget\n- validate image structure and dimensions such as axes order, shape, and wavelength metadata\n- support whole-word search, dataset-type filtering, and fast row-based opening for spectral and non-spectral datasets\n- optionally load visible, truecolor, and raw spectral views with preview-mode support and background-cleaned truecolor rendering\n\n3. `Spectral Viewer`\n- visualize spectral images as truecolor using visible-wavelength hue mapping\n- provide a single-channel grayscale image for morphology review and machine-learning workflows\n- read spectral intensity versus wavelength in normalized or absolute modes\n- support ROI generation and ROI-based spectral extraction\n\n4. `Spectral Analysis`\n- collect stored ROI datasets for downstream analysis\n- compute emission-ratio metrics using a user-defined split wavelength\n- support Student's t-test and one-way or two-way ANOVA\n- support blind-group analysis using PCA, feature comparison, user-selected clustering, and p-value statistics\n\n5. `Spatial Ratio Analysis`\n- compute kernel-based spatial ratio measurements within prepared ROI contexts\n- support shape-only, labels-only, or shape-refined-by-label kernel analysis\n- export raw kernel tables and summary tables to CSV\n- send spatial-ratio summaries into the shared analysis dataset store for downstream statistics\n\nFeatures:\n\n- Read `.nd2` files into napari\n- Browse and open `.zarr` and `.ome.zarr` datasets through the dedicated `OME-Zarr Browser`\n- Build an estimated truecolor RGB view for spectral ranges spanning roughly 400 nm to 740 nm\n- Optionally auto-clean background during truecolor loading with low, medium, or high strength\n- Export the loaded ND2 spectral cube to OME-Zarr with multiscales and wavelength metadata\n- Plot ROI spectra from spectral OME-Zarr layers\n- Keep per-image ROI spectral datasets in memory during the napari session\n- Export stored ROI datasets and analysis tables to CSV\n- Run split-wavelength Nile Red ratio analysis, aggregation, and group comparison in a dedicated analysis panel\n- Run kernel-based spatial ratio analysis with optional blank subtraction and exportable summary tables\n\nThe plugin is designed around 2D spectral images and keeps `T`, `C`, `Z`, `Y`, `X` axis semantics explicit during export.\n\n## Installation\n\nInstall the plugin in a Python environment that can run napari:\n\n```bash\npip install -e .\n```\n\nThen start napari and open the plugin widgets from the Plugins menu.\n\n## Interface Preview\n\nThe screenshot below shows the main `ND2 Spectral Export` workflow used for ND2-to-OME-Zarr conversion.\n\n![ND2 Spectral Export workflow](docs/nd2_spectral_export_workflow.png)\n\nHighlighted areas:\n\n1. The conversion section defines the `ND2 source` and `OME-Zarr output` used for ND2-to-OME-Zarr export.\n2. `Convert To OME-Zarr` runs the current export job for the dropped source selection.\n3. The table lists queued ND2 files, conversion status, output locations, and per-file failures.\n\nAdditional screenshots and supporting project assets can be stored and referenced from [`docs/`](docs/).\n\n## Intended users\n\nThis plugin is designed for researchers working with spectral fluorescence\nmicroscopy datasets, especially solvatochromic probes such as Nile Red\nfor myelin physicochemical analysis. It supports workflows involving:\n\n- Nikon spectral ND2 datasets\n- OME-Zarr spectral cubes\n- ROI-based emission ratio measurements\n- blinded experimental grouping (PCA)\n- multi-image aggregation across animals\n\n## Dock Widgets\n\nThe plugin now exposes 5 napari dock widgets:\n\n- `ND2 Spectral Export`\n- `OME-Zarr Browser`\n- `Spectral Viewer`\n- `Spectral Analysis`\n- `Spatial Ratio Analysis`\n\nAll 5 widgets are configured to float by default instead of staying docked in the main napari window.\n\n## ND2 Spectral Export Workflow\n\n`ND2 Spectral Export` now handles:\n\n- ND2-to-OME-Zarr conversion from a dropped single file, subfolder, or parent folder\n- recursive batch ND2 conversion while preserving the original relative folder structure\n- root-level `manifest.json` export logging for converted datasets\n- per-file conversion status, progress, and failure reporting in the shared table\n- conversion error collection in a dedicated troubleshooting panel\n\n### ND2 conversion behavior\n\nThe ND2 conversion area uses:\n\n- `ND2 source`\n- `OME-Zarr output`\n- `Convert To OME-Zarr`\n\nConversion status is shown with:\n\n- a fixed `Status:` message bar\n- a progress bar\n- a shared table listing queued ND2 files, converted outputs, and failures\n- a `Conversion Errors` panel for troubleshooting failed files\n\nIf one ND2 file fails, the widget continues converting the remaining files and records the failed file in the error panel instead of aborting the whole batch.\n\n## OME-Zarr Browser Workflow\n\n`OME-Zarr Browser` is a dedicated dataset browser for exported or existing OME-Zarr folders. It is meant to be its own workflow for scanning, filtering, validating, and opening OME-Zarr datasets from a separate dock widget.\n\n### OME-Zarr scanning and opening\n\nThe browser supports drag-and-drop or browsing for:\n\n- one `.zarr` folder\n- one parent folder containing many `.zarr` datasets\n\nThe browser can be used for:\n\n- spectral OME-Zarr datasets with wavelength metadata\n- non-spectral OME-Zarr datasets that still need quick inspection and opening\n- mixed folders where spectral and non-spectral datasets are stored together\n\nThe user can choose which views to open for selected Zarr datasets:\n\n- `Visible sum`\n- `Truecolor`\n- `Raw spectral`\n\nIt also supports:\n\n- whole-word dataset filtering across name, path, wavelength, and shape metadata\n- multiple search keywords separated by spaces or commas\n- dataset-type filtering for `All datasets`, `Spectral only`, `Non-spectral only`, and `Errors only`\n- `Preview` loading for display layers\n- optional `Clean bg` truecolor cleanup\n- `Low`, `Med`, or `High` cleanup strength\n\nThe batch table shows:\n\n- `open`\n- `name`\n- `relative_path`\n- `axes`\n- `shape`\n- `preview_shape`\n- `wavelengths`\n- `spectral`\n\n`relative_path` is shown as the parent folder only, for example `./659/`, instead of including the `.zarr` folder name.\n\nThe user can:\n\n- browse or drag a Zarr source\n- click `Scan`\n- select one row, multiple rows, or use `Select Visible` / `Clear Visible`\n- press `Space` to toggle the selected Zarr rows\n- double-click a row to open one dataset directly\n- press `Enter` / `Return` to open checked datasets\n- open only the selected or checked datasets with `Open Checked`\n\nThe chosen `Visible sum`, `Truecolor`, `Raw spectral`, preview, and background-cleaning options are applied to all selected Zarr datasets in the batch open action.\n\n### Reader popup note\n\nIf a user opens `.zarr` files through napari's generic file-open dialog, napari may still show a `Choose reader` popup when multiple readers claim `.zarr`.\n\nThis plugin cannot reliably suppress that global napari chooser by itself.\n\nThe intended workaround is:\n\n- use the plugin's own Zarr loader in `OME-Zarr Browser`\n- open Zarr datasets from there instead of through napari's general file-open menu\n\n### Visible sum definition\n\n`Visible sum` is currently computed as the raw per-pixel mean intensity across spectral bins:\n\n- sum all channel intensities at a pixel\n- divide by the number of spectral bins\n- do not normalize\n\nSo if a pixel has 24 spectral bins, the displayed gray value is:\n\n`(bin_1 + bin_2 + ... + bin_24) / 24`\n\n## Spectral Viewer Workflow\n\n`Spectral Viewer` is where ROIs are drawn and spectral datasets are captured.\n\n### Important ROI logic\n\nROI layers are now handled per image, not globally.\n\n- Each spectral image gets its own Shapes layer named like `image_name ROI`\n- ROI numbering resets per image, so image 1 can have `ROI 1..N` and image 2 can also have `ROI 1..N`\n- ROIs from image 1 are not reused automatically for image 2\n- ROI helper visibility follows the active image context, so unrelated ROI overlays are hidden while working on one image\n- ROI layers are kept adjacent to their source spectral image in the napari layer list\n- ROI annotation text is drawn on the Shapes layer itself, without creating a separate visible annotation layer row\n\n### Spectral Viewer sections\n\nThe viewer is organized into 3 sections:\n\n- `ROI Spectrum`\n- `ROI Comparison`\n- `Pseudocolor`\n\nThis keeps ROI editing, cross-image comparison, and pseudocolor generation separated.\n\n### Recommended step-by-step use\n\n1. Select a spectral image layer.\n2. Click `Prepare Selected ROI` for the current image, or `Prepare ROI Layers` if you want to prepare every open spectral image.\n3. Use `ROI image` and `Find Image` if you need to jump back to a specific source image quickly.\n4. Draw ROIs for that image only.\n5. `ROI Spectrum` updates for the active image and the plugin stores that image's ROI spectra in memory as a dataset.\n6. Move to the next image.\n7. Prepare that image's ROI context and draw a fresh set of ROIs.\n8. Draw a fresh set of ROIs starting from `ROI 1`.\n\nIf you want to redraw for the current image, click `Clear Active ROI`. That clears only the active image's ROI shapes and restarts numbering from `ROI 1`.\n\n### Reactive ROI plotting\n\nThe active ROI plot now responds immediately when these controls change:\n\n- `Normalized` / `Absolute`\n- `Plot individual ROIs`\n- `Plot pooled ROI mean`\n- `Include background label 0`\n- legend display options\n\n`Plot individual ROIs` is on by default.\n\n`Plot pooled ROI mean` is off by default and can be enabled only when needed.\n\n### ROI and labels workflows\n\n`Spectral Viewer` now supports three ROI measurement modes per image context:\n\n- shapes only\n- labels only\n- shapes refined by a bound labels layer\n\nWhen both shapes and labels are present, the labels are used to split each shape into label-specific ROI measurements. If no shapes exist, a bound labels layer can still drive labels-only measurement for the full image context.\n\nBlank subtraction is also available during ROI spectrum measurement by choosing a different spectral image as the blank reference.\n\n### ROI comparison across images\n\n`ROI Comparison` is intended for cross-image plotting and curation after ROI datasets have been stored.\n\n- Use `Refresh All ROI Datasets` to update stored datasets from all open spectral images\n- The curation table lists ROI traces and pooled traces from all stored datasets\n- Use the `use` checkbox to include or exclude datasets from downstream analysis without deleting them\n- Edit metadata fields such as `group_label`, `animal_id`, `sex`, `age`, `region`, and `roi_class` directly in the table\n- Use `Plot Selected Across Images` to display checked traces from multiple source images on the same axes\n- Use `Remove Selected Rows` to reject unneeded ROI or pooled entries from stored datasets\n\n`Normalized` / `Absolute` now affects both the active ROI plot and the across-images comparison plot. Raw spectra are stored in memory and normalization is applied only at display time.\n\n### Stored ROI datasets\n\nWhen `Plot ROI Spectrum` is used, the selected ROI spectra are stored in memory for the current napari session.\n\n- Stored datasets remain available even if the image layer is later closed\n- Stored datasets can be exported from `Spectral Viewer`\n- Stored datasets are consumed by the `Spectral Analysis` panel\n- Stored datasets do not persist across a full napari restart unless they are exported or saved in a session package\n\n### Session package save/load\n\n`Spectral Viewer` now supports full session packaging with:\n\n- `Save Session Package`\n- `Load Session Package`\n\nA session package is saved as a folder containing:\n\n- `manifest.json`\n- `roi_shapes/*.json`\n- `roi_datasets/*.json`\n- `truecolor/*.tif`\n\nThe package preserves the linkage between each source image and its ROI shapes by storing:\n\n- `source_layer_name`\n- `source_path`\n- saved ROI geometry\n- stored ROI spectral datasets\n- derived truecolor outputs\n\n### Session package limitations\n\nSession packages save enough information to restore ROI geometry, stored ROI datasets, and derived truecolor outputs.\n\nHowever, full spectral-layer restoration still depends on access to the original ND2 or OME-Zarr source paths recorded in the manifest.\n\nSaved truecolor TIFF files are included as derived outputs, but they do not replace the original spectral source data.\n\n## Spectral Analysis Workflow\n\n`Spectral Analysis` is intended for multi-image and multi-animal experiments.\n\nThe widget now reads from the same shared ROI dataset store used by `Spectral Viewer`, and its stored-dataset table refreshes automatically when ROI datasets are added, updated, or removed.\n\n### Analysis sections\n\n`Spectral Analysis` now includes:\n\n- a stored ROI dataset table\n- ROI / Image / Animal summary tables\n- a `Stats` section for statistical checks and comparisons\n- a larger report-style statistics view\n- an analysis plot canvas\n\nThe report view is designed to behave more like a statistics console than a single one-line result field.\n\n### Metadata editing\n\nThe `Stored ROI Datasets` table lets you annotate each captured dataset with:\n\n- `trace_kind`\n- `trace_label`\n- `animal_id`\n- `group_label`\n- `genotype`\n- `sex`\n- `age`\n- `region`\n- `batch`\n- `blind_id`\n- `roi_class`\n\nThis supports experiments such as:\n\n- 10 images total\n- multiple experimental groups such as WT vs mutant, control vs treatment, or blinded cohorts\n- multiple myelin ROIs per image\n- aggregation from ROI level to image level to animal level\n\n### Dataset selection and removal\n\nAnalysis no longer uses every stored dataset automatically.\n\n- Use the `Measurement` selector to switch between `spectral_mean` and `spatial_ratio` datasets\n- Use the `use_for_analysis` checkbox column to choose which dataset IDs are included\n- Click `Compute Spectral Analysis` to analyze only the checked datasets\n- Click `Remove Selected Datasets` to delete all checked datasets from memory\n- Click `Remove Current Row` to delete the currently selected dataset\n\nUnchecked datasets stay in memory but are ignored by the analysis.\n\n### Available analysis outputs\n\nThe panel computes:\n\n- ROI-level ratio table\n- image-level summary table\n- animal-level summary table\n\nEach table can be exported to CSV.\n\n### Ratio and statistics\n\nThe analysis panel supports:\n\n- user-defined split wavelength\n- ratio modes such as above/below split intensity ratio\n- optional normalization before ratio calculation\n- two-group comparison using a selected factor with exactly two groups\n- one-way ANOVA by selected factor\n- blind PCA and clustering for unlabeled datasets\n\n### Stats workflow\n\nThe `Stats` section is intended to support a more standard statistics workflow:\n\n1. Review descriptive statistics.\n2. Check normality and homogeneity of variance.\n3. Decide whether parametric interpretation is appropriate.\n4. Run the relevant comparison or correlation workflow.\n\nCurrent `Stats` tools include:\n\n- `Descriptive Statistics`\n- `Normality & Equality of Variance`\n- `Two-Group Welch t-test`\n- `Correlation Coefficient`\n\n### Descriptive statistics\n\nThe descriptive workflow reports grouped summary statistics using the selected `Stats factor`.\n\nReported values include:\n\n- `n`\n- mean\n- standard deviation\n- SEM\n- median\n- IQR\n- confidence interval\n\nThe confidence interval percentage can be changed in the UI.\n\n### Normality and equal-variance checks\n\nThe assumption-check workflow currently includes:\n\n- Shapiro-Wilk normality testing per group when sample size is sufficient\n- Bartlett test for equal variances\n- Levene test for equal variances\n\nThe report concludes whether:\n\n- groups are approximately normal\n- variances appear equal\n- parametric tests are appropriate or should be treated with caution\n\nThe significance threshold is user-editable in the UI.\n\n### Two-group testing\n\nThe two-group workflow uses a selectable factor:\n\n- `group_label`\n- `genotype`\n- `sex`\n- `age`\n- `region`\n- `batch`\n- `roi_class`\n\nThe Welch t-test runs only when the selected factor contains exactly two non-empty groups with at least two values each.\n\nThis means users are not restricted to hardcoded labels such as `WT` and `HNPP`.\n\n### Correlation\n\nThe correlation workflow lets the user choose numeric `x` and `y` fields from the current analysis level.\n\nIt reports:\n\n- Pearson correlation\n- Spearman correlation\n\nand displays a scatter plot with a linear fit.\n\n### Statistical interpretation note\n\nThe plugin currently mixes assumption checks with permutation-based inference:\n\n- descriptive and assumption checks are presented in a conventional statistical workflow\n- Welch t-test and ANOVA use standard test statistics\n- significance is estimated by permutation rather than classical closed-form p-values\n\nSo the reported `t` and `F` values are standard-style statistics, but the reported p-values are permutation p-values.\n\n### Stats report export\n\nThe report view can be exported with `Export Stats Report`.\n\nSupported output formats:\n\n- plain text\n- CSV\n\n## Spatial Ratio Analysis Workflow\n\n`Spatial Ratio Analysis` is intended for kernel-based emission-ratio measurements inside prepared image ROI contexts.\n\nThe widget supports:\n\n- a per-image context table showing the current spectral image, ROI layer, bound labels layer, measurement mode, ROI count, and readiness status\n- configurable kernel size, minimum valid coverage, split wavelength, ratio mode, optional normalization, and optional blank subtraction\n- scatter-based selection of kernel subsets after computation\n- raw-kernel CSV export, summary CSV export, and `Send Summary To Analysis`\n\n### Recommended spatial-ratio flow\n\n1. Open one or more spectral images in napari.\n2. Prepare ROI context for the image you want to analyze.\n3. Draw shapes, bind labels, or use both when you want label-refined measurements inside each shape.\n4. Open `Spatial Ratio Analysis` and select the target image row in `Image ROI Context`.\n5. Set kernel size, minimum coverage, split wavelength, and ratio mode.\n6. Optionally enable normalization or choose a blank reference image.\n7. Click `Compute Spatial Ratio`.\n8. Review the kernel summary table and scatter plot.\n9. Export raw or summary CSV output, or use `Send Summary To Analysis` for downstream statistics.\n\n### Recommended experiment flow\n\n1. Open spectral images in napari.\n2. For image 1, prepare the ROI layer and draw multiple myelin ROIs.\n3. Plot the ROI spectrum to store that image's ROI dataset.\n4. Repeat for image 2, image 3, and so on.\n5. Open `Spectral Analysis`.\n6. Enter metadata for each stored dataset.\n7. Choose the measurement type you want to analyze.\n8. Check only the dataset IDs you want to compare.\n9. Set the wavelength split point.\n10. Compute the analysis.\n11. Export ROI, image, or animal summary CSV files as needed.\n\n## Reproducibility note\n\nThe spectral analysis tools implemented in this plugin reproduce the\nmethodology described in Teo et al. (PNAS 2021) and Teo et al. (2024).\nThe plugin itself is a new napari-based implementation designed to make\nthese workflows accessible within OME-Zarr-compatible environments.\n\n## Known Limitations\n\n- If `.zarr` files are opened through napari's generic file-open dialog, napari may still show a `Choose reader` popup when multiple readers claim `.zarr`. Use the plugin's own Zarr loader to avoid that workflow.\n- ROI datasets are stored in memory for the current napari session and should be exported if they need to survive a full application restart.\n- Spatial-ratio summaries sent into the shared dataset store are session-scoped unless exported or saved through a broader workflow.\n- napari `Shapes` rendering can still be sensitive in some environments, so ROI display behavior may depend on upstream napari and vispy rendering details.\n\n\n## Citation\n\nThis plugin implements spectral analysis workflows derived from the\nNile Red myelin spectroscopy methodology described in:\n\nTeo et al., PNAS 2021\nhttps://doi.org/10.1073/pnas.2016897118\n\nTeo et al., 2024\nhttps://pmc.ncbi.nlm.nih.gov/articles/PMC11657930/\n\nIf you use this plugin in research, please cite these papers.\n","description_content_type":"text/markdown","keywords":"napari,spectral imaging,nd2,ome-zarr,myelin,nile red,fluorescence spectroscopy","home_page":null,"download_url":null,"author":"Wulin Teo","author_email":null,"maintainer":null,"maintainer_email":null,"license":"MIT","classifier":["Framework :: napari","License :: OSI Approved :: MIT License","Programming Language :: Python :: 3","Programming Language :: Python :: 3.10","Programming Language :: Python :: 3.11"],"requires_dist":["numpy","nd2>=0.10","dask[array]","zarr<3","numcodecs","ome-zarr","scikit-image","qtpy","matplotlib"],"requires_python":">=3.10","requires_external":null,"project_url":["Homepage, https://github.com/wulinteousa2-hash/napari-nd2-spectral-ome-zarr","Repository, https://github.com/wulinteousa2-hash/napari-nd2-spectral-ome-zarr"],"provides_extra":null,"provides_dist":null,"obsoletes_dist":null},"npe1_shim":false}