Skip to main content

A standardized lattice format for particle accelerators

Project description

NALA: Not Another Lattice Architecture

NALA is a Python package for describing, simulating, and controlling particle accelerator lattices. It provides a standardized, extensible data model for elements, sections, layouts, and full machine models.


Architecture Overview

NALA organizes accelerator elements using a hierarchical structure:

Element Structure

NALA Element Structure

  • baseElement: Core identification (name, hardware_class, hardware_type, machine_area)
  • Element: Extends with simulation, controls, electrical, manufacturer info
  • PhysicalBaseElement: Adds position, rotation, length, error, survey

Lattice Structure

NALA Lattice Structure

  • ElementList: Container for elements
  • SectionLattice: Ordered list of elements (a section of the beamline)
  • MachineLayout: Sequence of sections (a full beam path)
  • MachineModel: All layouts, sections, and elements (the full accelerator)

Quick Examples

Create a Basic Element

from nala.models.element import baseElement

element = baseElement(
    name="QUAD-01",
    hardware_class="Magnet",
    hardware_type="Quadrupole",
    machine_area="LINAC-1"
)
print(element.name)  # "QUAD-01"

Element with Physical Properties

from nala.models.element import PhysicalBaseElement
from nala.models.physical import PhysicalElement, Position

cavity = PhysicalBaseElement(
    name="CAV-01",
    hardware_class="RF",
    hardware_type="Cavity",
    machine_area="LINAC-1",
    physical=PhysicalElement(
        length=1.0,
        middle=Position(x=0, y=0, z=5.0)
    )
)
print(cavity.physical.length)  # 1.0

Create a Section Lattice

from nala.models.elementList import SectionLattice, ElementList

section = SectionLattice(
    name="INJECTOR",
    order=["BPM-01", "QUAD-01"],
    elements=ElementList(elements={
        "BPM-01": element,
        "QUAD-01": cavity
    })
)
print(section.names)  # ["BPM-01", "QUAD-01"]

Build a Machine Layout

from nala.models.elementList import MachineLayout

layout = MachineLayout(
    name="MainBeamline",
    sections={"INJECTOR": section}
)
print(layout.names)  # ["INJECTOR"]

Full Machine Model

from nala.models.elementList import MachineModel

model = MachineModel(
    elements={"QUAD-01": element, "CAV-01": cavity}
)
print(list(model.sections.keys()))  # ["LINAC-1"]

Translator Module

NALA includes a translator system for exporting accelerator models to various simulation codes, such as ASTRA, GPT, Elegant, CSRTrack, Ocelot, Xsuite, Wake-T, and Genesis.

  • Translate individual elements, sections, layouts, or full machine models.
  • Export to code-specific formats and objects.
  • Automatically manage drift spaces, field maps, and code-specific configuration.

Example: Export a section to Elegant and Ocelot

from nala.translator.converters.section import SectionLatticeTranslator

translator = SectionLatticeTranslator.from_section(section)
translator.directory = "./output"

elegant_string = translator.to_elegant(charge=1e-9)
ocelot_lattice = translator.to_ocelot(save=True)

See the Translator documentation for details and more examples.


Features

  • Hierarchical lattice structure: elements → sections → layouts → machine
  • Flexible element definition: physical, simulation, controls, electrical, manufacturer
  • Extensible API: add new element types and metadata
  • Simulation & controls integration: store simulation parameters and control variables
  • Export to simulation codes via the Translator module


Installation

Install NALA from PyPI:

pip install nala-accelerator

Or add to your requirements.txt:

nala-accelerator

Documentation


Contributing

Issues and pull requests are welcome! See GitHub Issues.


Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nala_accelerator-0.0.0.tar.gz (643.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

nala_accelerator-0.0.0-py3-none-any.whl (303.2 kB view details)

Uploaded Python 3

File details

Details for the file nala_accelerator-0.0.0.tar.gz.

File metadata

  • Download URL: nala_accelerator-0.0.0.tar.gz
  • Upload date:
  • Size: 643.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.19

File hashes

Hashes for nala_accelerator-0.0.0.tar.gz
Algorithm Hash digest
SHA256 01de0715e20465c077f7ff874ebf5b438884bfa27a05b00019ce9e636c12e356
MD5 05f0fc428dff172c8cd8e65389fbe09a
BLAKE2b-256 3be7b99fdccff5e0a54c2c2f1940b644f403c0cfb45c9fc981829ea47ece4631

See more details on using hashes here.

File details

Details for the file nala_accelerator-0.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for nala_accelerator-0.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 241bbd1a3b0165d423cba184015b943a15fd8e7c85650694f5fb57a57db1e8fe
MD5 1f1661d203a704d4e4de170d8ea0d682
BLAKE2b-256 d9bdbebdcbbea5893a95dcf1d20508d979fb9078dec75874ff0562f695d2b001

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page