Metadata-Version: 2.1
Name: latticeJSON
Version: 0.0.2
Summary: A JSON based lattice file format
Home-page: https://github.com/andreasfelix/latticejson
Author: Felix Andreas
License: GNU General Public License v3.0
Platform: UNKNOWN
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
Classifier: Topic :: Scientific/Engineering
Requires-Python: >=3.6
Description-Content-Type: text/markdown
Requires-Dist: fastjsonschema
Requires-Dist: click

# LatticeJSON

LatticeJSON is a JSON based lattice file format. JSON is able to describe complex data structures, 
has a human readable syntax and is available in all common programming language. It is therefore an 
appropriate choice to characterize the magnetic lattice of a particle accelerator.

## Specification
This repository contains the
[Specification of LatticeJSON](https://github.com/andreasfelix/latticejson/blob/master/latticejson/schema.json) 
in form of a [JSON Schema](https://json-schema.org). 

## Example

A LatticeJSON file for a FODO lattice:
```json
{
  "name": "FODO_RING",
  "description": "This is the simplest possible strong focusing lattice.",
  "elements": {
    "D1": {"type": "Drift", "length": 0.55},
    "Q1": {"type": "Quadrupole", "length": 0.2, "k1": 1.2},
    "Q2": {"type": "Quadrupole", "length": 0.4, "k1": -1.2},
    "B1": {"type": "Dipole", "length": 1.5, "angle": 0.392701, "e1": 0.1963505, "e2": 0.1963505}
  },
  "sub_lattices": {
    "FODO": ["Q1", "D1", "B1", "D1", "Q2", "D1", "B1", "D1", "Q1"]
  },

  "lattice": ["FODO", "FODO", "FODO", "FODO", "FODO", "FODO", "FODO", "FODO"]
}
```


# LatticeJSON CLI
[![Python Version](https://img.shields.io/pypi/pyversions/latticejson)](https://pypi.org/project/latticejson/)
[![PyPI](https://img.shields.io/pypi/v/latticejson.svg)](https://pypi.org/project/latticejson/)
[![CI](https://github.com/andreasfelix/latticejson/workflows/CI/badge.svg)](https://github.com/andreasfelix/latticejson/actions?query=workflow%3ACI)

This repository also contains a Python based commandline tool which is able validate and convert LatticeJSON
files into other common lattice file formats.

You can install and update it using pip or pipenv:

```sh
pip install -U latticejson
``` 


Validate a LatticeJSON file:
```sh
latticejson validate /path/to/lattice
```

Convert a LatticeJSON file into the elegant lattice format:
```sh
latticejson convert json elegant /path/to/lattice
```

To activate Bash completion add

```
eval "$(_LATTICEJSON_COMPLETE=source latticejson)"
```

to your `.bashrc`. Or, create an activation script with:


```
_LATTICEJSON_COMPLETE=source latticejson > latticejson-complete.sh
```

## License
[GNU General Public License v3.0](https://github.com/andreasfelix/latticejson/blob/master/LICENSE)




