I have read through Section 2 and two termination criteria are given: exhaustive and no u-turn. As far as I can see the latter is the same as in the original paper (assuming the metric is Euclidean). Can someone spell out the difference explicitly?

BTW my intention is to reproduce the results in Section 4 of the referenced paper.

Section 2 covered both the termination criterion and how to sample from a trajectory. We no longer use a slice sampler to sample a state from a trajectory, but rather sample directly from the
marginal probabilities as discussed in the paper.

If you want to know the exact implementation then please read the code.

I have never read C++ before so I hope you forgive anything that would be obvious to someone who knows the language.

I can see you changed from slice sampling to multinomial sampling in 05dcaa7. And (some of? all of?) the variable names match the paper e.g. z_minus I assume matches $z_-$. That is very helpful :)

And I have found the check for the u-turn in base_nuts.hpp:

// Break when NUTS criterion is no longer satisfied
rho += rho_subtree;
if (!compute_criterion(p_sharp_minus, p_sharp_plus, rho))
break;

So I think I can see what is going on. Thanks very much :)