Enge derivatives slow to calculate
You will need g4mice version 2-4-1 to do this.
So there are two pieces of code that talk to each other:
In $MICESRC/Interface/include/MathUtils.hh there is a class called Enge
In $MICESRC/BeamTools/include/BTMultipole.hh there is a class called BTMultipole
The code in Enge calculates something called Enge function plus analytical derivatives. The code in BTMultipole uses the analytical derivatives to calculate a field. There is a recursion relation that derives from Maxwell's equations allowing one to use the field profile on-axis to generate field profiles off-axis. At the moment this is rather slow, and could certainly be optimised. The slowness is likely to be caused by too many calls to exp(x)... see what you think.
One solution might be to add a function that calculates not just Enge nth derivative but all derivatives of Enge from n through to 0 all at once. Can probably reuse the exp(x) call better that way. One interesting thing to play with is gprof which allows to do code profiling...
Essentially though, have a play and see what you come up with.
There are existing unit tests in $MICETESTS/gUnit that should not be broken by whatever you are doing. Also an application test in $MICETEST/Integration/Simulation/Multipoles/
I attach to help a cards file and a geometry file that can be used to run the simulation. If you have g4mice-2-4-1 running, just put the cards and geometry file into some directory. Do
source ~/setupmice.csh mkdir some_directory cd some_directory
Copy the attached Multipole.dat and cards into some_directory, then
This should get the simulation going, fire a whole load of neutral particles (neutrons) on a rectangular grid and write out the particle data at a few points - with position, momentum and field values in the output.
Let me know, there's probably some stuff that needs clarifying here.