matterviz 0.4.1 → 0.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/EmptyState.svelte +10 -4
- package/dist/FilePicker.svelte +48 -60
- package/dist/Icon.svelte +7 -4
- package/dist/MillerIndexInput.svelte +2 -2
- package/dist/api/optimade.js +10 -7
- package/dist/app.css +68 -0
- package/dist/brillouin/BrillouinZone.svelte +90 -91
- package/dist/brillouin/BrillouinZone.svelte.d.ts +5 -7
- package/dist/brillouin/BrillouinZoneControls.svelte +3 -6
- package/dist/brillouin/BrillouinZoneExportPane.svelte +18 -14
- package/dist/brillouin/BrillouinZoneInfoPane.svelte +6 -10
- package/dist/brillouin/BrillouinZoneScene.svelte +46 -68
- package/dist/brillouin/BrillouinZoneScene.svelte.d.ts +1 -1
- package/dist/brillouin/compute.js +10 -16
- package/dist/brillouin/geometry.js +2 -2
- package/dist/chempot-diagram/ChemPotDiagram.svelte +48 -50
- package/dist/chempot-diagram/ChemPotDiagram2D.svelte +61 -169
- package/dist/chempot-diagram/ChemPotDiagram2D.svelte.d.ts +1 -1
- package/dist/chempot-diagram/ChemPotDiagram3D.svelte +559 -755
- package/dist/chempot-diagram/ChemPotDiagram3D.svelte.d.ts +1 -1
- package/dist/chempot-diagram/async-compute.svelte.js +13 -14
- package/dist/chempot-diagram/color.d.ts +21 -1
- package/dist/chempot-diagram/color.js +70 -1
- package/dist/chempot-diagram/compute.d.ts +7 -0
- package/dist/chempot-diagram/compute.js +85 -26
- package/dist/chempot-diagram/controls-state.svelte.js +1 -1
- package/dist/chempot-diagram/export.js +1 -6
- package/dist/chempot-diagram/temperature.js +9 -10
- package/dist/colors/index.d.ts +0 -4
- package/dist/colors/index.js +19 -20
- package/dist/composition/BarChart.svelte +30 -26
- package/dist/composition/BubbleChart.svelte +17 -17
- package/dist/composition/Composition.svelte +10 -19
- package/dist/composition/Formula.svelte +20 -27
- package/dist/composition/FormulaFilter.svelte +115 -184
- package/dist/composition/PieChart.svelte +55 -41
- package/dist/composition/format.js +7 -9
- package/dist/composition/index.d.ts +2 -0
- package/dist/composition/index.js +14 -0
- package/dist/composition/parse.d.ts +2 -2
- package/dist/composition/parse.js +61 -115
- package/dist/constants.d.ts +0 -1
- package/dist/constants.js +17 -26
- package/dist/convex-hull/ConvexHull.svelte +12 -15
- package/dist/convex-hull/ConvexHull.svelte.d.ts +1 -1
- package/dist/convex-hull/ConvexHull2D.svelte +93 -94
- package/dist/convex-hull/ConvexHull2D.svelte.d.ts +1 -1
- package/dist/convex-hull/ConvexHull3D.svelte +127 -186
- package/dist/convex-hull/ConvexHull3D.svelte.d.ts +1 -1
- package/dist/convex-hull/ConvexHull4D.svelte +131 -180
- package/dist/convex-hull/ConvexHull4D.svelte.d.ts +1 -1
- package/dist/convex-hull/ConvexHullChrome.svelte +36 -40
- package/dist/convex-hull/ConvexHullControls.svelte +46 -48
- package/dist/convex-hull/ConvexHullStats.svelte +193 -195
- package/dist/convex-hull/ConvexHullTooltip.svelte +5 -12
- package/dist/convex-hull/GasPressureControls.svelte +5 -12
- package/dist/convex-hull/StructurePopup.svelte +18 -22
- package/dist/convex-hull/StructurePopup.svelte.d.ts +2 -0
- package/dist/convex-hull/TemperatureSlider.svelte +4 -10
- package/dist/convex-hull/canvas-interactions.svelte.js +2 -1
- package/dist/convex-hull/gas-thermodynamics.js +21 -53
- package/dist/convex-hull/helpers.d.ts +8 -10
- package/dist/convex-hull/helpers.js +37 -43
- package/dist/convex-hull/hull-state.svelte.d.ts +1 -1
- package/dist/convex-hull/thermodynamics.js +37 -44
- package/dist/coordination/CoordinationBarPlot.svelte +49 -53
- package/dist/coordination/CoordinationBarPlot.svelte.d.ts +1 -1
- package/dist/coordination/calc-coordination.d.ts +1 -1
- package/dist/coordination/calc-coordination.js +28 -25
- package/dist/element/BohrAtom.svelte +5 -9
- package/dist/element/ElementHeading.svelte +4 -1
- package/dist/element/ElementPhoto.svelte +11 -9
- package/dist/element/ElementStats.svelte +12 -10
- package/dist/element/ElementTile.svelte +44 -67
- package/dist/element/Nucleus.svelte +4 -2
- package/dist/element/data.d.ts +3 -2
- package/dist/element/data.js +5 -1
- package/dist/element/helpers.d.ts +4 -0
- package/dist/element/helpers.js +18 -0
- package/dist/element/index.d.ts +2 -5
- package/dist/element/index.js +4 -19
- package/dist/feedback/DragOverlay.svelte +5 -5
- package/dist/feedback/DragOverlay.svelte.d.ts +2 -2
- package/dist/feedback/StatusMessage.svelte +7 -4
- package/dist/fermi-surface/FermiSlice.svelte +21 -18
- package/dist/fermi-surface/FermiSurface.svelte +35 -44
- package/dist/fermi-surface/FermiSurface.svelte.d.ts +7 -13
- package/dist/fermi-surface/FermiSurfaceControls.svelte +6 -20
- package/dist/fermi-surface/FermiSurfaceControls.svelte.d.ts +1 -1
- package/dist/fermi-surface/FermiSurfaceScene.svelte +64 -136
- package/dist/fermi-surface/FermiSurfaceScene.svelte.d.ts +1 -1
- package/dist/fermi-surface/FermiSurfaceTooltip.svelte +9 -6
- package/dist/fermi-surface/compute.js +25 -58
- package/dist/fermi-surface/parse.js +54 -88
- package/dist/file-viewer/JsonBrowser.svelte +1043 -0
- package/dist/file-viewer/JsonBrowser.svelte.d.ts +9 -0
- package/dist/file-viewer/PlotPanel.svelte +350 -0
- package/dist/file-viewer/PlotPanel.svelte.d.ts +9 -0
- package/dist/file-viewer/TrajectoryWithDos.svelte +30 -0
- package/dist/file-viewer/TrajectoryWithDos.svelte.d.ts +10 -0
- package/dist/file-viewer/detect.d.ts +11 -0
- package/dist/file-viewer/detect.js +381 -0
- package/dist/file-viewer/eligibility.d.ts +4 -0
- package/dist/file-viewer/eligibility.js +53 -0
- package/dist/file-viewer/host-protocol.d.ts +50 -0
- package/dist/file-viewer/host-transfer.d.ts +25 -0
- package/dist/file-viewer/host-transfer.js +42 -0
- package/dist/file-viewer/index.d.ts +5 -0
- package/dist/file-viewer/index.js +5 -0
- package/dist/file-viewer/main.d.ts +44 -0
- package/dist/file-viewer/main.js +535 -0
- package/dist/file-viewer/parse.d.ts +9 -0
- package/dist/file-viewer/parse.js +170 -0
- package/dist/file-viewer/plot-utils.d.ts +24 -0
- package/dist/file-viewer/plot-utils.js +191 -0
- package/dist/file-viewer/types.d.ts +4 -0
- package/dist/file-viewer/types.js +5 -0
- package/dist/heatmap-matrix/HeatmapMatrix.svelte +153 -219
- package/dist/heatmap-matrix/HeatmapMatrix.svelte.d.ts +2 -2
- package/dist/heatmap-matrix/HeatmapMatrixControls.svelte +9 -7
- package/dist/heatmap-matrix/HeatmapMatrixControls.svelte.d.ts +1 -1
- package/dist/heatmap-matrix/index.d.ts +5 -0
- package/dist/icons.d.ts +4 -0
- package/dist/icons.js +4 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/io/ExportPane.svelte +11 -7
- package/dist/io/decompress.d.ts +4 -1
- package/dist/io/decompress.js +24 -36
- package/dist/io/export.d.ts +11 -4
- package/dist/io/export.js +75 -19
- package/dist/io/fetch.d.ts +0 -3
- package/dist/io/fetch.js +0 -11
- package/dist/io/file-drop.js +60 -35
- package/dist/io/index.d.ts +0 -1
- package/dist/io/index.js +2 -9
- package/dist/io/is-binary.d.ts +9 -0
- package/dist/io/is-binary.js +45 -1
- package/dist/io/url-drop.d.ts +2 -0
- package/dist/io/url-drop.js +40 -40
- package/dist/isosurface/Isosurface.svelte +700 -215
- package/dist/isosurface/Isosurface.svelte.d.ts +7 -1
- package/dist/isosurface/IsosurfaceControls.svelte +590 -116
- package/dist/isosurface/IsosurfaceControls.svelte.d.ts +1 -1
- package/dist/isosurface/VolumeSlice.svelte +224 -0
- package/dist/isosurface/VolumeSlice.svelte.d.ts +28 -0
- package/dist/isosurface/coloring.d.ts +20 -0
- package/dist/isosurface/coloring.js +118 -0
- package/dist/isosurface/geometry-worker-types.d.ts +38 -0
- package/dist/isosurface/geometry.worker.d.ts +1 -0
- package/dist/isosurface/geometry.worker.js +59 -0
- package/dist/isosurface/grid.d.ts +10 -0
- package/dist/isosurface/grid.js +31 -0
- package/dist/isosurface/index.d.ts +4 -0
- package/dist/isosurface/index.js +4 -0
- package/dist/isosurface/parse-vaspwave.d.ts +3 -0
- package/dist/isosurface/parse-vaspwave.js +138 -0
- package/dist/isosurface/parse.js +6 -6
- package/dist/isosurface/profile.d.ts +12 -0
- package/dist/isosurface/profile.js +19 -0
- package/dist/isosurface/sampling.d.ts +34 -0
- package/dist/isosurface/sampling.js +408 -0
- package/dist/isosurface/slice-rendering.d.ts +13 -0
- package/dist/isosurface/slice-rendering.js +79 -0
- package/dist/isosurface/slice.d.ts +22 -2
- package/dist/isosurface/slice.js +200 -116
- package/dist/isosurface/types.d.ts +24 -1
- package/dist/isosurface/types.js +120 -8
- package/dist/json-path.d.ts +4 -0
- package/dist/json-path.js +89 -0
- package/dist/labels.d.ts +6 -2
- package/dist/labels.js +44 -14
- package/dist/layout/FullscreenButton.svelte +2 -1
- package/dist/layout/FullscreenToggle.svelte +10 -4
- package/dist/layout/InfoCard.svelte +8 -21
- package/dist/layout/InfoTag.svelte +1 -3
- package/dist/layout/NumberRangeInput.svelte +46 -0
- package/dist/layout/NumberRangeInput.svelte.d.ts +12 -0
- package/dist/layout/PropertyFilter.svelte +2 -6
- package/dist/layout/SettingsSection.svelte +57 -62
- package/dist/layout/SettingsSection.svelte.d.ts +6 -7
- package/dist/layout/SubpageGrid.svelte +3 -1
- package/dist/layout/ViewerChrome.svelte +16 -11
- package/dist/layout/ViewerChrome.svelte.d.ts +2 -1
- package/dist/layout/fullscreen.js +3 -5
- package/dist/layout/fullscreen.svelte.js +1 -2
- package/dist/layout/index.d.ts +1 -0
- package/dist/layout/index.js +1 -0
- package/dist/layout/json-tree/JsonNode.svelte +22 -59
- package/dist/layout/json-tree/JsonTree.svelte +101 -172
- package/dist/layout/json-tree/JsonValue.svelte +9 -32
- package/dist/layout/json-tree/utils.d.ts +0 -3
- package/dist/layout/json-tree/utils.js +50 -188
- package/dist/marching-cubes.d.ts +8 -1
- package/dist/marching-cubes.js +115 -48
- package/dist/math.d.ts +5 -2
- package/dist/math.js +48 -38
- package/dist/overlays/ContextMenu.svelte +19 -34
- package/dist/overlays/CopyButton.svelte +11 -5
- package/dist/overlays/DragControlTab.svelte +6 -1
- package/dist/overlays/DraggablePane.svelte +110 -74
- package/dist/overlays/DraggablePane.svelte.d.ts +2 -1
- package/dist/overlays/GlassChip.svelte +32 -0
- package/dist/overlays/GlassChip.svelte.d.ts +8 -0
- package/dist/overlays/InfoPaneCards.svelte +11 -23
- package/dist/overlays/index.d.ts +7 -0
- package/dist/overlays/index.js +26 -0
- package/dist/overlays/portal.d.ts +2 -0
- package/dist/overlays/portal.js +14 -0
- package/dist/periodic-table/PeriodicTable.svelte +113 -145
- package/dist/periodic-table/PeriodicTable.svelte.d.ts +5 -3
- package/dist/periodic-table/PeriodicTableControls.svelte +37 -115
- package/dist/periodic-table/TableInset.svelte +9 -4
- package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte +68 -105
- package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte.d.ts +6 -8
- package/dist/phase-diagram/PhaseDiagramControls.svelte +70 -94
- package/dist/phase-diagram/PhaseDiagramControls.svelte.d.ts +1 -1
- package/dist/phase-diagram/PhaseDiagramEditorPane.svelte +2 -1
- package/dist/phase-diagram/PhaseDiagramExportPane.svelte +12 -12
- package/dist/phase-diagram/PhaseDiagramTooltip.svelte +54 -58
- package/dist/phase-diagram/TdbInfoPanel.svelte +21 -15
- package/dist/phase-diagram/build-diagram.js +4 -9
- package/dist/phase-diagram/diagram-input.d.ts +1 -2
- package/dist/phase-diagram/parse.js +15 -15
- package/dist/phase-diagram/svg-to-diagram.js +28 -27
- package/dist/phase-diagram/utils.js +2 -3
- package/dist/plot/bar/BarPlot.svelte +461 -426
- package/dist/plot/bar/BarPlot.svelte.d.ts +2 -0
- package/dist/plot/bar/BarPlotControls.svelte +1 -3
- package/dist/plot/bar/BarPlotControls.svelte.d.ts +4 -6
- package/dist/plot/bar/SpacegroupBarPlot.svelte +46 -77
- package/dist/plot/bar/data.d.ts +5 -4
- package/dist/plot/bar/data.js +2 -1
- package/dist/plot/box/BoxPlot.svelte +322 -226
- package/dist/plot/box/BoxPlot.svelte.d.ts +2 -0
- package/dist/plot/box/Violin.svelte.d.ts +1 -0
- package/dist/plot/box/box-plot.js +1 -1
- package/dist/plot/core/auto-place.d.ts +1 -1
- package/dist/plot/core/auto-place.js +2 -2
- package/dist/plot/core/axis-utils.d.ts +12 -7
- package/dist/plot/core/axis-utils.js +48 -48
- package/dist/plot/core/components/AxisLabel.svelte +82 -20
- package/dist/plot/core/components/AxisLabel.svelte.d.ts +1 -0
- package/dist/plot/core/components/ColorBar.svelte +101 -106
- package/dist/plot/core/components/ColorScaleSelect.svelte +1 -1
- package/dist/plot/core/components/FillArea.svelte +10 -17
- package/dist/plot/core/components/HierarchyControls.svelte +249 -0
- package/dist/plot/{sunburst/SunburstControls.svelte.d.ts → core/components/HierarchyControls.svelte.d.ts} +12 -8
- package/dist/plot/core/components/InteractiveAxisLabel.svelte +1 -1
- package/dist/plot/core/components/InteractiveAxisLabel.svelte.d.ts +1 -1
- package/dist/plot/core/components/Line.svelte +18 -9
- package/dist/plot/core/components/Line.svelte.d.ts +2 -0
- package/dist/plot/core/components/PlotAxis.svelte +40 -17
- package/dist/plot/core/components/PlotControls.svelte +65 -41
- package/dist/plot/core/components/PlotLegend.svelte +31 -35
- package/dist/plot/core/components/PlotMarginals.svelte +616 -0
- package/dist/plot/core/components/PlotMarginals.svelte.d.ts +15 -0
- package/dist/plot/core/components/PlotTooltip.svelte +1 -1
- package/dist/plot/core/components/PortalSelect.svelte +4 -8
- package/dist/plot/core/components/ReferenceLine.svelte +27 -24
- package/dist/plot/core/components/ReferenceLine3D.svelte +54 -57
- package/dist/plot/core/components/ReferencePlane.svelte +7 -8
- package/dist/plot/core/components/ZeroLines.svelte +4 -8
- package/dist/plot/core/components/ZoomRect.svelte +1 -2
- package/dist/plot/core/components/index.d.ts +1 -0
- package/dist/plot/core/components/index.js +1 -0
- package/dist/plot/core/data-cleaning-signal.d.ts +46 -0
- package/dist/plot/core/data-cleaning-signal.js +467 -0
- package/dist/plot/core/data-cleaning.d.ts +2 -42
- package/dist/plot/core/data-cleaning.js +27 -474
- package/dist/plot/core/data-transform.d.ts +1 -2
- package/dist/plot/core/data-transform.js +9 -15
- package/dist/plot/core/fill-utils.d.ts +3 -1
- package/dist/plot/core/fill-utils.js +28 -6
- package/dist/plot/core/index.d.ts +1 -0
- package/dist/plot/core/index.js +1 -0
- package/dist/plot/core/interactions.js +0 -2
- package/dist/plot/core/layout.d.ts +15 -6
- package/dist/plot/core/layout.js +57 -38
- package/dist/plot/core/marginals.d.ts +170 -0
- package/dist/plot/core/marginals.js +436 -0
- package/dist/plot/core/pan-zoom.svelte.d.ts +2 -4
- package/dist/plot/core/pan-zoom.svelte.js +34 -17
- package/dist/plot/core/placed-tween.svelte.d.ts +3 -0
- package/dist/plot/core/placed-tween.svelte.js +68 -21
- package/dist/plot/core/reference-line.js +1 -1
- package/dist/plot/core/scales.d.ts +23 -0
- package/dist/plot/core/scales.js +39 -13
- package/dist/plot/core/svg.js +0 -1
- package/dist/plot/core/types/fills.d.ts +101 -0
- package/dist/plot/core/types/fills.js +15 -0
- package/dist/plot/core/types/plot-3d.d.ts +87 -0
- package/dist/plot/core/types/plot-3d.js +4 -0
- package/dist/plot/core/types/reference-lines.d.ts +140 -0
- package/dist/plot/core/types/reference-lines.js +9 -0
- package/dist/plot/core/types.d.ts +29 -324
- package/dist/plot/core/types.js +23 -20
- package/dist/plot/core/utils/hierarchy-chart.d.ts +52 -0
- package/dist/plot/core/utils/hierarchy-chart.js +191 -0
- package/dist/plot/core/utils/hierarchy-labels.d.ts +20 -0
- package/dist/plot/core/utils/hierarchy-labels.js +100 -0
- package/dist/plot/core/utils/label-placement.js +2 -2
- package/dist/plot/histogram/Histogram.svelte +314 -340
- package/dist/plot/histogram/Histogram.svelte.d.ts +7 -7
- package/dist/plot/histogram/HistogramControls.svelte +30 -28
- package/dist/plot/histogram/histogram.d.ts +31 -0
- package/dist/plot/histogram/histogram.js +70 -0
- package/dist/plot/histogram/index.d.ts +1 -0
- package/dist/plot/histogram/index.js +1 -0
- package/dist/plot/index.d.ts +1 -0
- package/dist/plot/index.js +1 -0
- package/dist/plot/sankey/Sankey.svelte +78 -69
- package/dist/plot/sankey/Sankey.svelte.d.ts +2 -2
- package/dist/plot/sankey/SankeyControls.svelte +22 -16
- package/dist/plot/sankey/sankey.js +13 -9
- package/dist/plot/scatter/BinnedScatterPlot.svelte +311 -141
- package/dist/plot/scatter/BinnedScatterPlot.svelte.d.ts +7 -0
- package/dist/plot/scatter/ElementScatter.svelte +4 -1
- package/dist/plot/scatter/ScatterPlot.svelte +517 -410
- package/dist/plot/scatter/ScatterPlot.svelte.d.ts +2 -0
- package/dist/plot/scatter/ScatterPlotControls.svelte +18 -19
- package/dist/plot/scatter/ScatterPlotControls.svelte.d.ts +1 -1
- package/dist/plot/scatter/ScatterPoint.svelte +16 -9
- package/dist/plot/scatter/adaptive-density.d.ts +1 -1
- package/dist/plot/scatter/adaptive-density.js +36 -20
- package/dist/plot/scatter/binned-scatter-types.d.ts +3 -2
- package/dist/plot/scatter/binned-scatter-types.js +6 -1
- package/dist/plot/scatter/scatter-data.d.ts +1 -1
- package/dist/plot/scatter/scatter-data.js +8 -7
- package/dist/plot/scatter-3d/ScatterPlot3D.svelte +25 -34
- package/dist/plot/scatter-3d/ScatterPlot3D.svelte.d.ts +2 -2
- package/dist/plot/scatter-3d/ScatterPlot3DControls.svelte +8 -5
- package/dist/plot/scatter-3d/ScatterPlot3DScene.svelte +113 -116
- package/dist/plot/scatter-3d/ScatterPlot3DScene.svelte.d.ts +2 -2
- package/dist/plot/scatter-3d/Surface3D.svelte +4 -13
- package/dist/plot/sunburst/Sunburst.svelte +269 -347
- package/dist/plot/sunburst/Sunburst.svelte.d.ts +2 -2
- package/dist/plot/sunburst/index.d.ts +1 -1
- package/dist/plot/sunburst/index.js +2 -1
- package/dist/plot/sunburst/render.d.ts +2 -2
- package/dist/plot/sunburst/render.js +47 -22
- package/dist/plot/sunburst/sunburst.d.ts +5 -1
- package/dist/plot/sunburst/sunburst.js +10 -3
- package/dist/plot/treemap/Treemap.svelte +1022 -0
- package/dist/plot/treemap/Treemap.svelte.d.ts +90 -0
- package/dist/plot/treemap/index.d.ts +4 -0
- package/dist/plot/treemap/index.js +4 -0
- package/dist/plot/treemap/labels.d.ts +38 -0
- package/dist/plot/treemap/labels.js +80 -0
- package/dist/plot/treemap/treemap.d.ts +28 -0
- package/dist/plot/treemap/treemap.js +102 -0
- package/dist/rdf/RdfPlot.svelte +37 -59
- package/dist/rdf/RdfPlot.svelte.d.ts +1 -1
- package/dist/rdf/calc-rdf.js +63 -52
- package/dist/rdf/index.d.ts +0 -1
- package/dist/sanitize.js +85 -27
- package/dist/scene/SceneCamera.svelte +1 -1
- package/dist/scene/SceneCamera.svelte.d.ts +1 -1
- package/dist/scene/bind-renderer.svelte.js +14 -6
- package/dist/scene/index.d.ts +1 -2
- package/dist/scene/index.js +1 -1
- package/dist/scene/{props.js → props.svelte.js} +15 -1
- package/dist/settings.d.ts +19 -9
- package/dist/settings.js +229 -525
- package/dist/spectral/Bands.svelte +207 -221
- package/dist/spectral/BandsAndDos.svelte +11 -9
- package/dist/spectral/BrillouinBandsDos.svelte +19 -42
- package/dist/spectral/Dos.svelte +92 -93
- package/dist/spectral/helpers.d.ts +3 -3
- package/dist/spectral/helpers.js +65 -140
- package/dist/state.svelte.js +5 -18
- package/dist/structure/Arrow.svelte +5 -18
- package/dist/structure/ArrowInstances.svelte +160 -0
- package/dist/structure/ArrowInstances.svelte.d.ts +16 -0
- package/dist/structure/AtomLegend.svelte +120 -85
- package/dist/structure/AtomLegend.svelte.d.ts +2 -3
- package/dist/structure/Bond.svelte +31 -23
- package/dist/structure/CanvasTooltip.svelte +15 -3
- package/dist/structure/CellSelect.svelte +45 -35
- package/dist/structure/Cylinder.svelte +24 -40
- package/dist/structure/InstancedAtoms.svelte +114 -0
- package/dist/structure/InstancedAtoms.svelte.d.ts +15 -0
- package/dist/structure/Lattice.svelte +85 -149
- package/dist/structure/SiteLabels.svelte +122 -0
- package/dist/structure/SiteLabels.svelte.d.ts +18 -0
- package/dist/structure/Structure.svelte +636 -504
- package/dist/structure/Structure.svelte.d.ts +4 -2
- package/dist/structure/StructureCarousel.svelte +637 -0
- package/dist/structure/StructureCarousel.svelte.d.ts +19 -0
- package/dist/structure/StructureControls.svelte +165 -425
- package/dist/structure/StructureControls.svelte.d.ts +1 -1
- package/dist/structure/StructureExportPane.svelte +17 -21
- package/dist/structure/StructureInfoPane.svelte +128 -133
- package/dist/structure/StructureInfoPane.svelte.d.ts +1 -1
- package/dist/structure/StructureScene.svelte +535 -578
- package/dist/structure/StructureScene.svelte.d.ts +6 -2
- package/dist/structure/StructureViewport.svelte +451 -0
- package/dist/structure/StructureViewport.svelte.d.ts +65 -0
- package/dist/structure/atom-label-placement.d.ts +16 -12
- package/dist/structure/atom-label-placement.js +70 -37
- package/dist/structure/atom-properties.d.ts +2 -0
- package/dist/structure/atom-properties.js +105 -38
- package/dist/structure/bond-order-perception.js +3 -8
- package/dist/structure/bonding.d.ts +9 -3
- package/dist/structure/bonding.js +95 -46
- package/dist/structure/edit-history.d.ts +6 -0
- package/dist/structure/edit-history.js +27 -0
- package/dist/structure/export.d.ts +1 -0
- package/dist/structure/export.js +89 -105
- package/dist/structure/format-detect.d.ts +1 -0
- package/dist/structure/format-detect.js +20 -0
- package/dist/structure/geometry.d.ts +9 -0
- package/dist/structure/geometry.js +27 -0
- package/dist/structure/index.d.ts +16 -1
- package/dist/structure/index.js +15 -10
- package/dist/structure/measure.d.ts +1 -1
- package/dist/structure/measure.js +6 -12
- package/dist/structure/parse.d.ts +2 -1
- package/dist/structure/parse.js +272 -313
- package/dist/structure/partial-occupancy.js +10 -5
- package/dist/structure/pbc.js +85 -107
- package/dist/structure/polyhedra.d.ts +0 -1
- package/dist/structure/polyhedra.js +7 -21
- package/dist/structure/prop-groups.d.ts +85 -0
- package/dist/structure/prop-groups.js +18 -0
- package/dist/structure/supercell.d.ts +1 -2
- package/dist/structure/supercell.js +7 -13
- package/dist/symmetry/SymmetryElements.svelte +11 -15
- package/dist/symmetry/SymmetryStats.svelte +55 -71
- package/dist/symmetry/WyckoffTable.svelte +10 -28
- package/dist/symmetry/cell-transform.js +6 -14
- package/dist/symmetry/index.d.ts +1 -0
- package/dist/symmetry/index.js +13 -10
- package/dist/symmetry/spacegroups.js +3 -2
- package/dist/table/HeatmapTable.svelte +1142 -447
- package/dist/table/HeatmapTable.svelte.d.ts +12 -2
- package/dist/table/ToggleMenu.svelte +168 -53
- package/dist/table/ToggleMenu.svelte.d.ts +1 -1
- package/dist/table/index.d.ts +21 -6
- package/dist/table/index.js +34 -21
- package/dist/theme/ThemeControl.svelte +16 -8
- package/dist/theme/embedded.d.ts +18 -0
- package/dist/theme/embedded.js +206 -0
- package/dist/theme/index.d.ts +5 -5
- package/dist/theme/index.js +5 -12
- package/dist/theme/themes.mjs +44 -66
- package/dist/tooltip/KCoords.svelte +4 -1
- package/dist/tooltip/TooltipContent.svelte +3 -6
- package/dist/tooltip/TooltipContent.svelte.d.ts +1 -1
- package/dist/tooltip/index.d.ts +8 -1
- package/dist/trajectory/Trajectory.svelte +613 -386
- package/dist/trajectory/Trajectory.svelte.d.ts +1 -1
- package/dist/trajectory/TrajectoryError.svelte +12 -74
- package/dist/trajectory/TrajectoryExportPane.svelte +14 -32
- package/dist/trajectory/TrajectoryInfoPane.svelte +127 -164
- package/dist/trajectory/TrajectoryInfoPane.svelte.d.ts +2 -1
- package/dist/trajectory/extract.js +61 -49
- package/dist/trajectory/format-detect.d.ts +2 -0
- package/dist/trajectory/format-detect.js +17 -13
- package/dist/trajectory/frame-reader.d.ts +2 -0
- package/dist/trajectory/frame-reader.js +35 -32
- package/dist/trajectory/helpers.d.ts +2 -0
- package/dist/trajectory/helpers.js +34 -56
- package/dist/trajectory/index.d.ts +1 -0
- package/dist/trajectory/index.js +5 -8
- package/dist/trajectory/parse/ase.js +1 -1
- package/dist/trajectory/parse/h5-utils.d.ts +13 -0
- package/dist/trajectory/parse/h5-utils.js +109 -0
- package/dist/trajectory/parse/hdf5.d.ts +1 -1
- package/dist/trajectory/parse/hdf5.js +116 -106
- package/dist/trajectory/parse/index.d.ts +6 -6
- package/dist/trajectory/parse/index.js +25 -33
- package/dist/trajectory/parse/lammps.js +8 -12
- package/dist/trajectory/parse/vasp.js +10 -7
- package/dist/trajectory/parse/vaspout-electronic.d.ts +13 -0
- package/dist/trajectory/parse/vaspout-electronic.js +207 -0
- package/dist/trajectory/parse/vaspout-h5.d.ts +4 -0
- package/dist/trajectory/parse/vaspout-h5.js +281 -0
- package/dist/trajectory/parse/xyz.js +59 -9
- package/dist/trajectory/plotting.d.ts +8 -9
- package/dist/trajectory/plotting.js +113 -64
- package/dist/utils.d.ts +3 -0
- package/dist/utils.js +7 -0
- package/dist/xrd/XrdPlot.svelte +79 -118
- package/dist/xrd/broadening.js +2 -1
- package/dist/xrd/calc-xrd.js +24 -62
- package/dist/xrd/parse.d.ts +0 -1
- package/dist/xrd/parse.js +69 -95
- package/package.json +94 -34
- package/readme.md +6 -5
- package/dist/api/mp.d.ts +0 -6
- package/dist/api/mp.js +0 -22
- package/dist/plot/sunburst/SunburstControls.svelte +0 -200
- package/dist/scene/types.d.ts +0 -26
- package/dist/tooltip/types.d.ts +0 -8
- package/dist/trajectory/constants.d.ts +0 -6
- package/dist/trajectory/constants.js +0 -11
- /package/dist/{scene/types.js → file-viewer/host-protocol.js} +0 -0
- /package/dist/{tooltip/types.js → isosurface/geometry-worker-types.js} +0 -0
|
@@ -20,6 +20,7 @@ color/opacity instead of one mesh per element) and disposed on change/unmount. -
|
|
|
20
20
|
<script lang="ts">
|
|
21
21
|
import type { Matrix3x3, Vec2, Vec3 } from '../math'
|
|
22
22
|
import * as math from '../math'
|
|
23
|
+
import { quaternion_from_direction } from '../structure/geometry'
|
|
23
24
|
import type { ShowSymmetryKinds, SymmetryElement } from './symmetry-elements'
|
|
24
25
|
import {
|
|
25
26
|
clip_line_to_cell,
|
|
@@ -39,7 +40,6 @@ color/opacity instead of one mesh per element) and disposed on change/unmount. -
|
|
|
39
40
|
LinearFilter,
|
|
40
41
|
Matrix4,
|
|
41
42
|
OctahedronGeometry,
|
|
42
|
-
Quaternion,
|
|
43
43
|
RepeatWrapping,
|
|
44
44
|
RGBAFormat,
|
|
45
45
|
Vector3,
|
|
@@ -92,7 +92,6 @@ color/opacity instead of one mesh per element) and disposed on change/unmount. -
|
|
|
92
92
|
inversion_color?: string
|
|
93
93
|
} = $props()
|
|
94
94
|
|
|
95
|
-
const UP = new Vector3(0, 1, 0)
|
|
96
95
|
const UNIT_SCALE = new Vector3(1, 1, 1)
|
|
97
96
|
|
|
98
97
|
// 1D stripe alpha texture for glide fills (three.js alphaMap samples the GREEN
|
|
@@ -136,14 +135,12 @@ color/opacity instead of one mesh per element) and disposed on change/unmount. -
|
|
|
136
135
|
dir_unit: Vector3,
|
|
137
136
|
radius: number,
|
|
138
137
|
length: number,
|
|
139
|
-
): CylinderGeometry =>
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
new Quaternion().setFromUnitVectors(UP, dir_unit),
|
|
144
|
-
UNIT_SCALE,
|
|
145
|
-
),
|
|
138
|
+
): CylinderGeometry => {
|
|
139
|
+
const orientation = quaternion_from_direction(dir_unit.toArray() as Vec3)
|
|
140
|
+
return new CylinderGeometry(radius, radius, length, 12).applyMatrix4(
|
|
141
|
+
new Matrix4().compose(center, orientation, UNIT_SCALE),
|
|
146
142
|
)
|
|
143
|
+
}
|
|
147
144
|
|
|
148
145
|
// Axes (cylinders) + rotoinversion center markers (spheres), merged per color/radius.
|
|
149
146
|
// Pure rotations render solid; screw axes render DASHED so the two are
|
|
@@ -152,9 +149,9 @@ color/opacity instead of one mesh per element) and disposed on change/unmount. -
|
|
|
152
149
|
const axis_groups: MaterialGroup[] = $derived.by(() => {
|
|
153
150
|
const axis_elements = elements.filter(
|
|
154
151
|
(elem) =>
|
|
155
|
-
(elem.kind === `rotation` || elem.kind === `screw` ||
|
|
156
|
-
|
|
157
|
-
|
|
152
|
+
(elem.kind === `rotation` || elem.kind === `screw` || elem.kind === `rotoinversion`) &&
|
|
153
|
+
show_kinds[elem.kind] &&
|
|
154
|
+
elem.axis,
|
|
158
155
|
)
|
|
159
156
|
// Drop 2-fold axes coincident with a higher-order axis (4 contains 2, 6 contains
|
|
160
157
|
// 2 and 3, -4 contains 2, …) to reduce visual clutter. Computed over the VISIBLE
|
|
@@ -168,9 +165,8 @@ color/opacity instead of one mesh per element) and disposed on change/unmount. -
|
|
|
168
165
|
|
|
169
166
|
const parts_by_group = new Map<string, BufferGeometry[]>()
|
|
170
167
|
for (const elem of axis_elements) {
|
|
171
|
-
if (
|
|
172
|
-
|
|
173
|
-
) continue
|
|
168
|
+
if (hide_redundant_axes && elem.order < (max_order_by_line.get(line_key(elem)) ?? 0))
|
|
169
|
+
continue
|
|
174
170
|
const clipped = clip_line_to_cell(elem.point, elem.axis as Vec3, lattice)
|
|
175
171
|
if (!clipped) continue
|
|
176
172
|
const [start, end] = clipped
|
|
@@ -61,9 +61,8 @@
|
|
|
61
61
|
const crystal_sys = spg.spacegroup_to_crystal_sys(sym_data.number)
|
|
62
62
|
const lattice_sys = spg.spacegroup_num_to_lattice_system(sym_data.number)
|
|
63
63
|
if (!crystal_sys) return `?`
|
|
64
|
-
const suffix =
|
|
65
|
-
? ` (${lattice_sys} lattice)`
|
|
66
|
-
: ``
|
|
64
|
+
const suffix =
|
|
65
|
+
lattice_sys && lattice_sys !== crystal_sys ? ` (${lattice_sys} lattice)` : ``
|
|
67
66
|
return `${crystal_sys}${suffix}`
|
|
68
67
|
})
|
|
69
68
|
|
|
@@ -89,33 +88,17 @@
|
|
|
89
88
|
})
|
|
90
89
|
|
|
91
90
|
const titles = {
|
|
92
|
-
symprec:
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
`Hall number: alternative numbering system for space groups. Useful for crystallographic software compatibility.`,
|
|
104
|
-
pearson_symbol:
|
|
105
|
-
`Pearson symbol. Format: Crystal system + Number of atoms per unit cell. Example: tP2 = tetragonal primitive with 2 atoms`,
|
|
106
|
-
symmetry_operations:
|
|
107
|
-
`Total symmetry operations that map the crystal structure onto itself. Includes rotations, translations, and combinations.`,
|
|
108
|
-
distinct_orbits:
|
|
109
|
-
`Number of unique Wyckoff positions (symmetry-equivalent atomic sites) in the crystal structure.`,
|
|
110
|
-
wyckoff_sequence:
|
|
111
|
-
`Wyckoff sequence: letters of all occupied Wyckoff positions in descending alphabetical order, with superscript counts for letters occupied by multiple orbits. A standard structure-type fingerprint (complements the Pearson symbol).`,
|
|
112
|
-
free_params:
|
|
113
|
-
`Internal degrees of freedom: number of free fractional-coordinate parameters (x, y, z in the ITA representative coordinates) summed over occupied Wyckoff orbits. 0 means all atomic positions are fully fixed by symmetry.`,
|
|
114
|
-
settings:
|
|
115
|
-
`All settings of this space group in the International Tables (origin choices, unique axes, cell choices, hexagonal vs rhombohedral axes). The setting detected for this structure is highlighted.`,
|
|
116
|
-
translations: `Number of translations in the crystal structure.`,
|
|
117
|
-
rotations: `Number of rotations in the crystal structure.`,
|
|
118
|
-
roto_translations: `Number of roto-translations in the crystal structure.`,
|
|
91
|
+
symprec: `Symmetry precision control in spglib/moyo. Lower values (e.g. 1e-4, the default) are more strict, higher values (e.g. 1e-1) are more tolerant of numerical errors in atomic positions.`,
|
|
92
|
+
algo: `Symmetry detection algorithm: Moyo uses moyo's newer recommended settings, Spglib is useful if you need compatible results to an existing set of spglib-detected symmetries.`,
|
|
93
|
+
space_group: `International Tables Space group number (1-230) - unique identifier for each space group. Higher numbers indicate more symmetries in the crystal.`,
|
|
94
|
+
crystal_system: `Crystal system classification based on the unit cell symmetry. Seven systems: triclinic, monoclinic, orthorhombic, tetragonal, trigonal, hexagonal, and cubic. For trigonal space groups, the lattice system (rhombohedral for R-centered groups, hexagonal otherwise) is shown in parentheses when it differs from the crystal system.`,
|
|
95
|
+
hermann_mauguin: `Hermann-Mauguin symbol describes symmetry operations. Format: Lattice type + Point group symmetry. Example: P4/mmm = Primitive + 4-fold rotation + mirror planes`,
|
|
96
|
+
hall_number: `Hall number: alternative numbering system for space groups. Useful for crystallographic software compatibility.`,
|
|
97
|
+
pearson_symbol: `Pearson symbol. Format: Crystal system + Number of atoms per unit cell. Example: tP2 = tetragonal primitive with 2 atoms`,
|
|
98
|
+
distinct_orbits: `Number of unique Wyckoff positions (symmetry-equivalent atomic sites) in the crystal structure.`,
|
|
99
|
+
wyckoff_sequence: `Wyckoff sequence: letters of all occupied Wyckoff positions in descending alphabetical order, with superscript counts for letters occupied by multiple orbits. A standard structure-type fingerprint (complements the Pearson symbol).`,
|
|
100
|
+
free_params: `Internal degrees of freedom: number of free fractional-coordinate parameters (x, y, z in the ITA representative coordinates) summed over occupied Wyckoff orbits. 0 means all atomic positions are fully fixed by symmetry.`,
|
|
101
|
+
settings: `All settings of this space group in the International Tables (origin choices, unique axes, cell choices, hexagonal vs rhombohedral axes). The setting detected for this structure is highlighted.`,
|
|
119
102
|
}
|
|
120
103
|
const tooltips: Record<string, string> = $derived(show_tooltips ? titles : {})
|
|
121
104
|
|
|
@@ -128,7 +111,7 @@
|
|
|
128
111
|
const symprec_step = $derived(get_step_from_order_of_magnitude(settings.symprec))
|
|
129
112
|
</script>
|
|
130
113
|
|
|
131
|
-
<div {...rest} class=
|
|
114
|
+
<div {...rest} class={[`symmetry-stats`, rest.class]}>
|
|
132
115
|
{#if sym_data}
|
|
133
116
|
{@render header?.({ sym_data, settings })}
|
|
134
117
|
{/if}
|
|
@@ -168,10 +151,10 @@
|
|
|
168
151
|
<select
|
|
169
152
|
value={settings.algo}
|
|
170
153
|
onchange={(evt) =>
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
154
|
+
(settings = {
|
|
155
|
+
...settings,
|
|
156
|
+
algo: evt.currentTarget.value as `Moyo` | `Spglib`,
|
|
157
|
+
})}
|
|
175
158
|
>
|
|
176
159
|
{#each Object.keys(SETTINGS_CONFIG.symmetry.algo.enum ?? {}) as value (value)}
|
|
177
160
|
<option {value}>{value}</option>
|
|
@@ -182,48 +165,50 @@
|
|
|
182
165
|
|
|
183
166
|
{@render children?.({ sym_data, settings })}
|
|
184
167
|
{#if sym_data}
|
|
168
|
+
{@const stat_tiles = [
|
|
169
|
+
{
|
|
170
|
+
label: `Space Group`,
|
|
171
|
+
title: `${tooltips?.space_group} at ${settings.symprec} (using ${settings.algo} algo). ${tooltips?.hermann_mauguin}`,
|
|
172
|
+
value: `${sym_data.number} (${display_hm_symbol})`,
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
label: `Crystal System`,
|
|
176
|
+
title: tooltips?.crystal_system,
|
|
177
|
+
value: crystal_system_label,
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
label: `Hall Number`,
|
|
181
|
+
title: tooltips?.hall_number,
|
|
182
|
+
value: `${sym_data.hall_number}${
|
|
183
|
+
current_setting ? ` (${current_setting.hall_symbol})` : ``
|
|
184
|
+
}`,
|
|
185
|
+
},
|
|
186
|
+
{ label: `Pearson`, title: tooltips?.pearson_symbol, value: sym_data.pearson_symbol },
|
|
187
|
+
{ label: `Wyckoff Positions`, title: tooltips?.distinct_orbits, value: wyckoff_count },
|
|
188
|
+
wyckoff_seq && {
|
|
189
|
+
label: `Wyckoff Sequence`,
|
|
190
|
+
title: tooltips?.wyckoff_sequence,
|
|
191
|
+
value: wyckoff_seq,
|
|
192
|
+
},
|
|
193
|
+
free_params !== null && {
|
|
194
|
+
label: `Free Parameters`,
|
|
195
|
+
title: tooltips?.free_params,
|
|
196
|
+
value: free_params,
|
|
197
|
+
},
|
|
198
|
+
].filter((tile) => typeof tile === `object`)}
|
|
185
199
|
<div class="stats-grid">
|
|
186
|
-
|
|
187
|
-
title=
|
|
188
|
-
|
|
189
|
-
>
|
|
190
|
-
Space Group <strong>{sym_data.number} ({display_hm_symbol})</strong>
|
|
191
|
-
</div>
|
|
192
|
-
<div title={tooltips?.crystal_system} {@attach tooltip()}>
|
|
193
|
-
Crystal System <strong>{crystal_system_label}</strong>
|
|
194
|
-
</div>
|
|
195
|
-
<div title={tooltips?.hall_number} {@attach tooltip()}>
|
|
196
|
-
Hall Number <strong>
|
|
197
|
-
{sym_data.hall_number}{
|
|
198
|
-
current_setting ? ` (${current_setting.hall_symbol})` : ``
|
|
199
|
-
}
|
|
200
|
-
</strong>
|
|
201
|
-
</div>
|
|
202
|
-
<div title={tooltips?.pearson_symbol} {@attach tooltip()}>
|
|
203
|
-
Pearson <strong>{sym_data.pearson_symbol}</strong>
|
|
204
|
-
</div>
|
|
205
|
-
<div title={tooltips?.distinct_orbits} {@attach tooltip()}>
|
|
206
|
-
Wyckoff Positions <strong>{wyckoff_count}</strong>
|
|
207
|
-
</div>
|
|
208
|
-
{#if wyckoff_seq}
|
|
209
|
-
<div title={tooltips?.wyckoff_sequence} {@attach tooltip()}>
|
|
210
|
-
Wyckoff Sequence <strong>{wyckoff_seq}</strong>
|
|
211
|
-
</div>
|
|
212
|
-
{/if}
|
|
213
|
-
{#if free_params !== null}
|
|
214
|
-
<div title={tooltips?.free_params} {@attach tooltip()}>
|
|
215
|
-
Free Parameters <strong>{free_params}</strong>
|
|
200
|
+
{#each stat_tiles as tile (tile.label)}
|
|
201
|
+
<div title={tile.title} {@attach tooltip()}>
|
|
202
|
+
{tile.label} <strong>{tile.value}</strong>
|
|
216
203
|
</div>
|
|
217
|
-
{/
|
|
204
|
+
{/each}
|
|
218
205
|
<div
|
|
219
206
|
class="sym-ops-summary"
|
|
220
207
|
title="{sym_ops_counts.translations} translations + {sym_ops_counts.rotations} rotations + {sym_ops_counts.roto_translations} roto-translations"
|
|
221
208
|
{@attach tooltip()}
|
|
222
209
|
>
|
|
223
210
|
Total sym ops: <strong>{sym_data.operations.length}</strong>
|
|
224
|
-
({sym_ops_counts.translations}T + {sym_ops_counts.rotations}R + {
|
|
225
|
-
sym_ops_counts.roto_translations
|
|
226
|
-
}RT)
|
|
211
|
+
({sym_ops_counts.translations}T + {sym_ops_counts.rotations}R + {sym_ops_counts.roto_translations}RT)
|
|
227
212
|
</div>
|
|
228
213
|
</div>
|
|
229
214
|
{#if settings_entries.length > 1}
|
|
@@ -287,8 +272,7 @@
|
|
|
287
272
|
}
|
|
288
273
|
.stats-grid {
|
|
289
274
|
display: var(--sym-stats-display, grid);
|
|
290
|
-
grid-template-columns:
|
|
291
|
-
var(--sym-stats-grid-columns, repeat(auto-fit, minmax(275px, 1fr)));
|
|
275
|
+
grid-template-columns: var(--sym-stats-grid-columns, repeat(auto-fit, minmax(275px, 1fr)));
|
|
292
276
|
gap: var(--sym-stats-grid-gap, 1ex 1em);
|
|
293
277
|
margin-block: var(--sym-stats-grid-margin-block, 1ex);
|
|
294
278
|
align-items: var(--sym-stats-grid-align, start);
|
|
@@ -39,9 +39,9 @@
|
|
|
39
39
|
const occupied_letters = new SvelteSet(rows.map((row) => wyckoff_letter(row.wyckoff)))
|
|
40
40
|
return db_positions
|
|
41
41
|
.filter((pos) => !occupied_letters.has(pos.letter))
|
|
42
|
-
.toSorted(
|
|
43
|
-
pos_1
|
|
44
|
-
|
|
42
|
+
.toSorted(
|
|
43
|
+
(pos_1, pos_2) =>
|
|
44
|
+
pos_1.multiplicity - pos_2.multiplicity || pos_1.letter.localeCompare(pos_2.letter),
|
|
45
45
|
)
|
|
46
46
|
})
|
|
47
47
|
const has_ita_coords = $derived(
|
|
@@ -65,29 +65,10 @@
|
|
|
65
65
|
</script>
|
|
66
66
|
|
|
67
67
|
{#if rows.length > 0 || unoccupied_rows.length > 0}
|
|
68
|
-
<table {...rest} class=
|
|
68
|
+
<table {...rest} class={[`wyckoff-table`, rest.class]}>
|
|
69
69
|
<thead>
|
|
70
70
|
<tr>
|
|
71
|
-
{#each [
|
|
72
|
-
[`Wyckoff`, `Wyckoff position: Multiplicity + Letter`],
|
|
73
|
-
[`Element`, `Chemical element symbol`],
|
|
74
|
-
[`Fractional Coords`, `Fractional coordinates within the unit cell`],
|
|
75
|
-
...(has_ita_coords
|
|
76
|
-
? [[
|
|
77
|
-
`ITA Coords`,
|
|
78
|
-
`Representative coordinates from the International Tables: x/y/z mark free parameters, fractions mark symmetry-fixed coordinates`,
|
|
79
|
-
]]
|
|
80
|
-
: []),
|
|
81
|
-
...(has_site_symmetry
|
|
82
|
-
? [[
|
|
83
|
-
`Site Symm.`,
|
|
84
|
-
`Site symmetry: point group of operations leaving the site invariant`,
|
|
85
|
-
]]
|
|
86
|
-
: []),
|
|
87
|
-
] as
|
|
88
|
-
[col, title]
|
|
89
|
-
(col)
|
|
90
|
-
}
|
|
71
|
+
{#each [[`Wyckoff`, `Wyckoff position: Multiplicity + Letter`], [`Element`, `Chemical element symbol`], [`Fractional Coords`, `Fractional coordinates within the unit cell`], ...(has_ita_coords ? [[`ITA Coords`, `Representative coordinates from the International Tables: x/y/z mark free parameters, fractions mark symmetry-fixed coordinates`]] : []), ...(has_site_symmetry ? [[`Site Symm.`, `Site symmetry: point group of operations leaving the site invariant`]] : [])] as [col, title] (col)}
|
|
91
72
|
<th {title}>{col}</th>
|
|
92
73
|
{/each}
|
|
93
74
|
</tr>
|
|
@@ -121,13 +102,13 @@
|
|
|
121
102
|
<td>
|
|
122
103
|
<span
|
|
123
104
|
style:background-color={colors.element[elem]}
|
|
124
|
-
style="display: inline-block; padding: 0
|
|
105
|
+
style="display: inline-block; padding: 0 4pt; border-radius: 3pt; line-height: 1.25"
|
|
125
106
|
{@attach contrast_color()}
|
|
126
107
|
>
|
|
127
108
|
{elem}
|
|
128
109
|
</span>
|
|
129
110
|
</td>
|
|
130
|
-
<td>({abc?.map(format_fractional).join(
|
|
111
|
+
<td>({abc?.map(format_fractional).join(`, `) ?? `N/A`})</td>
|
|
131
112
|
{#if has_ita_coords}
|
|
132
113
|
<td>{wyckoff_pos.coordinates ? `(${wyckoff_pos.coordinates})` : ``}</td>
|
|
133
114
|
{/if}
|
|
@@ -155,10 +136,11 @@
|
|
|
155
136
|
|
|
156
137
|
<style>
|
|
157
138
|
.wyckoff-table {
|
|
158
|
-
margin-top:
|
|
139
|
+
margin-top: 0.5em;
|
|
140
|
+
border-collapse: collapse;
|
|
159
141
|
}
|
|
160
142
|
.wyckoff-table :is(th, td) {
|
|
161
|
-
padding:
|
|
143
|
+
padding: 1px 3px;
|
|
162
144
|
text-align: center;
|
|
163
145
|
vertical-align: middle;
|
|
164
146
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
// Cell transformation utilities for converting between original, conventional, and primitive cells
|
|
1
2
|
import { ATOMIC_NUMBER_TO_SYMBOL } from '../composition/parse';
|
|
2
3
|
import * as math from '../math';
|
|
3
4
|
import { wrap_to_unit_cell } from '../structure/pbc';
|
|
@@ -18,10 +19,8 @@ original_structure) {
|
|
|
18
19
|
// serialization for both input and output (see to_cell_json: column-major(B) ==
|
|
19
20
|
// row-major(RB)), so the flat array is row-major with each row a lattice vector.
|
|
20
21
|
const lattice_matrix = math.vec9_to_mat3x3([...cell.lattice.basis]);
|
|
21
|
-
// Calculate lattice parameters from matrix
|
|
22
22
|
const lattice_params = math.calc_lattice_params(lattice_matrix);
|
|
23
23
|
const frac_to_cart = math.create_frac_to_cart(lattice_matrix);
|
|
24
|
-
// Build sites from positions and atomic numbers
|
|
25
24
|
const sites = cell.positions.map((abc, idx) => {
|
|
26
25
|
const atomic_number = cell.numbers[idx];
|
|
27
26
|
const element = ATOMIC_NUMBER_TO_SYMBOL[atomic_number];
|
|
@@ -30,11 +29,10 @@ original_structure) {
|
|
|
30
29
|
}
|
|
31
30
|
// Wrap fractional coordinates to [0, 1) range (moyo-wasm may return outside)
|
|
32
31
|
const wrapped_abc = wrap_to_unit_cell(abc);
|
|
33
|
-
const xyz = frac_to_cart(wrapped_abc);
|
|
34
32
|
// Oxidation state is set to 0 (unknown) because moyo-wasm only provides atomic numbers.
|
|
35
33
|
// transformed cell may have different/reordered sites, making it non-trivial to
|
|
36
34
|
// map oxidation states from original structure.
|
|
37
|
-
return make_site(element, wrapped_abc,
|
|
35
|
+
return make_site(element, wrapped_abc, frac_to_cart(wrapped_abc), element);
|
|
38
36
|
});
|
|
39
37
|
const lattice = {
|
|
40
38
|
matrix: lattice_matrix,
|
|
@@ -54,14 +52,12 @@ original_structure) {
|
|
|
54
52
|
// The conventional cell is the standard crystallographic setting for the space group.
|
|
55
53
|
export function get_conventional_cell(original_structure, // The original input structure
|
|
56
54
|
sym_data) {
|
|
57
|
-
// The conventional cell as a Crystal
|
|
58
55
|
return moyo_cell_to_structure(sym_data.std_cell, original_structure);
|
|
59
56
|
}
|
|
60
57
|
// Get the primitive cell from symmetry analysis data.
|
|
61
58
|
// The primitive cell is the smallest unit cell with one lattice point.
|
|
62
59
|
export function get_primitive_cell(original_structure, // The original input structure
|
|
63
60
|
sym_data) {
|
|
64
|
-
// The primitive cell as a Crystal
|
|
65
61
|
return moyo_cell_to_structure(sym_data.prim_std_cell, original_structure);
|
|
66
62
|
}
|
|
67
63
|
// Transform a structure based on the selected cell type.
|
|
@@ -69,16 +65,12 @@ sym_data) {
|
|
|
69
65
|
export function transform_cell(structure, // The original structure
|
|
70
66
|
cell_type, // The desired cell type ('original', 'conventional', or 'primitive')
|
|
71
67
|
sym_data) {
|
|
72
|
-
|
|
73
|
-
if (cell_type === `original` || !sym_data) {
|
|
68
|
+
if (!sym_data)
|
|
74
69
|
return structure;
|
|
75
|
-
|
|
76
|
-
if (cell_type === `conventional`) {
|
|
70
|
+
if (cell_type === `conventional`)
|
|
77
71
|
return get_conventional_cell(structure, sym_data);
|
|
78
|
-
|
|
79
|
-
if (cell_type === `primitive`) {
|
|
72
|
+
if (cell_type === `primitive`)
|
|
80
73
|
return get_primitive_cell(structure, sym_data);
|
|
81
|
-
|
|
82
|
-
// Unknown cell_type at runtime (e.g. from stale persisted settings): leave unchanged
|
|
74
|
+
// 'original' or unknown runtime cell_type (e.g. stale persisted settings): unchanged
|
|
83
75
|
return structure;
|
|
84
76
|
}
|
package/dist/symmetry/index.d.ts
CHANGED
|
@@ -48,6 +48,7 @@ export declare const map_std_to_orig_site_indices: (std_positions: Vec3[], std_n
|
|
|
48
48
|
}, tol?: number) => number[][];
|
|
49
49
|
export declare function analyze_structure_symmetry(struct_or_mol: AnyStructure, settings: Partial<SymmetrySettings>): Promise<SymmetryDataset>;
|
|
50
50
|
export declare function simplicity_score(vec: number[]): number;
|
|
51
|
+
export declare const wyckoff_multiplicity: (label: string) => number;
|
|
51
52
|
export declare function wyckoff_positions_from_moyo(sym_data: SymmetryDataset | null): WyckoffPos[];
|
|
52
53
|
export declare function apply_symmetry_operations(position: Vec3, operations: MoyoDataset[`operations`]): Vec3[];
|
|
53
54
|
export declare function map_wyckoff_to_all_atoms(wyckoff_positions: WyckoffPos[], displayed_structure: Crystal, orig_structure: Crystal, sym_data: MoyoDataset | null, tolerance?: number): WyckoffPos[];
|
package/dist/symmetry/index.js
CHANGED
|
@@ -89,10 +89,9 @@ function get_site_atomic_number(site, site_idx) {
|
|
|
89
89
|
best_occupancy = occupancy;
|
|
90
90
|
}
|
|
91
91
|
});
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
const atomic_number = SYMBOL_TO_ATOMIC_NUMBER[selected_element];
|
|
92
|
+
const atomic_number = selected_element
|
|
93
|
+
? SYMBOL_TO_ATOMIC_NUMBER[selected_element]
|
|
94
|
+
: undefined;
|
|
96
95
|
if (atomic_number === undefined) {
|
|
97
96
|
throw new Error(`Unknown element at site ${site_idx}: ${selected_element}`);
|
|
98
97
|
}
|
|
@@ -233,17 +232,20 @@ function wyckoff_rows_from_input_orbits(sym_data) {
|
|
|
233
232
|
};
|
|
234
233
|
});
|
|
235
234
|
}
|
|
236
|
-
//
|
|
237
|
-
|
|
238
|
-
//
|
|
239
|
-
//
|
|
235
|
+
// Numeric multiplicity prefix of a Wyckoff label like `4a` (NaN when absent)
|
|
236
|
+
export const wyckoff_multiplicity = (label) => Number(/^\d+/.exec(label)?.[0] ?? NaN);
|
|
237
|
+
// Generate Wyckoff table rows from symmetry data via wyckoff_rows_from_input_orbits
|
|
238
|
+
// (analyze_structure_symmetry always attaches the input_cell that grouping needs).
|
|
240
239
|
// Rows sort by ascending multiplicity, then Wyckoff label.
|
|
241
240
|
export function wyckoff_positions_from_moyo(sym_data) {
|
|
242
241
|
if (!sym_data)
|
|
243
242
|
return [];
|
|
244
243
|
const orbit_rows = wyckoff_rows_from_input_orbits(sym_data);
|
|
245
244
|
return (orbit_rows ?? []).sort((w1, w2) => {
|
|
246
|
-
const [w1_mult, w2_mult] = [
|
|
245
|
+
const [w1_mult, w2_mult] = [
|
|
246
|
+
wyckoff_multiplicity(w1.wyckoff),
|
|
247
|
+
wyckoff_multiplicity(w2.wyckoff),
|
|
248
|
+
];
|
|
247
249
|
if (w1_mult !== w2_mult)
|
|
248
250
|
return w1_mult - w2_mult;
|
|
249
251
|
return w1.wyckoff.localeCompare(w2.wyckoff);
|
|
@@ -312,7 +314,8 @@ class WrappedPositionIndex {
|
|
|
312
314
|
n_cells;
|
|
313
315
|
constructor(positions, tolerance) {
|
|
314
316
|
this.tolerance = tolerance;
|
|
315
|
-
|
|
317
|
+
const inv_tolerance = Math.floor(1 / Math.max(tolerance, 1e-9));
|
|
318
|
+
this.n_cells = Math.min(64, Math.max(1, inv_tolerance));
|
|
316
319
|
this.coords = positions;
|
|
317
320
|
positions.forEach((pos, idx) => {
|
|
318
321
|
const key = this.cell_key(pos, 0, 0, 0);
|
|
@@ -66,8 +66,9 @@ export function normalize_spacegroup(spacegroup) {
|
|
|
66
66
|
const from_symbol = SPACEGROUP_SYMBOL_TO_NUM[spacegroup];
|
|
67
67
|
if (from_symbol !== undefined)
|
|
68
68
|
return from_symbol;
|
|
69
|
-
|
|
70
|
-
|
|
69
|
+
// Accept trailing setting qualifiers like `146:R` by parsing the leading integer
|
|
70
|
+
const int_match = /^\s*(?<num>\d+)/.exec(spacegroup);
|
|
71
|
+
return int_match ? normalize_spacegroup(Number(int_match[1])) : null;
|
|
71
72
|
}
|
|
72
73
|
export const SPACEGROUP_SYMBOL_TO_NUM = {
|
|
73
74
|
// Triclinic
|