matterviz 0.4.1 → 0.4.2
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 +12 -14
- package/dist/Icon.svelte +7 -4
- package/dist/MillerIndexInput.svelte +2 -2
- package/dist/app.css +53 -0
- package/dist/brillouin/BrillouinZone.svelte +75 -85
- 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 +26 -39
- package/dist/brillouin/BrillouinZoneScene.svelte.d.ts +1 -1
- package/dist/chempot-diagram/ChemPotDiagram.svelte +33 -38
- package/dist/chempot-diagram/ChemPotDiagram2D.svelte +62 -74
- package/dist/chempot-diagram/ChemPotDiagram2D.svelte.d.ts +1 -1
- package/dist/chempot-diagram/ChemPotDiagram3D.svelte +511 -547
- package/dist/chempot-diagram/ChemPotDiagram3D.svelte.d.ts +1 -1
- package/dist/chempot-diagram/async-compute.svelte.js +1 -1
- package/dist/chempot-diagram/controls-state.svelte.js +1 -1
- package/dist/colors/index.d.ts +0 -4
- package/dist/colors/index.js +19 -20
- package/dist/composition/BarChart.svelte +37 -31
- package/dist/composition/BubbleChart.svelte +17 -17
- package/dist/composition/Composition.svelte +7 -11
- package/dist/composition/Formula.svelte +18 -25
- package/dist/composition/FormulaFilter.svelte +92 -95
- package/dist/composition/PieChart.svelte +55 -41
- package/dist/composition/format.js +1 -1
- 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 +11 -10
- package/dist/constants.js +11 -9
- 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 -92
- package/dist/convex-hull/ConvexHull2D.svelte.d.ts +1 -1
- package/dist/convex-hull/ConvexHull3D.svelte +109 -140
- package/dist/convex-hull/ConvexHull3D.svelte.d.ts +1 -1
- package/dist/convex-hull/ConvexHull4D.svelte +75 -94
- 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 +17 -21
- 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/helpers.d.ts +8 -10
- package/dist/convex-hull/helpers.js +36 -36
- package/dist/convex-hull/hull-state.svelte.d.ts +1 -1
- package/dist/convex-hull/thermodynamics.js +18 -17
- package/dist/coordination/CoordinationBarPlot.svelte +38 -33
- 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 -8
- 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 +24 -29
- package/dist/element/Nucleus.svelte +4 -2
- package/dist/element/data.d.ts +1 -2
- package/dist/element/helpers.d.ts +4 -0
- package/dist/element/helpers.js +18 -0
- package/dist/element/index.d.ts +1 -4
- package/dist/element/index.js +3 -18
- 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 +14 -22
- package/dist/fermi-surface/FermiSurface.svelte.d.ts +5 -7
- package/dist/fermi-surface/FermiSurfaceControls.svelte +6 -20
- package/dist/fermi-surface/FermiSurfaceControls.svelte.d.ts +1 -1
- package/dist/fermi-surface/FermiSurfaceScene.svelte +37 -64
- package/dist/fermi-surface/FermiSurfaceScene.svelte.d.ts +1 -1
- package/dist/fermi-surface/FermiSurfaceTooltip.svelte +9 -6
- package/dist/fermi-surface/compute.js +3 -3
- package/dist/fermi-surface/parse.js +22 -24
- package/dist/heatmap-matrix/HeatmapMatrix.svelte +109 -148
- 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/io/ExportPane.svelte +10 -6
- package/dist/io/decompress.d.ts +2 -1
- package/dist/io/decompress.js +22 -35
- package/dist/io/export.d.ts +4 -0
- package/dist/io/export.js +5 -1
- package/dist/io/fetch.d.ts +0 -3
- package/dist/io/fetch.js +0 -11
- 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.js +13 -25
- package/dist/isosurface/Isosurface.svelte +17 -23
- package/dist/isosurface/IsosurfaceControls.svelte +37 -42
- 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/labels.d.ts +6 -2
- package/dist/labels.js +43 -13
- package/dist/layout/FullscreenButton.svelte +2 -1
- package/dist/layout/FullscreenToggle.svelte +10 -4
- package/dist/layout/InfoCard.svelte +7 -18
- 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 +21 -17
- package/dist/layout/SubpageGrid.svelte +3 -1
- package/dist/layout/ViewerChrome.svelte +9 -10
- 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 +8 -11
- package/dist/layout/json-tree/JsonTree.svelte +53 -77
- package/dist/layout/json-tree/JsonValue.svelte +7 -15
- package/dist/layout/json-tree/utils.js +14 -23
- package/dist/math.d.ts +2 -0
- package/dist/math.js +19 -0
- package/dist/overlays/ContextMenu.svelte +4 -2
- package/dist/overlays/CopyButton.svelte +11 -5
- package/dist/overlays/DragControlTab.svelte +6 -1
- package/dist/overlays/DraggablePane.svelte +81 -26
- package/dist/overlays/DraggablePane.svelte.d.ts +1 -0
- package/dist/overlays/GlassChip.svelte +30 -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 +11 -63
- package/dist/periodic-table/TableInset.svelte +9 -4
- package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte +50 -71
- 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 +3 -3
- 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 +21 -15
- package/dist/phase-diagram/utils.js +2 -3
- package/dist/plot/bar/BarPlot.svelte +430 -391
- 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 +29 -36
- package/dist/plot/bar/data.d.ts +5 -4
- package/dist/plot/bar/data.js +2 -1
- package/dist/plot/box/BoxPlot.svelte +301 -209
- 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.js +1 -1
- 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.js +9 -5
- 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 +3 -1
- package/dist/plot/core/layout.js +22 -13
- package/dist/plot/core/marginals.d.ts +170 -0
- package/dist/plot/core/marginals.js +436 -0
- 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/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 +51 -0
- package/dist/plot/core/utils/hierarchy-chart.js +179 -0
- package/dist/plot/core/utils/hierarchy-labels.d.ts +20 -0
- package/dist/plot/core/utils/hierarchy-labels.js +99 -0
- package/dist/plot/core/utils/label-placement.js +2 -2
- package/dist/plot/histogram/Histogram.svelte +304 -325
- 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/scatter/BinnedScatterPlot.svelte +263 -109
- package/dist/plot/scatter/BinnedScatterPlot.svelte.d.ts +7 -0
- package/dist/plot/scatter/ElementScatter.svelte +4 -1
- package/dist/plot/scatter/ScatterPlot.svelte +477 -385
- 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/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 +251 -329
- 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 +907 -0
- package/dist/plot/treemap/Treemap.svelte.d.ts +84 -0
- package/dist/plot/treemap/index.d.ts +3 -0
- package/dist/plot/treemap/index.js +4 -0
- package/dist/plot/treemap/treemap.d.ts +26 -0
- package/dist/plot/treemap/treemap.js +99 -0
- package/dist/rdf/RdfPlot.svelte +22 -26
- package/dist/rdf/RdfPlot.svelte.d.ts +1 -1
- package/dist/rdf/calc-rdf.js +4 -8
- package/dist/sanitize.js +1 -1
- package/dist/scene/bind-renderer.svelte.js +14 -6
- package/dist/settings.d.ts +19 -9
- package/dist/settings.js +77 -50
- package/dist/spectral/Bands.svelte +223 -230
- package/dist/spectral/BandsAndDos.svelte +11 -9
- package/dist/spectral/BrillouinBandsDos.svelte +19 -27
- package/dist/spectral/Dos.svelte +70 -73
- package/dist/spectral/helpers.d.ts +3 -3
- package/dist/spectral/helpers.js +25 -35
- 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 +115 -75
- package/dist/structure/AtomLegend.svelte.d.ts +1 -1
- package/dist/structure/Bond.svelte +31 -23
- package/dist/structure/CanvasTooltip.svelte +15 -3
- package/dist/structure/CellSelect.svelte +11 -26
- 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 +473 -419
- package/dist/structure/Structure.svelte.d.ts +4 -2
- package/dist/structure/StructureCarousel.svelte +630 -0
- package/dist/structure/StructureCarousel.svelte.d.ts +19 -0
- package/dist/structure/StructureControls.svelte +157 -399
- package/dist/structure/StructureControls.svelte.d.ts +1 -1
- package/dist/structure/StructureExportPane.svelte +17 -21
- package/dist/structure/StructureInfoPane.svelte +72 -66
- package/dist/structure/StructureInfoPane.svelte.d.ts +1 -1
- package/dist/structure/StructureScene.svelte +467 -476
- package/dist/structure/StructureScene.svelte.d.ts +3 -1
- package/dist/structure/StructureViewport.svelte +386 -0
- package/dist/structure/StructureViewport.svelte.d.ts +63 -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 +104 -38
- package/dist/structure/bonding.d.ts +10 -3
- package/dist/structure/bonding.js +84 -28
- 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 +39 -31
- package/dist/structure/format-detect.d.ts +1 -0
- package/dist/structure/format-detect.js +22 -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 +13 -2
- 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 +243 -222
- package/dist/structure/partial-occupancy.js +4 -2
- package/dist/structure/pbc.js +78 -98
- package/dist/structure/polyhedra.d.ts +0 -1
- package/dist/structure/polyhedra.js +3 -18
- 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 +56 -68
- package/dist/symmetry/WyckoffTable.svelte +5 -24
- package/dist/symmetry/cell-transform.js +1 -0
- package/dist/symmetry/index.d.ts +1 -0
- package/dist/symmetry/index.js +8 -2
- package/dist/symmetry/spacegroups.js +3 -2
- package/dist/table/HeatmapTable.svelte +1102 -365
- package/dist/table/HeatmapTable.svelte.d.ts +12 -2
- package/dist/table/ToggleMenu.svelte +5 -12
- 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/index.d.ts +1 -5
- package/dist/theme/index.js +4 -10
- package/dist/theme/themes.mjs +14 -7
- package/dist/tooltip/KCoords.svelte +4 -1
- package/dist/tooltip/TooltipContent.svelte +2 -5
- package/dist/trajectory/Trajectory.svelte +515 -308
- package/dist/trajectory/Trajectory.svelte.d.ts +1 -1
- package/dist/trajectory/TrajectoryError.svelte +11 -8
- package/dist/trajectory/TrajectoryExportPane.svelte +14 -31
- package/dist/trajectory/TrajectoryInfoPane.svelte +85 -97
- package/dist/trajectory/extract.js +56 -34
- package/dist/trajectory/format-detect.js +11 -9
- package/dist/trajectory/frame-reader.d.ts +2 -0
- package/dist/trajectory/frame-reader.js +33 -29
- package/dist/trajectory/helpers.d.ts +2 -0
- package/dist/trajectory/helpers.js +18 -7
- package/dist/trajectory/index.d.ts +1 -0
- package/dist/trajectory/index.js +3 -0
- 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 +2 -3
- package/dist/trajectory/parse/index.js +17 -20
- 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 +5 -0
- package/dist/trajectory/parse/vaspout-h5.js +284 -0
- package/dist/trajectory/parse/xyz.js +11 -7
- package/dist/trajectory/plotting.d.ts +8 -9
- package/dist/trajectory/plotting.js +99 -27
- package/dist/utils.d.ts +3 -0
- package/dist/utils.js +7 -0
- package/dist/xrd/XrdPlot.svelte +47 -61
- package/dist/xrd/broadening.js +2 -1
- package/dist/xrd/calc-xrd.js +2 -4
- package/dist/xrd/parse.d.ts +0 -1
- package/dist/xrd/parse.js +56 -73
- package/package.json +61 -33
- package/dist/api/mp.d.ts +0 -6
- package/dist/api/mp.js +0 -22
- package/dist/plot/sunburst/SunburstControls.svelte +0 -200
|
@@ -143,25 +143,25 @@
|
|
|
143
143
|
if (!band_structs) return {}
|
|
144
144
|
|
|
145
145
|
// Detect single band structure by checking for characteristic fields
|
|
146
|
-
// - pymatgen format: has @class or @module markers (may also have branches)
|
|
147
146
|
// - matterviz format: has qpoints + branches (no pymatgen markers)
|
|
148
|
-
const has_qpoints =
|
|
147
|
+
const has_qpoints =
|
|
148
|
+
`qpoints` in band_structs &&
|
|
149
149
|
Array.isArray(band_structs.qpoints) &&
|
|
150
150
|
band_structs.qpoints.length > 0
|
|
151
|
-
const has_kpoints =
|
|
151
|
+
const has_kpoints =
|
|
152
|
+
`kpoints` in band_structs &&
|
|
152
153
|
Array.isArray(band_structs.kpoints) &&
|
|
153
154
|
band_structs.kpoints.length > 0
|
|
154
155
|
const has_bands = `bands` in band_structs
|
|
155
|
-
const has_frequencies_cm =
|
|
156
|
-
Array.isArray(band_structs.frequencies_cm)
|
|
156
|
+
const has_frequencies_cm =
|
|
157
|
+
`frequencies_cm` in band_structs && Array.isArray(band_structs.frequencies_cm)
|
|
157
158
|
const has_branches = `branches` in band_structs
|
|
158
159
|
// Pymatgen structures have explicit class/module markers
|
|
159
160
|
const is_pymatgen = `@class` in band_structs || `@module` in band_structs
|
|
160
161
|
|
|
161
162
|
// Pymatgen single: has markers and point/band data (may have branches too)
|
|
162
|
-
const is_pymatgen_single =
|
|
163
|
-
(has_qpoints || has_kpoints) &&
|
|
164
|
-
(has_bands || has_frequencies_cm)
|
|
163
|
+
const is_pymatgen_single =
|
|
164
|
+
is_pymatgen && (has_qpoints || has_kpoints) && (has_bands || has_frequencies_cm)
|
|
165
165
|
// Matterviz single: has qpoints + branches but NO pymatgen markers
|
|
166
166
|
const is_matterviz_single = !is_pymatgen && has_qpoints && has_branches
|
|
167
167
|
const is_single = is_matterviz_single || is_pymatgen_single
|
|
@@ -186,8 +186,11 @@
|
|
|
186
186
|
if (!band_structs) return `phonon`
|
|
187
187
|
|
|
188
188
|
// Single structure has marker fields; dict of structures has label keys
|
|
189
|
-
const is_single =
|
|
190
|
-
`
|
|
189
|
+
const is_single =
|
|
190
|
+
`@class` in band_structs ||
|
|
191
|
+
`@module` in band_structs ||
|
|
192
|
+
`kpoints` in band_structs ||
|
|
193
|
+
`qpoints` in band_structs
|
|
191
194
|
const source = (is_single ? band_structs : Object.values(band_structs)[0]) as
|
|
192
195
|
| Record<string, unknown>
|
|
193
196
|
| undefined
|
|
@@ -196,12 +199,11 @@
|
|
|
196
199
|
// Electronic: has kpoints, BandStructure* class (not Phonon*), or electronic_structure module
|
|
197
200
|
const py_class_name = String(source[`@class`] ?? ``)
|
|
198
201
|
if (
|
|
199
|
-
(`kpoints` in source && Array.isArray(source.kpoints) &&
|
|
200
|
-
|
|
201
|
-
(py_class_name.startsWith(`BandStructure`) &&
|
|
202
|
-
!py_class_name.startsWith(`Phonon`)) ||
|
|
202
|
+
(`kpoints` in source && Array.isArray(source.kpoints) && source.kpoints.length > 0) ||
|
|
203
|
+
(py_class_name.startsWith(`BandStructure`) && !py_class_name.startsWith(`Phonon`)) ||
|
|
203
204
|
String(source[`@module`] ?? ``).includes(`electronic_structure`)
|
|
204
|
-
)
|
|
205
|
+
)
|
|
206
|
+
return `electronic`
|
|
205
207
|
|
|
206
208
|
return `phonon`
|
|
207
209
|
})
|
|
@@ -212,16 +214,15 @@
|
|
|
212
214
|
if (detected_band_type !== `electronic`) return undefined
|
|
213
215
|
|
|
214
216
|
// Check raw input for efermi field
|
|
215
|
-
const source =
|
|
216
|
-
? band_structs
|
|
217
|
-
: Object.values(band_structs)[0]
|
|
217
|
+
const source =
|
|
218
|
+
`efermi` in (band_structs as object) ? band_structs : Object.values(band_structs)[0]
|
|
218
219
|
const efermi = (source as Record<string, unknown>)?.efermi
|
|
219
220
|
return typeof efermi === `number` ? efermi : undefined
|
|
220
221
|
})
|
|
221
222
|
|
|
222
223
|
let effective_spin_mode = $derived.by((): BandsSpinMode => {
|
|
223
224
|
if (detected_band_type !== `electronic`) return null
|
|
224
|
-
return
|
|
225
|
+
return band_spin_mode === `up_only` || band_spin_mode === `down_only`
|
|
225
226
|
? band_spin_mode
|
|
226
227
|
: `overlay`
|
|
227
228
|
})
|
|
@@ -252,13 +253,15 @@
|
|
|
252
253
|
let common_segment_keys = $derived.by(() =>
|
|
253
254
|
all_segment_keys.filter(
|
|
254
255
|
(segment_key) => all_segments[segment_key].length === num_structures,
|
|
255
|
-
)
|
|
256
|
+
),
|
|
256
257
|
)
|
|
257
258
|
let empty_state_attrs = $derived.by(() => {
|
|
258
259
|
const attrs: Record<string, Dom_attr_value> = {}
|
|
259
260
|
for (const [attr_name, attr_value] of Object.entries(rest)) {
|
|
260
261
|
if (
|
|
261
|
-
(attr_name === `class` ||
|
|
262
|
+
(attr_name === `class` ||
|
|
263
|
+
attr_name === `style` ||
|
|
264
|
+
attr_name === `role` ||
|
|
262
265
|
attr_name.startsWith(`aria-`)) &&
|
|
263
266
|
is_dom_attr_value(attr_value)
|
|
264
267
|
) {
|
|
@@ -299,8 +302,7 @@
|
|
|
299
302
|
}
|
|
300
303
|
const ordered_segments = helpers.get_ordered_segments(canonical, segments_to_plot)
|
|
301
304
|
|
|
302
|
-
for (
|
|
303
|
-
const segment_key = ordered_segments[seg_idx]
|
|
305
|
+
for (const segment_key of ordered_segments) {
|
|
304
306
|
if (positions[segment_key]) continue
|
|
305
307
|
|
|
306
308
|
const [start_label, end_label] = segment_key.split(`_`)
|
|
@@ -322,8 +324,8 @@
|
|
|
322
324
|
// Place at same x position as current, no advancement
|
|
323
325
|
positions[segment_key] = [current_x, current_x]
|
|
324
326
|
} else {
|
|
325
|
-
const segment_len =
|
|
326
|
-
bs.distance[matching_branch.start_index]
|
|
327
|
+
const segment_len =
|
|
328
|
+
bs.distance[matching_branch.end_index] - bs.distance[matching_branch.start_index]
|
|
327
329
|
positions[segment_key] = [current_x, current_x + segment_len]
|
|
328
330
|
current_x += segment_len
|
|
329
331
|
}
|
|
@@ -336,130 +338,130 @@
|
|
|
336
338
|
})
|
|
337
339
|
|
|
338
340
|
// Convert band structures to scatter plot series + track max slope in one pass
|
|
339
|
-
let { series_data, max_abs_slope } = $derived.by(
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
341
|
+
let { series_data, max_abs_slope } = $derived.by(
|
|
342
|
+
(): {
|
|
343
|
+
series_data: DataSeries[]
|
|
344
|
+
max_abs_slope: number
|
|
345
|
+
} => {
|
|
346
|
+
if (Object.keys(band_structs_dict).length === 0 || segments_to_plot.size === 0) {
|
|
347
|
+
return { series_data: [], max_abs_slope: 1 }
|
|
348
|
+
}
|
|
346
349
|
|
|
347
|
-
|
|
348
|
-
|
|
350
|
+
const all_series: DataSeries[] = []
|
|
351
|
+
let max_slope = 0
|
|
349
352
|
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
: []
|
|
353
|
+
for (const [bs_idx, [label, bs]] of Object.entries(band_structs_dict).entries()) {
|
|
354
|
+
const color = PLOT_COLORS[bs_idx % PLOT_COLORS.length]
|
|
355
|
+
const structure_label = label || `Structure ${bs_idx + 1}`
|
|
356
|
+
const gamma_indices =
|
|
357
|
+
detected_band_type === `phonon` ? helpers.find_gamma_indices(bs) : []
|
|
356
358
|
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
if (!segments_to_plot.has(segment_key)) continue
|
|
359
|
+
for (const branch of bs.branches) {
|
|
360
|
+
const start_idx = branch.start_index
|
|
361
|
+
const end_idx = branch.end_index + 1
|
|
362
|
+
const start_label = bs.qpoints[start_idx]?.label ?? undefined
|
|
363
|
+
const end_label = bs.qpoints[end_idx - 1]?.label ?? undefined
|
|
364
|
+
const segment_key = helpers.get_segment_key(start_label, end_label)
|
|
365
365
|
|
|
366
|
-
|
|
367
|
-
const is_discontinuity = branch.end_index - branch.start_index === 1
|
|
368
|
-
if (is_discontinuity) continue
|
|
366
|
+
if (!segments_to_plot.has(segment_key)) continue
|
|
369
367
|
|
|
370
|
-
|
|
368
|
+
// Skip discontinuous segments (consecutive labeled points)
|
|
369
|
+
const is_discontinuity = branch.end_index - branch.start_index === 1
|
|
370
|
+
if (is_discontinuity) continue
|
|
371
371
|
|
|
372
|
-
|
|
373
|
-
const segment_distances = bs.distance.slice(start_idx, end_idx)
|
|
374
|
-
const scaled_distances = helpers.scale_segment_distances(
|
|
375
|
-
segment_distances,
|
|
376
|
-
x_start,
|
|
377
|
-
x_end,
|
|
378
|
-
)
|
|
372
|
+
const [x_start, x_end] = x_positions?.[segment_key] || [0, 1]
|
|
379
373
|
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
const
|
|
383
|
-
|
|
374
|
+
// Scale distances for this segment
|
|
375
|
+
const segment_distances = bs.distance.slice(start_idx, end_idx)
|
|
376
|
+
const scaled_distances = helpers.scale_segment_distances(
|
|
377
|
+
segment_distances,
|
|
378
|
+
x_start,
|
|
379
|
+
x_end,
|
|
384
380
|
)
|
|
385
|
-
const is_acoustic = helpers.classify_acoustic(bs, band_idx, gamma_indices)
|
|
386
381
|
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
382
|
+
// Create series for each band (and spin channel for electronic structures)
|
|
383
|
+
for (let band_idx = 0; band_idx < bs.nb_bands; band_idx++) {
|
|
384
|
+
const frequencies = convert_band_values(
|
|
385
|
+
bs.bands[band_idx].slice(start_idx, end_idx),
|
|
386
|
+
)
|
|
387
|
+
const is_acoustic = helpers.classify_acoustic(bs, band_idx, gamma_indices)
|
|
393
388
|
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
389
|
+
const line_style_up = get_line_style(
|
|
390
|
+
color,
|
|
391
|
+
is_acoustic === true,
|
|
392
|
+
frequencies,
|
|
393
|
+
band_idx,
|
|
394
|
+
)
|
|
398
395
|
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
396
|
+
const spin_down_band = bs.spin_down_bands?.[band_idx]
|
|
397
|
+
const has_spin_down_channel =
|
|
398
|
+
detected_band_type === `electronic` &&
|
|
399
|
+
Array.isArray(spin_down_band) &&
|
|
400
|
+
spin_down_band.length >= end_idx
|
|
401
|
+
|
|
402
|
+
const track_max_slope = (meta: helpers.BandPointMeta[]) => {
|
|
403
|
+
for (const pt of meta) {
|
|
404
|
+
if (typeof pt.slope === `number` && Number.isFinite(pt.slope)) {
|
|
405
|
+
max_slope = Math.max(max_slope, Math.abs(pt.slope))
|
|
406
|
+
}
|
|
403
407
|
}
|
|
404
408
|
}
|
|
405
|
-
}
|
|
406
409
|
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
:
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
})
|
|
428
|
-
}
|
|
410
|
+
if (effective_spin_mode !== `down_only`) {
|
|
411
|
+
const meta = helpers.build_point_metadata({
|
|
412
|
+
x_vals: scaled_distances,
|
|
413
|
+
y_vals: frequencies,
|
|
414
|
+
band_idx,
|
|
415
|
+
spin: `up`,
|
|
416
|
+
is_acoustic,
|
|
417
|
+
bs,
|
|
418
|
+
start_idx,
|
|
419
|
+
})
|
|
420
|
+
track_max_slope(meta)
|
|
421
|
+
all_series.push({
|
|
422
|
+
x: scaled_distances,
|
|
423
|
+
y: frequencies,
|
|
424
|
+
markers: `line`,
|
|
425
|
+
label: has_spin_down_channel ? `${structure_label} (↑)` : structure_label,
|
|
426
|
+
line_style: line_style_up,
|
|
427
|
+
metadata: meta,
|
|
428
|
+
})
|
|
429
|
+
}
|
|
429
430
|
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
431
|
+
if (has_spin_down_channel && effective_spin_mode !== `up_only`) {
|
|
432
|
+
const spin_down_frequencies = convert_band_values(
|
|
433
|
+
spin_down_band.slice(start_idx, end_idx),
|
|
434
|
+
)
|
|
435
|
+
const meta = helpers.build_point_metadata({
|
|
436
|
+
x_vals: scaled_distances,
|
|
437
|
+
y_vals: spin_down_frequencies,
|
|
438
|
+
band_idx,
|
|
439
|
+
spin: `down`,
|
|
440
|
+
is_acoustic,
|
|
441
|
+
bs,
|
|
442
|
+
start_idx,
|
|
443
|
+
})
|
|
444
|
+
track_max_slope(meta)
|
|
445
|
+
all_series.push({
|
|
446
|
+
x: scaled_distances,
|
|
447
|
+
y: spin_down_frequencies,
|
|
448
|
+
markers: `line`,
|
|
449
|
+
label: `${structure_label} (↓)`,
|
|
450
|
+
line_style: {
|
|
451
|
+
...line_style_up,
|
|
452
|
+
line_dash: `4,2`,
|
|
453
|
+
stroke_width: Math.max(1, line_style_up.stroke_width - 0.1),
|
|
454
|
+
},
|
|
455
|
+
metadata: meta,
|
|
456
|
+
})
|
|
457
|
+
}
|
|
456
458
|
}
|
|
457
459
|
}
|
|
458
460
|
}
|
|
459
|
-
}
|
|
460
461
|
|
|
461
|
-
|
|
462
|
-
|
|
462
|
+
return { series_data: all_series, max_abs_slope: max_slope || 1 }
|
|
463
|
+
},
|
|
464
|
+
)
|
|
463
465
|
|
|
464
466
|
// Compute ribbon data for bands with width information
|
|
465
467
|
let ribbon_data = $derived.by((): RibbonData[] => {
|
|
@@ -509,9 +511,7 @@
|
|
|
509
511
|
// Skip if all widths are zero or missing
|
|
510
512
|
if (width_values.every((wv) => !wv || wv <= 0)) continue
|
|
511
513
|
|
|
512
|
-
const y_values = convert_band_values(
|
|
513
|
-
bs.bands[band_idx].slice(start_idx, end_idx),
|
|
514
|
-
)
|
|
514
|
+
const y_values = convert_band_values(bs.bands[band_idx].slice(start_idx, end_idx))
|
|
515
515
|
|
|
516
516
|
all_ribbons.push({
|
|
517
517
|
x_values: scaled_distances,
|
|
@@ -548,9 +548,7 @@
|
|
|
548
548
|
.sort(([, [a]], [, [b]]) => a - b)
|
|
549
549
|
.forEach(([segment_key, [x_start, x_end]]) => {
|
|
550
550
|
const [start_lbl, end_lbl] = segment_key.split(`_`)
|
|
551
|
-
const pretty_start = start_lbl !== `null`
|
|
552
|
-
? helpers.pretty_sym_point(start_lbl)
|
|
553
|
-
: ``
|
|
551
|
+
const pretty_start = start_lbl !== `null` ? helpers.pretty_sym_point(start_lbl) : ``
|
|
554
552
|
const pretty_end = end_lbl !== `null` ? helpers.pretty_sym_point(end_lbl) : ``
|
|
555
553
|
|
|
556
554
|
// Check if this is a discontinuity (zero-length segment)
|
|
@@ -569,10 +567,7 @@
|
|
|
569
567
|
|
|
570
568
|
// Merge labels at same position with pipe separator
|
|
571
569
|
return Object.fromEntries(
|
|
572
|
-
Array.from(tick_map.entries()).map(([pos, labels]) => [
|
|
573
|
-
pos,
|
|
574
|
-
labels.join(` | `),
|
|
575
|
-
]),
|
|
570
|
+
Array.from(tick_map.entries()).map(([pos, labels]) => [pos, labels.join(` | `)]),
|
|
576
571
|
)
|
|
577
572
|
})
|
|
578
573
|
|
|
@@ -588,16 +583,17 @@
|
|
|
588
583
|
...(bs.spin_down_bands?.flat() ?? []),
|
|
589
584
|
])
|
|
590
585
|
// Keep electronic y-range independent of phonon unit conversion options.
|
|
591
|
-
const display_values =
|
|
592
|
-
? convert_band_values(all_freqs)
|
|
593
|
-
: all_freqs
|
|
586
|
+
const display_values =
|
|
587
|
+
detected_band_type === `phonon` ? convert_band_values(all_freqs) : all_freqs
|
|
594
588
|
if (display_values.length === 0) return undefined
|
|
595
589
|
const finite = display_values.filter(Number.isFinite)
|
|
596
590
|
if (finite.length === 0) return undefined
|
|
597
|
-
let min_val = Math.min(...finite),
|
|
591
|
+
let min_val = Math.min(...finite),
|
|
592
|
+
max_val = Math.max(...finite)
|
|
598
593
|
if (
|
|
599
594
|
// clamp phonon min to 0 if negatives are noise
|
|
600
|
-
detected_band_type === `phonon` &&
|
|
595
|
+
detected_band_type === `phonon` &&
|
|
596
|
+
min_val < 0 &&
|
|
601
597
|
helpers.negative_fraction(finite) < helpers.IMAGINARY_MODE_NOISE_THRESHOLD
|
|
602
598
|
) {
|
|
603
599
|
min_val = 0
|
|
@@ -631,48 +627,47 @@
|
|
|
631
627
|
!shade_imaginary_modes ||
|
|
632
628
|
!y_range ||
|
|
633
629
|
y_range[0] >= 0
|
|
634
|
-
)
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
630
|
+
)
|
|
631
|
+
return []
|
|
632
|
+
return [
|
|
633
|
+
{
|
|
634
|
+
lower: y_range[0],
|
|
635
|
+
upper: 0,
|
|
636
|
+
fill: `var(--bands-imaginary-region-color, light-dark(#f8d7da, #5a1a1f))`,
|
|
637
|
+
fill_opacity: 0.2,
|
|
638
|
+
label: `Imaginary modes`,
|
|
639
|
+
show_in_legend: false,
|
|
640
|
+
z_index: `below-lines`,
|
|
641
|
+
},
|
|
642
|
+
]
|
|
644
643
|
})
|
|
645
644
|
|
|
646
645
|
let custom_highlight_regions = $derived.by((): FillRegion[] =>
|
|
647
646
|
(highlight_regions ?? [])
|
|
648
|
-
.filter((region) =>
|
|
649
|
-
Number.isFinite(region.y_min) && Number.isFinite(region.y_max)
|
|
650
|
-
)
|
|
647
|
+
.filter((region) => Number.isFinite(region.y_min) && Number.isFinite(region.y_max))
|
|
651
648
|
.map((region) => ({
|
|
652
649
|
lower: Math.min(region.y_min, region.y_max),
|
|
653
650
|
upper: Math.max(region.y_min, region.y_max),
|
|
654
|
-
fill:
|
|
655
|
-
`var(--bands-highlight-region-color, light-dark(#f6e8c3, #4d3f20))`,
|
|
651
|
+
fill:
|
|
652
|
+
region.color ?? `var(--bands-highlight-region-color, light-dark(#f6e8c3, #4d3f20))`,
|
|
656
653
|
fill_opacity: region.opacity ?? 0.2,
|
|
657
654
|
label: region.label,
|
|
658
655
|
show_in_legend: Boolean(region.label),
|
|
659
656
|
z_index: `below-lines` as const,
|
|
660
|
-
}))
|
|
657
|
+
})),
|
|
661
658
|
)
|
|
662
659
|
|
|
663
|
-
let fill_regions = $derived([
|
|
664
|
-
...imaginary_mode_region,
|
|
665
|
-
...custom_highlight_regions,
|
|
666
|
-
])
|
|
660
|
+
let fill_regions = $derived([...imaginary_mode_region, ...custom_highlight_regions])
|
|
667
661
|
|
|
668
662
|
let electronic_gap_annotation = $derived.by(() => {
|
|
669
663
|
if (
|
|
670
664
|
!show_gap_annotation ||
|
|
671
665
|
detected_band_type !== `electronic` ||
|
|
672
666
|
effective_fermi_level === undefined
|
|
673
|
-
)
|
|
667
|
+
)
|
|
668
|
+
return null
|
|
674
669
|
const all_energies = series_data.flatMap((series_item) =>
|
|
675
|
-
series_item.y.filter(Number.isFinite)
|
|
670
|
+
series_item.y.filter(Number.isFinite),
|
|
676
671
|
)
|
|
677
672
|
const occupied = all_energies.filter((energy) => energy <= effective_fermi_level)
|
|
678
673
|
const unoccupied = all_energies.filter((energy) => energy > effective_fermi_level)
|
|
@@ -701,11 +696,14 @@
|
|
|
701
696
|
let highlight_x = $derived.by(() => {
|
|
702
697
|
if (highlighted_qpoint_index == null) return null
|
|
703
698
|
const bs = Object.values(band_structs_dict)[0]
|
|
704
|
-
return bs
|
|
699
|
+
return bs
|
|
700
|
+
? helpers.qpoint_x_position(bs, highlighted_qpoint_index, x_positions ?? {})
|
|
701
|
+
: null
|
|
705
702
|
})
|
|
706
703
|
|
|
707
704
|
let display = $state({ x_grid: false, y_grid: true, y_zero_line: true })
|
|
708
705
|
</script>
|
|
706
|
+
|
|
709
707
|
{#if has_series && !is_strict_path_error}
|
|
710
708
|
<ScatterPlot
|
|
711
709
|
{id}
|
|
@@ -728,32 +726,37 @@
|
|
|
728
726
|
>
|
|
729
727
|
{#snippet tooltip({ x, y, y_formatted, label, metadata })}
|
|
730
728
|
{@const y_label_full = internal_y_axis.label ?? ``}
|
|
731
|
-
{@const [, y_label, y_unit] = y_label_full.match(/^(.+?)\s*\(([^)]+)\)$/) ??
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
{@const
|
|
737
|
-
|
|
738
|
-
|
|
729
|
+
{@const [, y_label, y_unit] = y_label_full.match(/^(.+?)\s*\(([^)]+)\)$/) ?? [
|
|
730
|
+
,
|
|
731
|
+
y_label_full,
|
|
732
|
+
``,
|
|
733
|
+
]}
|
|
734
|
+
{@const segment = Object.entries(x_positions ?? {}).find(
|
|
735
|
+
([, [start, end]]) => x >= start && x <= end,
|
|
736
|
+
)}
|
|
737
|
+
{@const path =
|
|
738
|
+
segment?.[0]
|
|
739
|
+
.split(`_`)
|
|
740
|
+
.map((lbl) => (lbl !== `null` ? helpers.pretty_sym_point(lbl) : ``))
|
|
741
|
+
.filter(Boolean)
|
|
742
|
+
.join(` → `) || null}
|
|
739
743
|
{@const {
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
744
|
+
band_idx,
|
|
745
|
+
spin,
|
|
746
|
+
is_acoustic,
|
|
747
|
+
nb_bands,
|
|
748
|
+
frac_coords,
|
|
749
|
+
qpoint_label,
|
|
750
|
+
band_width,
|
|
751
|
+
slope,
|
|
752
|
+
} = (metadata ?? {}) as Partial<helpers.BandPointMeta>}
|
|
749
753
|
{@const num_structs = Object.keys(band_structs_dict).length}
|
|
750
754
|
{#if num_structs > 1 && label}<strong>{label}</strong><br />{/if}
|
|
751
|
-
{@html sanitize_html(y_label || `Value`)}: {y_formatted}{y_unit ? ` ${y_unit}` : ``}<br
|
|
755
|
+
{@html sanitize_html(y_label || `Value`)}: {y_formatted}{y_unit ? ` ${y_unit}` : ``}<br
|
|
756
|
+
/>
|
|
752
757
|
{#if path}Path: {path}<br />{/if}
|
|
753
758
|
{#if typeof band_idx === `number`}
|
|
754
|
-
Band: {band_idx + 1}{#if typeof nb_bands === `number`} / {
|
|
755
|
-
nb_bands
|
|
756
|
-
}{/if}
|
|
759
|
+
Band: {band_idx + 1}{#if typeof nb_bands === `number`} / {nb_bands}{/if}
|
|
757
760
|
{#if typeof is_acoustic === `boolean`}
|
|
758
761
|
({is_acoustic ? `acoustic` : `optical`})
|
|
759
762
|
{:else if detected_band_type === `electronic` && effective_fermi_level !== undefined}
|
|
@@ -767,9 +770,9 @@
|
|
|
767
770
|
<br />At: {helpers.pretty_sym_point(qpoint_label)}
|
|
768
771
|
{/if}
|
|
769
772
|
{#if Array.isArray(frac_coords)}
|
|
770
|
-
<br />{detected_band_type === `electronic` ? `k` : `q`}: [{
|
|
771
|
-
|
|
772
|
-
|
|
773
|
+
<br />{detected_band_type === `electronic` ? `k` : `q`}: [{frac_coords
|
|
774
|
+
.map((coord: number) => format_num(coord, `.3f`))
|
|
775
|
+
.join(`, `)}]
|
|
773
776
|
{/if}
|
|
774
777
|
{#if typeof band_width === `number` && band_width > 0}
|
|
775
778
|
<br />Projection: {format_num(band_width, `.3~g`)}
|
|
@@ -854,19 +857,16 @@
|
|
|
854
857
|
|
|
855
858
|
{#snippet user_content({ height, x_scale_fn, y_scale_fn, pad })}
|
|
856
859
|
<!-- Fat band ribbons (rendered behind band lines) -->
|
|
857
|
-
{#each ribbon_data as
|
|
858
|
-
ribbon
|
|
859
|
-
(`${ribbon.structure_label}-${ribbon.segment_key}-${ribbon.band_idx}`)
|
|
860
|
-
}
|
|
860
|
+
{#each ribbon_data as ribbon (`${ribbon.structure_label}-${ribbon.segment_key}-${ribbon.band_idx}`)}
|
|
861
861
|
{@const path_d = helpers.generate_ribbon_path(
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
862
|
+
ribbon.x_values,
|
|
863
|
+
ribbon.y_values,
|
|
864
|
+
ribbon.width_values,
|
|
865
|
+
x_scale_fn,
|
|
866
|
+
y_scale_fn,
|
|
867
|
+
ribbon.max_width,
|
|
868
|
+
ribbon.scale,
|
|
869
|
+
)}
|
|
870
870
|
{#if path_d}
|
|
871
871
|
<path
|
|
872
872
|
d={path_d}
|
|
@@ -879,12 +879,10 @@
|
|
|
879
879
|
{/each}
|
|
880
880
|
|
|
881
881
|
<!-- Symmetry point vertical lines (filter NaN from scale) -->
|
|
882
|
-
{#each Object.keys(x_axis_ticks)
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
scaled_x
|
|
886
|
-
(scaled_x)
|
|
887
|
-
}
|
|
882
|
+
{#each Object.keys(x_axis_ticks)
|
|
883
|
+
.map(Number)
|
|
884
|
+
.map((tick) => x_scale_fn(tick))
|
|
885
|
+
.filter(Number.isFinite) as scaled_x (scaled_x)}
|
|
888
886
|
<line
|
|
889
887
|
x1={scaled_x}
|
|
890
888
|
x2={scaled_x}
|
|
@@ -914,19 +912,22 @@
|
|
|
914
912
|
{/if}
|
|
915
913
|
|
|
916
914
|
<!-- Shared geometry for Fermi level and gap annotations -->
|
|
917
|
-
{@const fermi_y =
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
915
|
+
{@const fermi_y =
|
|
916
|
+
effective_fermi_level !== undefined ? y_scale_fn(effective_fermi_level) : NaN}
|
|
917
|
+
{@const bands_x_end = x_scale_fn(
|
|
918
|
+
Object.values(x_positions ?? {})
|
|
919
|
+
.flat()
|
|
920
|
+
.at(-1) ?? 1,
|
|
921
|
+
)}
|
|
921
922
|
{@const gap_data = electronic_gap_annotation}
|
|
922
923
|
{@const vbm_y = gap_data ? y_scale_fn(gap_data.vbm) : NaN}
|
|
923
924
|
{@const cbm_y = gap_data ? y_scale_fn(gap_data.cbm) : NaN}
|
|
924
925
|
{@const gap_mid_y = (vbm_y + cbm_y) / 2}
|
|
925
|
-
{@const ef_needs_offset =
|
|
926
|
-
|
|
926
|
+
{@const ef_needs_offset =
|
|
927
|
+
Number.isFinite(gap_mid_y) && Math.abs(fermi_y - gap_mid_y) < 16}
|
|
927
928
|
{@const ef_label_y = ef_needs_offset
|
|
928
|
-
|
|
929
|
-
|
|
929
|
+
? gap_mid_y + (fermi_y >= gap_mid_y ? 16 : -16)
|
|
930
|
+
: fermi_y}
|
|
930
931
|
|
|
931
932
|
<!-- Fermi level line for electronic bands -->
|
|
932
933
|
{#if Number.isFinite(fermi_y) && Number.isFinite(bands_x_end)}
|
|
@@ -966,9 +967,8 @@
|
|
|
966
967
|
{/if}
|
|
967
968
|
|
|
968
969
|
<!-- Reference frequency horizontal line -->
|
|
969
|
-
{@const ref_freq =
|
|
970
|
-
|
|
971
|
-
: NaN}
|
|
970
|
+
{@const ref_freq =
|
|
971
|
+
reference_frequency != null ? convert_band_values([reference_frequency])[0] : NaN}
|
|
972
972
|
{@const ref_y = Number.isFinite(ref_freq) ? y_scale_fn(ref_freq) : NaN}
|
|
973
973
|
{#if Number.isFinite(ref_y) && Number.isFinite(bands_x_end)}
|
|
974
974
|
<line
|
|
@@ -984,15 +984,8 @@
|
|
|
984
984
|
{/if}
|
|
985
985
|
|
|
986
986
|
<!-- Electronic band edge and gap annotation -->
|
|
987
|
-
{#if gap_data && Number.isFinite(vbm_y) && Number.isFinite(cbm_y) &&
|
|
988
|
-
|
|
989
|
-
{#each [
|
|
990
|
-
[vbm_y, `var(--bands-gap-vbm-color, light-dark(#1f77b4, #7db7ff))`],
|
|
991
|
-
[cbm_y, `var(--bands-gap-cbm-color, light-dark(#2ca02c, #7ddc7d))`],
|
|
992
|
-
] as [number, string][] as
|
|
993
|
-
[edge_y, color]
|
|
994
|
-
(edge_y)
|
|
995
|
-
}
|
|
987
|
+
{#if gap_data && Number.isFinite(vbm_y) && Number.isFinite(cbm_y) && Number.isFinite(bands_x_end)}
|
|
988
|
+
{#each [[vbm_y, `var(--bands-gap-vbm-color, light-dark(#1f77b4, #7db7ff))`], [cbm_y, `var(--bands-gap-cbm-color, light-dark(#2ca02c, #7ddc7d))`]] as [number, string][] as [edge_y, color] (edge_y)}
|
|
996
989
|
<line
|
|
997
990
|
x1={pad.l}
|
|
998
991
|
x2={bands_x_end + 3}
|