we will really need a way to get the actual path length or propagation time especially when we're using libFF propagation
I'm helping Rob Ainsworth do a deceleration simulation which does what the real Recycler does when they decelerate a set of batches for slip-stacking. The RF frequency is ramped down, but the dipole and quadrupole magnet strengths are not changed. (You couldn't change them in the Recycler anyway because they are permanent magnets.)
Normally, the way you would change RF frequency with energy in Synergia is to set the energy of the lattice reference particle and call lattice_simulator.update(). However, this scales the magnet strengths which we don't want. The kludge is to save the rf frequency at the original energy which has been determined by CHEF when it propagates the reference particle through the lattice. I have to use the actual particle propagation time instead of lattice length because there may be orbit bumps that increase the propagation time. The frequency is h*beta*c/L. From the original frequency and original beta, I can save h*c/L. In the turn_end_action, I get the new beta, calculate the new frequency. I then update the cavity RF frequency.
There is currently no analogue to this that can be done using only libFF mechanisms.