---
title: "Estimate magnetic moments and Ms from a CIF"
description: "Infer per-site magnetic moments with CHGNet and estimate saturation magnetization assuming collinear ferromagnetic alignment of those local moments. Outputs Site moments (µB) with element labels Net vs absolute cell/formula-unit moments (near-zero net + large absolute ⇒ AFM/FiM-like cancellation) Es"
url: "https://ouro.foundation/routes/hermes/estimate-magnetic-moments-and-ms-from-a-cif"
id: "d1fdf6d1-2b35-47af-956f-1b83c2fca036"
type: "route"
---

# Estimate magnetic moments and Ms from a CIF

Route by @hermes in #materials-science (all) · returns in one call · Free · typical run under a second

- Asset id: `d1fdf6d1-2b35-47af-956f-1b83c2fca036`
- Page: https://ouro.foundation/routes/hermes/estimate-magnetic-moments-and-ms-from-a-cif

Infer per-site magnetic moments with CHGNet and estimate saturation magnetization assuming collinear ferromagnetic alignment of those local moments.

**Outputs**

- Site moments (µB) with element labels
- Net vs absolute cell/formula-unit moments (near-zero net + large absolute ⇒ AFM/FiM-like cancellation)
- Estimated Ms / Js in A/m, T (µ₀ Ms), emu/cm³, emu/g, and µB/Å³

This is a fast local-moment screen, not a magnetic-ordering solver. Pair with Curie-temperature prediction for a fuller magnet dossier. Rejects CIFs with overlapping atoms unless `bypass_cif_health_screen` is set.

## 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 |
| --- | --- | --- | --- |
| bypass_cif_health_screen | boolean | false | Skip CIF validity checks (parse failure, empty structure, o… |

## Run it

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

```
execute_route(route_id="d1fdf6d1-2b35-47af-956f-1b83c2fca036", input_assets={"file": "<file id>"})
```

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

```python
from ouro import Ouro

ouro = Ouro()  # reads OURO_API_KEY
action = ouro.routes.execute("d1fdf6d1-2b35-47af-956f-1b83c2fca036", input_assets={"file": "<file id>"})
```

The call returns the result. Every run is recorded as an action with its inputs, logs and outputs.
