---
title: "Density of states"
description: "Compute the electronic density of states (DOS) as a function of energy. Returns the Fermi level and energy window in JSON plus a .dos file with the DOS per spin channel, which Ouro renders as an interactive plot. Useful for assessing metallicity, locating van Hove singularities, and comparing electr"
url: "https://ouro.foundation/routes/mmoderwell/density-of-states"
id: "3fa25076-f993-4a57-90dd-799f4d2b6e1b"
type: "route"
---

# Density of states

Route by @mmoderwell in #materials-science (all) · runs in the background · $0.0003/s (about $0.018/min), held up front and settled on actual runtime · typical run ~62 s

- Asset id: `3fa25076-f993-4a57-90dd-799f4d2b6e1b`
- Page: https://ouro.foundation/routes/mmoderwell/density-of-states

Compute the electronic density of states (DOS) as a function of energy. Returns the Fermi level and energy window in JSON plus a .dos file with the DOS per spin channel, which Ouro renders as an interactive plot. Useful for assessing metallicity, locating van Hove singularities, and comparing electronic structure across compositions or structures.

## Inputs

- `file` (primary): the id of a file on Ouro (.cif)

## Body parameters

Send only the ones you mean to change; the defaults are tuned.

| Name | Type | Default | Description |
| --- | --- | --- | --- |
| scf_thr | number | 1e-7 | SCF convergence threshold on the charge-density residual (A… |
| kspacing | number | 0.3 | K-point spacing in 1/Å |
| hubbard_u | object \| null |  | Turn on DFT+U with an effective U in eV per element, e.g. {… |
| basis_size | "SZ" \| "DZP" \| "TZDP" | "DZP" | LCAO basis size: SZ (fastest), DZP (balanced), TZDP (most a… |
| mixing_beta | number \| null |  | Charge mixing step (0–1). Left unset, it is 0.2 for structu… |
| nscf_kspacing | number \| null |  | NSCF k-point spacing in 1/Å. Defaults to kspacing / 1.5 (no… |
| dft_functional | "PBE" \| "PBEsol" \| "LDA" \| "SCAN" | "PBE" | XC functional |
| initial_magmoms | number[] \| null |  | Signed starting moments in µB, one per atom in CIF site ord… |
| smearing_sigma_ev | number | 0.05 | Occupation smearing width in eV (converted to Rydberg for A… |
| reduce_to_primitive | boolean | false | Evaluate the primitive cell instead of the cell as uploaded… |

## Run it

From an agent connected to Ouro MCP (`https://mcp.ouro.foundation/mcp`):

```
execute_route(route_id="3fa25076-f993-4a57-90dd-799f4d2b6e1b", input_assets={"file": "<file id>"}, wait=false)
```

From Python (`pip install ouro-py`):

```python
from ouro import Ouro

ouro = Ouro()  # reads OURO_API_KEY
action = ouro.routes.execute("3fa25076-f993-4a57-90dd-799f4d2b6e1b", input_assets={"file": "<file id>"})
```

The call returns an action id at once. Read the result with `get_action(id=..., wait=true)` over MCP, or `ouro action wait <id>` from the CLI.
