# crystcif-parse

> A parser for crystallographic CIF files

Latest version **0.2.9** (published 2022-01-19) · MIT license · 0 weekly downloads

## Install

```sh
npm install crystcif-parse
pnpm add crystcif-parse
yarn add crystcif-parse
bun add crystcif-parse
```

Provides the command `validate-cif`.

## Health

**Score 25/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned.

## Facts

| | |
|---|---|
| Version | 0.2.9 |
| Published | 2022-01-19 |
| First published | 2018-11-16 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 2 |
| Unpacked size | 2.2 MB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 0 |
| Author | Simone Sturniolo |
| Maintainers | stur86 |
| Keywords | CIF, crystallography, parser |

## Links

- npm: https://www.npmjs.com/package/crystcif-parse
- Repository: https://github.com/CCP-NC/crystcif-parse
- Homepage: https://github.com/CCP-NC/crystcif-parse#readme
- Issues: https://github.com/CCP-NC/crystcif-parse/issues
- npm.io page: https://npm.io/package/crystcif-parse

## Dependencies (2)

- [mathjs](https://npm.io/package/mathjs.md) ^7.6.0
- [mendeleev](https://npm.io/package/mendeleev.md) ^1.2.2

## Alternatives

- [babylon](https://npm.io/package/babylon.md) — 5.1M weekly downloads
- [csscolorparser](https://npm.io/package/csscolorparser.md) — 3.7M weekly downloads
- [expr-eval-fork](https://npm.io/package/expr-eval-fork.md) — 1.5M weekly downloads
- [@leeoniya/ufuzzy](https://npm.io/package/@leeoniya/ufuzzy.md) — 247.7K weekly downloads
- [xml-parser](https://npm.io/package/xml-parser.md) — 78.4K weekly downloads

## Recent versions

- 0.2.9 (latest) — 2022-01-19
- 0.2.8 — 2021-10-21
- 0.2.7 — 2021-10-18
- 0.2.6 — 2021-06-18
- 0.2.5 — 2021-06-07
- 0.2.4 — 2020-12-01
- 0.2.3 — 2020-12-01
- 0.2.2 — 2020-11-24
- 0.2.1 — 2020-11-11
- 0.2.0 — 2020-10-09
- 0.1.5 — 2020-05-11
- 0.1.4 — 2019-02-01
- 0.1.3 — 2019-02-01
- 0.1.2 — 2018-11-16
- 0.1.1 — 2018-11-16
- … 1 more at https://npm.io/package/crystcif-parse/versions

## README

# crystcif-parse

A JavaScript parser for  Crystallographic Information File (CIF) files.
This module provides a barebone structure to parse the CIF data format and
interpret some basic keywords in order to retrieve a crystal structure.

### Supported:
* parsing of CIF 1.1 syntax
* partial interpretation of structural core dictionary keywords (position, cell
  parameters, labels)
* basic treatment of symmetry (symmetry operations)
* spacegroup symbols

### Not supported yet:
* CIF 2.0 syntax
* non-essential atomic properties (masses, charges, bonds, etc.)

## Module contents

The module exposes to the user a few core methods and classes that are useful
for the sake of parsing CIF files and handling the resulting structures.

```javascript
parseCifStructures(ciftext);
```

Parses the file passed as `ciftext` in form of string and returns a 
dictionary of `Atoms` classes, with the names of the corresponding data
blocks as keys.

```javascript
parseCif(ciftext)
```

Parses the file passed as `ciftext` in form of string and returns a dictionary
with data block names as keys. The blocks contain in turn the tags for any data
items, each corresponding to a full data item entry and corresponding value 
(represented by specific classes).

```javascript
Atoms(elems, positions, cell, info, scaled, tolerant)
```

A class defining a single crystal structure. Inspired by the Python class of 
the same name in the [Atomic Simulation Environment](https://wiki.fysik.dtu.dk/ase/index.html).
It is created by passing the following arguments:

* `elems`: Array of element symbols of atomic numbers
* `positions`: Array of xyz coordinates for each atom
* `cell`: unit cell for the structure. If not passed, the structure will not be
  considered periodic. Can be an Array of three numbers (treated as orthorombic 
  cell with sides [a,b,c]), an Array of two Arrays of three for lengths and 
  angles, or an Array of three Arrays of three for cartesian components
* `info`: a dictionary of any additional information necessary
* `scaled`: if `true`, the coordinates are considered fractional instead of
  absolute
* `tolerant`: if `true`, any unknown chemical symbols are accepted instead of
  causing an exception. Unknown atomic numbers will still fail

The `Atoms` class also provide the following methods to access its various
properties:

* `.length()`
* `.get_positions()`
* `.get_scaled_positions()`
* `.get_chemical_symbols()`
* `.get_atomic_numbers()`
* `.get_cell()`
* `.get_pbc()` (return periodic boundary conditions in X, Y, Z as an array of
  `Boolean`)
* `.get_array(name)` and `.set_array(name, array)` for getting and setting
  additional custom properties

---
_Source: https://npm.io/package/crystcif-parse · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
