Density of States (DOS)

Interactive phonon and electronic density of states visualization.

Basic DOS with Normalization and Smearing

A phonon DOS plot with normalization and Gaussian smearing:

  <script>
  import { Dos } from 'matterviz'
  import { phonon_dos } from '$site/phonons'
</script>

<Dos doses={[phonon_dos['mp-2758-Sr4Se4-pbe']]} normalize="max" sigma={0.15} />

Multiple DOS with Unit Conversion

Compare multiple DOS curves with interactive unit conversion, normalization, and smearing:

  <script>
  import { Dos } from 'matterviz'
  import { phonon_dos } from '$site/phonons'

  const dos = phonon_dos['mp-2758-Sr4Se4-pbe']
  const doses = {
    'Total': dos,
    'Partial A': { ...dos, densities: dos.densities.map((dens) => dens * 0.6) },
    'Partial B': { ...dos, densities: dos.densities.map((dens) => dens * 0.4) },
  }

  let selected_unit = $state('THz')
  const units = ['THz', 'meV']

  let normalize = $state('none')
  const normalize_options = ['none', 'max', 'sum', 'integral']
  let sigma = $state(0.15)
</script>

<div style="display: flex; gap: 1em; margin-block: 1em">
  <label>
    Unit:
    <select bind:value={selected_unit}>
      {#each units as unit (unit)}
        <option value={unit}>{unit}</option>
      {/each}
    </select>
  </label>

  <label>
    Normalize:
    <select bind:value={normalize}>
      {#each normalize_options as value (value)}
        <option {value}>{value}</option>
      {/each}
    </select>
  </label>

  <label>
    Smearing (σ):
    <input type="number" bind:value={sigma} min={0} max={1} step={0.05} />
  </label>
</div>

<Dos {doses} units={selected_unit} {normalize} {sigma} />

Horizontal Orientation

For side-by-side layout with band structures:

  <script>
  import { Dos } from 'matterviz'
  import { phonon_dos } from '$site/phonons'
</script>

<Dos doses={[phonon_dos['mp-2758-Sr4Se4-pbe']]} orientation="horizontal" sigma={0.15} />

Features