matterviz 0.3.2 → 0.3.4
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 -2
- package/dist/FilePicker.svelte +123 -82
- package/dist/Icon.svelte +18 -12
- package/dist/MillerIndexInput.svelte +27 -21
- package/dist/api/optimade.js +6 -6
- package/dist/app.css +216 -207
- package/dist/brillouin/BrillouinZone.svelte +292 -149
- package/dist/brillouin/BrillouinZone.svelte.d.ts +1 -1
- package/dist/brillouin/BrillouinZoneControls.svelte +32 -5
- package/dist/brillouin/BrillouinZoneExportPane.svelte +69 -42
- package/dist/brillouin/BrillouinZoneExportPane.svelte.d.ts +1 -1
- package/dist/brillouin/BrillouinZoneInfoPane.svelte +99 -68
- package/dist/brillouin/BrillouinZoneScene.svelte +275 -163
- package/dist/brillouin/BrillouinZoneScene.svelte.d.ts +1 -1
- package/dist/brillouin/BrillouinZoneTooltip.svelte +17 -7
- package/dist/brillouin/compute.js +11 -6
- package/dist/chempot-diagram/ChemPotDiagram.svelte +162 -27
- package/dist/chempot-diagram/ChemPotDiagram2D.svelte +451 -281
- package/dist/chempot-diagram/ChemPotDiagram3D.svelte +2148 -1642
- package/dist/chempot-diagram/ChemPotScene3D.svelte +8 -5
- package/dist/chempot-diagram/async-compute.svelte.d.ts +3 -0
- package/dist/chempot-diagram/async-compute.svelte.js +77 -0
- package/dist/chempot-diagram/chempot-worker.d.ts +1 -0
- package/dist/chempot-diagram/chempot-worker.js +11 -0
- package/dist/chempot-diagram/color.js +1 -2
- package/dist/chempot-diagram/compute.d.ts +10 -0
- package/dist/chempot-diagram/compute.js +250 -88
- package/dist/chempot-diagram/index.d.ts +2 -1
- package/dist/chempot-diagram/index.js +2 -1
- package/dist/chempot-diagram/temperature.js +8 -9
- package/dist/chempot-diagram/types.d.ts +3 -0
- package/dist/chempot-diagram/types.js +1 -0
- package/dist/colors/index.d.ts +1 -1
- package/dist/colors/index.js +5 -3
- package/dist/composition/BarChart.svelte +128 -55
- package/dist/composition/BubbleChart.svelte +102 -49
- package/dist/composition/Composition.svelte +100 -79
- package/dist/composition/Formula.svelte +108 -62
- package/dist/composition/FormulaFilter.svelte +665 -537
- package/dist/composition/PieChart.svelte +183 -108
- package/dist/composition/format.d.ts +5 -0
- package/dist/composition/format.js +20 -3
- package/dist/composition/parse.js +14 -9
- package/dist/convex-hull/ConvexHull.svelte +93 -40
- package/dist/convex-hull/ConvexHull.svelte.d.ts +1 -1
- package/dist/convex-hull/ConvexHull2D.svelte +549 -360
- package/dist/convex-hull/ConvexHull2D.svelte.d.ts +1 -1
- package/dist/convex-hull/ConvexHull3D.svelte +1296 -827
- package/dist/convex-hull/ConvexHull3D.svelte.d.ts +1 -1
- package/dist/convex-hull/ConvexHull4D.svelte +1004 -688
- package/dist/convex-hull/ConvexHull4D.svelte.d.ts +1 -1
- package/dist/convex-hull/ConvexHullControls.svelte +115 -28
- package/dist/convex-hull/ConvexHullControls.svelte.d.ts +1 -1
- package/dist/convex-hull/ConvexHullInfoPane.svelte +29 -3
- package/dist/convex-hull/ConvexHullStats.svelte +425 -328
- package/dist/convex-hull/ConvexHullTooltip.svelte +40 -16
- package/dist/convex-hull/GasPressureControls.svelte +104 -61
- package/dist/convex-hull/StructurePopup.svelte +25 -4
- package/dist/convex-hull/TemperatureSlider.svelte +45 -25
- package/dist/convex-hull/barycentric-coords.js +13 -7
- package/dist/convex-hull/demo-temperature.js +8 -4
- package/dist/convex-hull/gas-thermodynamics.js +17 -12
- package/dist/convex-hull/helpers.d.ts +9 -0
- package/dist/convex-hull/helpers.js +77 -34
- package/dist/convex-hull/thermodynamics.js +61 -56
- package/dist/convex-hull/types.d.ts +9 -14
- package/dist/convex-hull/types.js +0 -17
- package/dist/coordination/CoordinationBarPlot.svelte +227 -154
- package/dist/element/BohrAtom.svelte +55 -12
- package/dist/element/ElementHeading.svelte +7 -2
- package/dist/element/ElementPhoto.svelte +15 -9
- package/dist/element/ElementStats.svelte +10 -4
- package/dist/element/ElementTile.svelte +137 -73
- package/dist/element/Nucleus.svelte +39 -11
- package/dist/element/data.js +1 -1
- package/dist/feedback/ClickFeedback.svelte +16 -5
- package/dist/feedback/DragOverlay.svelte +10 -2
- package/dist/feedback/Spinner.svelte +4 -2
- package/dist/feedback/StatusMessage.svelte +8 -2
- package/dist/fermi-surface/FermiSlice.svelte +118 -88
- package/dist/fermi-surface/FermiSurface.svelte +328 -187
- package/dist/fermi-surface/FermiSurface.svelte.d.ts +1 -1
- package/dist/fermi-surface/FermiSurfaceControls.svelte +113 -46
- package/dist/fermi-surface/FermiSurfaceControls.svelte.d.ts +1 -1
- package/dist/fermi-surface/FermiSurfaceScene.svelte +535 -342
- package/dist/fermi-surface/FermiSurfaceScene.svelte.d.ts +1 -1
- package/dist/fermi-surface/FermiSurfaceTooltip.svelte +14 -5
- package/dist/fermi-surface/compute.js +16 -20
- package/dist/fermi-surface/parse.js +24 -14
- package/dist/fermi-surface/symmetry.js +2 -7
- package/dist/fermi-surface/types.d.ts +3 -5
- package/dist/heatmap-matrix/HeatmapMatrix.svelte +1019 -765
- package/dist/heatmap-matrix/HeatmapMatrix.svelte.d.ts +1 -1
- package/dist/heatmap-matrix/HeatmapMatrixControls.svelte +76 -22
- package/dist/heatmap-matrix/HeatmapMatrixControls.svelte.d.ts +2 -3
- package/dist/icons.js +47 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.js +2 -1
- package/dist/io/decompress.js +1 -1
- package/dist/io/export.d.ts +3 -0
- package/dist/io/export.js +129 -143
- package/dist/io/is-binary.js +2 -3
- package/dist/io/url-drop.js +1 -2
- package/dist/isosurface/Isosurface.svelte +202 -148
- package/dist/isosurface/IsosurfaceControls.svelte +46 -28
- package/dist/isosurface/parse.js +34 -29
- package/dist/isosurface/slice.js +5 -10
- package/dist/isosurface/types.d.ts +2 -1
- package/dist/isosurface/types.js +61 -12
- package/dist/labels.js +11 -8
- package/dist/layout/FullscreenToggle.svelte +11 -2
- package/dist/layout/InfoCard.svelte +38 -6
- package/dist/layout/InfoTag.svelte +63 -32
- package/dist/layout/PropertyFilter.svelte +82 -37
- package/dist/layout/SettingsSection.svelte +85 -55
- package/dist/layout/SubpageGrid.svelte +10 -2
- package/dist/layout/json-tree/JsonNode.svelte +183 -138
- package/dist/layout/json-tree/JsonTree.svelte +499 -413
- package/dist/layout/json-tree/JsonValue.svelte +127 -99
- package/dist/layout/json-tree/utils.js +4 -2
- package/dist/marching-cubes.js +25 -2
- package/dist/math.d.ts +13 -17
- package/dist/math.js +133 -67
- package/dist/overlays/ContextMenu.svelte +65 -40
- package/dist/overlays/DraggablePane.svelte +211 -139
- package/dist/periodic-table/PeriodicTable.svelte +278 -145
- package/dist/periodic-table/PeriodicTableControls.svelte +178 -128
- package/dist/periodic-table/PropertySelect.svelte +25 -7
- package/dist/periodic-table/TableInset.svelte +8 -3
- package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte +446 -309
- package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte.d.ts +1 -1
- package/dist/phase-diagram/PhaseDiagramControls.svelte +102 -43
- package/dist/phase-diagram/PhaseDiagramControls.svelte.d.ts +1 -1
- package/dist/phase-diagram/PhaseDiagramEditorPane.svelte +63 -40
- package/dist/phase-diagram/PhaseDiagramExportPane.svelte +71 -28
- package/dist/phase-diagram/PhaseDiagramExportPane.svelte.d.ts +1 -1
- package/dist/phase-diagram/PhaseDiagramTooltip.svelte +158 -101
- package/dist/phase-diagram/TdbInfoPanel.svelte +28 -4
- package/dist/phase-diagram/build-diagram.js +9 -9
- package/dist/phase-diagram/colors.js +1 -3
- package/dist/phase-diagram/parse.js +10 -9
- package/dist/phase-diagram/svg-to-diagram.js +53 -49
- package/dist/phase-diagram/utils.d.ts +1 -0
- package/dist/phase-diagram/utils.js +80 -25
- package/dist/plot/AxisLabel.svelte +28 -3
- package/dist/plot/BarPlot.svelte +1182 -734
- package/dist/plot/BarPlot.svelte.d.ts +2 -2
- package/dist/plot/BarPlotControls.svelte +31 -5
- package/dist/plot/BarPlotControls.svelte.d.ts +1 -1
- package/dist/plot/ColorBar.svelte +479 -329
- package/dist/plot/ColorScaleSelect.svelte +27 -6
- package/dist/plot/ElementScatter.svelte +36 -15
- package/dist/plot/FillArea.svelte +152 -95
- package/dist/plot/Histogram.svelte +934 -571
- package/dist/plot/Histogram.svelte.d.ts +1 -1
- package/dist/plot/HistogramControls.svelte +53 -9
- package/dist/plot/HistogramControls.svelte.d.ts +1 -1
- package/dist/plot/InteractiveAxisLabel.svelte +34 -11
- package/dist/plot/InteractiveAxisLabel.svelte.d.ts +1 -1
- package/dist/plot/Line.svelte +63 -28
- package/dist/plot/PlotControls.svelte +157 -114
- package/dist/plot/PlotControls.svelte.d.ts +1 -1
- package/dist/plot/PlotLegend.svelte +174 -91
- package/dist/plot/PlotTooltip.svelte +45 -6
- package/dist/plot/PortalSelect.svelte +175 -147
- package/dist/plot/ReferenceLine.svelte +76 -22
- package/dist/plot/ReferenceLine3D.svelte +132 -107
- package/dist/plot/ReferencePlane.svelte +146 -121
- package/dist/plot/ScatterPlot.svelte +1681 -1091
- package/dist/plot/ScatterPlot.svelte.d.ts +2 -2
- package/dist/plot/ScatterPlot3D.svelte +256 -131
- package/dist/plot/ScatterPlot3D.svelte.d.ts +2 -2
- package/dist/plot/ScatterPlot3DControls.svelte +113 -63
- package/dist/plot/ScatterPlot3DControls.svelte.d.ts +2 -1
- package/dist/plot/ScatterPlot3DScene.svelte +608 -403
- package/dist/plot/ScatterPlot3DScene.svelte.d.ts +2 -2
- package/dist/plot/ScatterPlotControls.svelte +65 -25
- package/dist/plot/ScatterPlotControls.svelte.d.ts +1 -1
- package/dist/plot/ScatterPoint.svelte +98 -26
- package/dist/plot/ScatterPoint.svelte.d.ts +1 -0
- package/dist/plot/SpacegroupBarPlot.svelte +142 -85
- package/dist/plot/Surface3D.svelte +159 -108
- package/dist/plot/ZeroLines.svelte +55 -3
- package/dist/plot/ZoomRect.svelte +4 -2
- package/dist/plot/axis-utils.js +1 -3
- package/dist/plot/data-cleaning.js +12 -28
- package/dist/plot/data-transform.js +2 -1
- package/dist/plot/fill-utils.js +2 -0
- package/dist/plot/layout.d.ts +4 -1
- package/dist/plot/layout.js +33 -14
- package/dist/plot/reference-line.d.ts +2 -2
- package/dist/plot/reference-line.js +7 -5
- package/dist/plot/scales.js +24 -36
- package/dist/plot/types.d.ts +11 -23
- package/dist/plot/types.js +6 -11
- package/dist/plot/utils/label-placement.d.ts +32 -15
- package/dist/plot/utils/label-placement.js +227 -66
- package/dist/plot/utils/series-visibility.js +2 -3
- package/dist/rdf/RdfPlot.svelte +143 -91
- package/dist/rdf/calc-rdf.js +4 -5
- package/dist/sanitize.d.ts +4 -0
- package/dist/sanitize.js +107 -0
- package/dist/settings.d.ts +18 -6
- package/dist/settings.js +46 -16
- package/dist/spectral/Bands.svelte +632 -453
- package/dist/spectral/BandsAndDos.svelte +90 -49
- package/dist/spectral/BrillouinBandsDos.svelte +151 -93
- package/dist/spectral/Dos.svelte +389 -258
- package/dist/spectral/helpers.js +55 -43
- package/dist/state.svelte.d.ts +1 -1
- package/dist/state.svelte.js +3 -2
- package/dist/structure/Arrow.svelte +59 -20
- package/dist/structure/AtomLegend.svelte +215 -134
- package/dist/structure/Bond.svelte +73 -47
- package/dist/structure/CanvasTooltip.svelte +10 -2
- package/dist/structure/CellSelect.svelte +72 -45
- package/dist/structure/Cylinder.svelte +33 -17
- package/dist/structure/Lattice.svelte +88 -33
- package/dist/structure/Structure.svelte +1063 -797
- package/dist/structure/Structure.svelte.d.ts +1 -1
- package/dist/structure/StructureControls.svelte +349 -118
- package/dist/structure/StructureExportPane.svelte +124 -89
- package/dist/structure/StructureExportPane.svelte.d.ts +1 -1
- package/dist/structure/StructureInfoPane.svelte +304 -237
- package/dist/structure/StructureScene.svelte +879 -443
- package/dist/structure/StructureScene.svelte.d.ts +15 -7
- package/dist/structure/atom-properties.js +8 -8
- package/dist/structure/bonding.js +6 -7
- package/dist/structure/export.js +14 -29
- package/dist/structure/ferrox-wasm.js +1 -1
- package/dist/structure/index.d.ts +13 -3
- package/dist/structure/index.js +83 -23
- package/dist/structure/measure.d.ts +2 -2
- package/dist/structure/measure.js +4 -44
- package/dist/structure/parse.js +113 -141
- package/dist/structure/partial-occupancy.js +7 -10
- package/dist/structure/pbc.d.ts +1 -0
- package/dist/structure/pbc.js +16 -6
- package/dist/structure/supercell.d.ts +2 -2
- package/dist/structure/supercell.js +12 -22
- package/dist/structure/validation.js +1 -2
- package/dist/symmetry/SymmetryStats.svelte +84 -41
- package/dist/symmetry/WyckoffTable.svelte +26 -6
- package/dist/symmetry/cell-transform.js +5 -3
- package/dist/symmetry/index.js +8 -7
- package/dist/symmetry/spacegroups.js +148 -148
- package/dist/table/HeatmapTable.svelte +790 -554
- package/dist/table/HeatmapTable.svelte.d.ts +1 -1
- package/dist/table/ToggleMenu.svelte +125 -92
- package/dist/table/index.js +2 -4
- package/dist/theme/ThemeControl.svelte +21 -12
- package/dist/time.js +4 -1
- package/dist/tooltip/TooltipContent.svelte +33 -8
- package/dist/trajectory/Trajectory.svelte +758 -558
- package/dist/trajectory/TrajectoryError.svelte +14 -3
- package/dist/trajectory/TrajectoryExportPane.svelte +137 -83
- package/dist/trajectory/TrajectoryInfoPane.svelte +272 -143
- package/dist/trajectory/extract.js +10 -26
- package/dist/trajectory/format-detect.js +5 -5
- package/dist/trajectory/frame-reader.d.ts +1 -1
- package/dist/trajectory/frame-reader.js +5 -12
- package/dist/trajectory/helpers.d.ts +0 -1
- package/dist/trajectory/helpers.js +2 -17
- package/dist/trajectory/index.js +14 -12
- package/dist/trajectory/parse/ase.js +5 -4
- package/dist/trajectory/parse/hdf5.js +26 -18
- package/dist/trajectory/parse/index.js +13 -18
- package/dist/trajectory/parse/lammps.js +17 -7
- package/dist/trajectory/parse/vasp.js +5 -2
- package/dist/trajectory/parse/xyz.js +8 -7
- package/dist/trajectory/plotting.js +13 -8
- package/dist/utils.d.ts +1 -0
- package/dist/utils.js +13 -0
- package/dist/xrd/XrdPlot.svelte +337 -247
- package/dist/xrd/broadening.js +14 -9
- package/dist/xrd/calc-xrd.js +12 -18
- package/dist/xrd/parse.d.ts +1 -1
- package/dist/xrd/parse.js +17 -17
- package/package.json +99 -103
- package/readme.md +1 -1
- /package/dist/theme/{themes.js → themes.mjs} +0 -0
|
@@ -45,6 +45,6 @@ type $$ComponentProps = {
|
|
|
45
45
|
camera?: Camera;
|
|
46
46
|
hover_data?: FermiHoverData | null;
|
|
47
47
|
};
|
|
48
|
-
declare const FermiSurfaceScene: import("svelte").Component<$$ComponentProps, {}, "camera_position" | "camera_projection" | "
|
|
48
|
+
declare const FermiSurfaceScene: import("svelte").Component<$$ComponentProps, {}, "camera_position" | "camera_projection" | "camera" | "scene" | "camera_is_moving" | "surface_opacity" | "bz_data" | "hover_data" | "fermi_data">;
|
|
49
49
|
type FermiSurfaceScene = ReturnType<typeof FermiSurfaceScene>;
|
|
50
50
|
export default FermiSurfaceScene;
|
|
@@ -1,8 +1,17 @@
|
|
|
1
|
-
<script lang="ts"
|
|
2
|
-
//
|
|
3
|
-
|
|
4
|
-
import {
|
|
5
|
-
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
// Tooltip component for Fermi surface hover information
|
|
3
|
+
// Displays band index, spin, k-coordinates, and optional property values
|
|
4
|
+
import { format_num, format_vec3 } from '../labels'
|
|
5
|
+
import { TooltipContent } from '../tooltip'
|
|
6
|
+
import type { FermiHoverData, FermiTooltipProp } from './types'
|
|
7
|
+
|
|
8
|
+
let {
|
|
9
|
+
hover_data,
|
|
10
|
+
tooltip,
|
|
11
|
+
}: {
|
|
12
|
+
hover_data: FermiHoverData
|
|
13
|
+
tooltip?: FermiTooltipProp
|
|
14
|
+
} = $props()
|
|
6
15
|
</script>
|
|
7
16
|
|
|
8
17
|
<TooltipContent data={hover_data} snippet_arg={{ hover_data }} {tooltip}>
|
|
@@ -42,8 +42,9 @@ function tricubic_interpolate(grid, fx, fy, fz, nx, ny, nz) {
|
|
|
42
42
|
for (let yi = 0; yi < 4; yi++) {
|
|
43
43
|
const col = row[wy[yi]];
|
|
44
44
|
// Inline z interpolation
|
|
45
|
-
y_sum +=
|
|
46
|
-
|
|
45
|
+
y_sum +=
|
|
46
|
+
cy[yi] *
|
|
47
|
+
(cz[0] * col[wz[0]] + cz[1] * col[wz[1]] + cz[2] * col[wz[2]] + cz[3] * col[wz[3]]);
|
|
47
48
|
}
|
|
48
49
|
result += cx[xi] * y_sum;
|
|
49
50
|
}
|
|
@@ -95,9 +96,7 @@ export function extract_fermi_surface(band_data, options = {}) {
|
|
|
95
96
|
let total_area = 0;
|
|
96
97
|
// Process each spin channel and band
|
|
97
98
|
for (let spin_idx = 0; spin_idx < band_data.n_spins; spin_idx++) {
|
|
98
|
-
const spin = band_data.n_spins === 2
|
|
99
|
-
? (spin_idx === 0 ? `up` : `down`)
|
|
100
|
-
: null;
|
|
99
|
+
const spin = band_data.n_spins === 2 ? (spin_idx === 0 ? `up` : `down`) : null;
|
|
101
100
|
// Skip if spin not selected
|
|
102
101
|
if (selected_spins && !selected_spins.includes(spin))
|
|
103
102
|
continue;
|
|
@@ -138,8 +137,8 @@ export function extract_fermi_surface(band_data, options = {}) {
|
|
|
138
137
|
// Compute Fermi velocities if requested
|
|
139
138
|
if (compute_velocities && band_data.velocities) {
|
|
140
139
|
isosurface.properties = compute_fermi_velocities(isosurface, band_data.velocities[spin_idx][band_idx], band_data.k_lattice, band_data.k_grid);
|
|
141
|
-
isosurface.avg_velocity =
|
|
142
|
-
isosurface.properties.length;
|
|
140
|
+
isosurface.avg_velocity =
|
|
141
|
+
isosurface.properties.reduce((s, v) => s + v, 0) / isosurface.properties.length;
|
|
143
142
|
}
|
|
144
143
|
// Compute dimensionality if requested
|
|
145
144
|
if (compute_dimensionality) {
|
|
@@ -309,7 +308,7 @@ function analyze_surface_topology(surface, bz_data) {
|
|
|
309
308
|
}
|
|
310
309
|
// Compute 2D Fermi slice along a specified plane
|
|
311
310
|
export function compute_fermi_slice(fermi_data, options = {}) {
|
|
312
|
-
const { miller_indices = [0, 0, 1], distance = 0
|
|
311
|
+
const { miller_indices = [0, 0, 1], distance = 0 } = options;
|
|
313
312
|
// Validate miller indices are not all zero
|
|
314
313
|
if (miller_indices[0] === 0 && miller_indices[1] === 0 && miller_indices[2] === 0) {
|
|
315
314
|
throw new Error(`Invalid miller indices [0, 0, 0]: at least one index must be non-zero to define a plane`);
|
|
@@ -336,7 +335,7 @@ export function compute_fermi_slice(fermi_data, options = {}) {
|
|
|
336
335
|
k_lattice_2d: [in_plane_u, in_plane_v],
|
|
337
336
|
metadata: {
|
|
338
337
|
n_lines: isolines.length,
|
|
339
|
-
has_properties: isolines.some((
|
|
338
|
+
has_properties: isolines.some((line) => line.properties !== undefined),
|
|
340
339
|
},
|
|
341
340
|
};
|
|
342
341
|
}
|
|
@@ -359,8 +358,9 @@ function compute_edge_intersection(surface, vertex_distances, v0_idx, v1_idx) {
|
|
|
359
358
|
];
|
|
360
359
|
let property;
|
|
361
360
|
if (surface.properties) {
|
|
362
|
-
property =
|
|
363
|
-
|
|
361
|
+
property =
|
|
362
|
+
surface.properties[v0_idx] +
|
|
363
|
+
t * (surface.properties[v1_idx] - surface.properties[v0_idx]);
|
|
364
364
|
}
|
|
365
365
|
return { point, property };
|
|
366
366
|
}
|
|
@@ -397,10 +397,7 @@ function slice_surface_with_plane(surface, plane_normal, plane_distance, in_plan
|
|
|
397
397
|
face_segments.push({
|
|
398
398
|
face_idx,
|
|
399
399
|
edge_keys: [crossing_edges[0].edge_key, crossing_edges[1].edge_key],
|
|
400
|
-
points: [
|
|
401
|
-
crossing_edges[0].intersection.point,
|
|
402
|
-
crossing_edges[1].intersection.point,
|
|
403
|
-
],
|
|
400
|
+
points: [crossing_edges[0].intersection.point, crossing_edges[1].intersection.point],
|
|
404
401
|
properties: surface.properties
|
|
405
402
|
? [
|
|
406
403
|
crossing_edges[0].intersection.property ?? 0,
|
|
@@ -487,8 +484,7 @@ function slice_surface_with_plane(surface, plane_normal, plane_distance, in_plan
|
|
|
487
484
|
start_segment.points[0],
|
|
488
485
|
...forward_points,
|
|
489
486
|
];
|
|
490
|
-
const contour_props = backward_props && forward_props &&
|
|
491
|
-
start_segment.properties
|
|
487
|
+
const contour_props = backward_props && forward_props && start_segment.properties
|
|
492
488
|
? [...backward_props, start_segment.properties[0], ...forward_props]
|
|
493
489
|
: undefined;
|
|
494
490
|
// Check if contour is closed
|
|
@@ -498,10 +494,10 @@ function slice_surface_with_plane(surface, plane_normal, plane_distance, in_plan
|
|
|
498
494
|
// Project to 2D (inlined dot product for speed)
|
|
499
495
|
const points_2d = new Array(contour_points.length);
|
|
500
496
|
for (let idx = 0; idx < contour_points.length; idx++) {
|
|
501
|
-
const
|
|
497
|
+
const point = contour_points[idx];
|
|
502
498
|
points_2d[idx] = [
|
|
503
|
-
|
|
504
|
-
|
|
499
|
+
point[0] * ux + point[1] * uy + point[2] * uz,
|
|
500
|
+
point[0] * vx + point[1] * vy + point[2] * vz,
|
|
505
501
|
];
|
|
506
502
|
}
|
|
507
503
|
isolines.push({
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import * as constants from './constants';
|
|
2
2
|
import { compute_vertex_normals } from './marching-cubes';
|
|
3
|
-
|
|
4
|
-
return line.split(/\s+/).filter(Boolean);
|
|
5
|
-
}
|
|
3
|
+
const parse_number_tokens = (line) => line.split(/\s+/).filter(Boolean);
|
|
6
4
|
// Parse whitespace-separated floats from a line (optimized with unary +)
|
|
7
5
|
function parse_floats(line) {
|
|
8
6
|
return parse_number_tokens(line).map((part) => +part);
|
|
@@ -118,7 +116,7 @@ function parse_bxsf(content) {
|
|
|
118
116
|
const lower = line.toLowerCase();
|
|
119
117
|
if (lower.includes(`fermi`) && lower.includes(`energy`)) {
|
|
120
118
|
// Match patterns like "Fermi Energy = 5.123" or "fermi_energy: -0.5"
|
|
121
|
-
const match =
|
|
119
|
+
const match = /(?:=|:)\s*([-+]?\d*\.?\d+(?:[eE][-+]?\d+)?)/i.exec(line);
|
|
122
120
|
if (match) {
|
|
123
121
|
fermi_energy = parseFloat(match[1]);
|
|
124
122
|
break;
|
|
@@ -138,7 +136,10 @@ function parse_bxsf(content) {
|
|
|
138
136
|
// Parse FRMSF format used by FermiSurfer
|
|
139
137
|
// Format: https://mitsuaki1987.github.io/fermisurfer/en/_build/html/ops.html
|
|
140
138
|
function parse_frmsf(content) {
|
|
141
|
-
const lines = content
|
|
139
|
+
const lines = content
|
|
140
|
+
.split(/\r?\n/)
|
|
141
|
+
.map((line) => line.trim())
|
|
142
|
+
.filter(Boolean);
|
|
142
143
|
let line_idx = 0;
|
|
143
144
|
// Line 1: grid dimensions (ng[0] ng[1] ng[2])
|
|
144
145
|
const grid_dims = parse_ints(lines[line_idx++]);
|
|
@@ -164,9 +165,15 @@ function parse_frmsf(content) {
|
|
|
164
165
|
// Lines 4-6: reciprocal lattice vectors (in Bohr^-1, convert to Å^-1)
|
|
165
166
|
const inv_bohr = 1 / constants.BOHR_TO_ANGSTROM;
|
|
166
167
|
const k_lattice = [
|
|
167
|
-
parse_floats(lines[line_idx++])
|
|
168
|
-
|
|
169
|
-
|
|
168
|
+
parse_floats(lines[line_idx++])
|
|
169
|
+
.slice(0, 3)
|
|
170
|
+
.map((val) => val * inv_bohr),
|
|
171
|
+
parse_floats(lines[line_idx++])
|
|
172
|
+
.slice(0, 3)
|
|
173
|
+
.map((val) => val * inv_bohr),
|
|
174
|
+
parse_floats(lines[line_idx++])
|
|
175
|
+
.slice(0, 3)
|
|
176
|
+
.map((val) => val * inv_bohr),
|
|
170
177
|
];
|
|
171
178
|
const [nx, ny, nz] = k_grid;
|
|
172
179
|
const total_points = nx * ny * nz;
|
|
@@ -276,7 +283,8 @@ function parse_fermi_json(content) {
|
|
|
276
283
|
throw new Error(`Invalid FermiSurfaceData JSON: isosurfaces array present but missing required fields`);
|
|
277
284
|
}
|
|
278
285
|
// Check if it's IFermi format (isosurfaces is an object keyed by band index)
|
|
279
|
-
if (data[`@class`] === `FermiSurface` &&
|
|
286
|
+
if (data[`@class`] === `FermiSurface` &&
|
|
287
|
+
data.isosurfaces &&
|
|
280
288
|
typeof data.isosurfaces === `object`) {
|
|
281
289
|
return parse_ifermi_surface(data);
|
|
282
290
|
}
|
|
@@ -322,7 +330,11 @@ function parse_ifermi_surface(data) {
|
|
|
322
330
|
// Extract reciprocal lattice
|
|
323
331
|
const k_lattice = reciprocal_space?.reciprocal_lattice
|
|
324
332
|
? reciprocal_space.reciprocal_lattice
|
|
325
|
-
: [
|
|
333
|
+
: [
|
|
334
|
+
[1, 0, 0],
|
|
335
|
+
[0, 1, 0],
|
|
336
|
+
[0, 0, 1],
|
|
337
|
+
];
|
|
326
338
|
// Convert IFermi isosurfaces to our format
|
|
327
339
|
const isosurfaces = [];
|
|
328
340
|
const band_indices = new Set();
|
|
@@ -450,8 +462,7 @@ export function parse_fermi_file(content, filename) {
|
|
|
450
462
|
// Try auto-detection based on content
|
|
451
463
|
const trimmed = content.trim();
|
|
452
464
|
// BXSF format detection
|
|
453
|
-
if (trimmed.includes(`BEGIN_BLOCK_BANDGRID_3D`) ||
|
|
454
|
-
trimmed.includes(`BEGIN_BANDGRID_3D`)) {
|
|
465
|
+
if (trimmed.includes(`BEGIN_BLOCK_BANDGRID_3D`) || trimmed.includes(`BEGIN_BANDGRID_3D`)) {
|
|
455
466
|
try {
|
|
456
467
|
return parse_bxsf(content);
|
|
457
468
|
}
|
|
@@ -471,8 +482,7 @@ export function parse_fermi_file(content, filename) {
|
|
|
471
482
|
// FRMSF format detection (starts with grid dimensions)
|
|
472
483
|
const first_line = trimmed.split(/\r?\n/)[0];
|
|
473
484
|
const first_tokens = first_line.split(/\s+/).filter(Boolean);
|
|
474
|
-
if (first_tokens.length === 3 &&
|
|
475
|
-
first_tokens.every((t) => /^\d+$/.test(t))) {
|
|
485
|
+
if (first_tokens.length === 3 && first_tokens.every((t) => /^\d+$/.test(t))) {
|
|
476
486
|
try {
|
|
477
487
|
return parse_frmsf(content);
|
|
478
488
|
}
|
|
@@ -1,11 +1,6 @@
|
|
|
1
1
|
// Identity 4x4 matrix (column-major for Three.js)
|
|
2
|
-
//
|
|
3
|
-
export const IDENTITY_4x4 = [
|
|
4
|
-
1, 0, 0, 0,
|
|
5
|
-
0, 1, 0, 0,
|
|
6
|
-
0, 0, 1, 0,
|
|
7
|
-
0, 0, 0, 1,
|
|
8
|
-
];
|
|
2
|
+
// oxfmt-ignore
|
|
3
|
+
export const IDENTITY_4x4 = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];
|
|
9
4
|
// All permutations of (0, 1, 2) for axis swaps
|
|
10
5
|
const AXIS_PERMUTATIONS = [
|
|
11
6
|
[0, 1, 2],
|
|
@@ -106,10 +106,8 @@ export interface FermiHoverData {
|
|
|
106
106
|
symmetry_index?: number;
|
|
107
107
|
}
|
|
108
108
|
export type FermiTooltipConfig = TooltipConfig<FermiHoverData>;
|
|
109
|
-
export type FermiTooltipProp = TooltipProp<FermiHoverData, [
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
}
|
|
113
|
-
]>;
|
|
109
|
+
export type FermiTooltipProp = TooltipProp<FermiHoverData, [{
|
|
110
|
+
hover_data: FermiHoverData;
|
|
111
|
+
}]>;
|
|
114
112
|
export declare const is_fermi_surface_data: (data: BandGridData | FermiSurfaceData | null) => data is FermiSurfaceData;
|
|
115
113
|
export declare const is_band_grid_data: (data: BandGridData | FermiSurfaceData | null) => data is BandGridData;
|