67 std::list<elements::KnownElements> & lattice,
70 HookFn
const & call_hook,
71 CollectiveKicks && collective_kicks,
72 ElementPush && element_push
75 bool const forward = tracking_state.
forward();
83 int & step = tracking_state.
m_step;
86 auto visit_element = [&] (
97 tracking_state.
m_element = &element_variant;
100 call_hook(
"before_element");
106 std::visit([](
auto && element){ element.reverse(); }, element_variant);
112 std::visit([&nslice, &slice_ds](
auto && element) {
113 nslice = element.nslice();
114 slice_ds = element.ds() / nslice;
118 for (
int s = 0;
s < nslice; ++
s)
121 int const slice_step = forward ?
s : (nslice - 1 -
s);
128 <<
" slice_step=" << slice_step;
132 call_hook(
"before_slice");
138 collective_kicks(element_variant, slice_ds);
139 element_push(element_variant, step, period);
143 element_push(element_variant, step, period);
144 collective_kicks(element_variant, slice_ds);
151 call_hook(
"after_element");
156 std::visit([](
auto && element){ element.reverse(); }, element_variant);
161 for (
int p = 0; p < num_periods; ++p)
163 int const period = forward ? p : (num_periods - 1 - p);
169 tracking_state.
m_element = &lattice.front();
172 call_hook(
"before_period");
178 for (
auto & element_variant : lattice)
180 visit_element(element_variant, period);
185 for (
auto it = lattice.rbegin(); it != lattice.rend(); ++it)
187 visit_element(*it, period);
192 if (forward) { call_hook(
"after_period"); }
Definition ImpactXParticleContainer.H:136
void SetRefParticleEdge()
Definition ImpactXParticleContainer.cpp:431
std::variant< Empty, Aperture, Buncher, CFbend, ChrAcc, ChrDrift, ChrPlasmaLens, ChrQuad, ConstF, diagnostics::BeamMonitor, DipEdge, Drift, ExactCFbend, ExactDrift, ExactMultipole, ExactQuad, ExactSbend, Kicker, LinearMap, Marker, Multipole, NonlinearLens, PlaneXYRot, PolygonAperture, Programmable, PRot, Quad, QuadEdge, RFCavity, Sbend, ShortRF, SoftSolenoid, SoftQuadrupole, Sol, Source, SpinMap, TaperedPL, ThinDipole > KnownElements
Definition All.H:56
void track_lattice_particles(std::list< elements::KnownElements > &lattice, ImpactXParticleContainer &pc, TrackingState &tracking_state, HookFn const &call_hook, CollectiveKicks &&collective_kicks, ElementPush &&element_push)
Definition particles.H:66