General structure of the code
The highest-level object is an Accelerator.
It is initialized thanks to a DAT file (the same format as TraceWin).
Its main purpose is to store a ListOfElements, which is a list containing all the Elements of the DAT file.
The propagation of the beam through the accelerator is performed thanks to a BeamCalculator.
As for now, three different BeamCalculators are implemented:
Envelope1D, which computes the propagation of the beam in envelope and in 1D (longitudinal).Envelope3D, which computes the propagation of the beam in envelope and in 3D.TraceWin, which simply calls TraceWin from the command-line interface.
All BeamCalculators have a BeamCalculator.run() method, which perform the beam dynamics calculation along the linac; it takes in a ListOfElements and returns a SimulationOutput.
This last object contains all the useful information, such as kinetic energy along the linac.