STIR has functionality to multiplying the Hessian with an image for priors and objective functions.
In STIR it's called accumulate_Hessian_times_input but "input" is a bit confusing (it does H . input), so suggestions welcome (@epapoutsellis @gschramm @Imraj-Singh @paskino).
This would have to be added to sirf.STIR.ObjectiveFunction. I think the C++ version can be as-is, but the Python one should be
ret = accumulate_Hessian_times_input(current_estimate, input, optional_subset, out=optional)
without subset, it should do all of them I think (or at least, it should do the same as gradient).