Serpentine -- A Python-based Charged Particle Tracker

The goal of this project is to build a charged particle tracker somewhat similar in capability to Lucretia. Despite its similarities, this will not simply be a rewrite of that code, and will include several features that make it stand out from the crowd:
  1. No reliance on any proprietary software, or on any code that requires a license to use
    • Lucretia's dependence on Matlab leads to the frustrating requirement for each and every user/computer to have a valid Matlab license. In situations where a student (for example) would just like to make a few quick calculations, this is obviously not satisfactory.
    • The license for the code produced here will be the GPL, and care will be taken to ensure that any included libraries/executables, are also compliant with the GPL. To comply with this philosophy, there will be no native input format for beamline lattice files. Instead, the Universal Accelerator Parser will allow the use of a significant number of the most popular lattice formats as if they were native.
  2. Build it to be light
    • A package to quickly calculate beamline R-matrices, Twiss parameters, etc. may be constructed to be very small and light, therefore the philosophy behind the design of this code is to build a small, light framework for the most commonly used functions, and to allow expansion of the complexity by importing additional modules/classes.

Planned Capabilities

The following is a (perhaps incomplete) list of the capabilities that are planned for this code. The list is divided into two (the "Basics", and "Add-ons") in order to suggest the priorities of this project.

A list of the capabilities required in the first version ("RC1" in linux jargon) can be found here.

The Basics:

  1. Tracking
  2. Transport matrices (linear & non-linear)
    • Easy calculation of the linear R matrices for a single element (calculated on construction of the beamline element), and for a series of elements.
    • Calculation of the appropriate higher-order matrices for any elements requiring them.
  3. Twiss parameters.
    • Propagation of the Twiss parameters (alpha, beta, phase, dispersion, dispersion_prime, and the sigma matrix) through a system of elements.
  4. Multi-species
    • Electron or positron bunches. Extension to other species later (p, pbar, ions, ...)
  5. Loading of lattice formats in AML, as well as all the other formats understood by UAP.


  1. Collective effects
    • Longitudinal and transverse cavity wakes, represented as both frequency and time domain fields.
    • Synchrotron losses (yeah, yeah, I know SR isn't a collective effect), including average and stochastic effects.
  2. Realistic diagnostics
    • Add realistic effects to the BPM output (such as losing resolution if charge is lost upstream).
    • A full calculation of the BPM signals -- including phase noise, gain changes, etc. -- for diagnostics studies.

Physics Notes -- Here you can find definitions of the beam coordinate system, R-matrices, and a full description and derivation of the Hamiltonians used to define the dynamics in each of the accelerator elements.

Element-by-element comparison with Lucretia

-- StephenMolloy - 04 Jun 2010

This topic: PP/JAI > WebHome > Simulation > PythonTracker
Topic revision: r12 - 04 Jun 2010 - StephenMolloy
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2022 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding RHUL Physics Department TWiki? Send feedback