-
Notifications
You must be signed in to change notification settings - Fork 35
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Implement spline interpolation #213
Comments
@amandalund and @stognini : you ran some instances of TestEm3 with and without spline interpolation, and with refined energy grids. Can you post/reference any of the results/analysis when you get a chance? |
Here is the test I currently have. Celeritas is showing slightly larger differences.
|
Just ran a short test on Summit. The input, cpu run script, and results are in benchmarks/testem3-demo-loop/g4app-summit/, but here is the gist of it:
Time penalty is roughly |
Nice! I'll do a run with increased data points for comparison to see what the penalty is there. |
I've added an interface to our input to allow adjustment of the number of data points: see #414 . |
Let's wait until refactoring the physics to use standard 'builders' before doing this. |
@amandalund @lebuller Moving #1562 (comment) here. I thought spline interpolation is basically a local polynomial interpolation, which is what #1444 implements? So perhaps y'all could make sure we're on the same page and able to reproduce Geant4's interpolation method. |
I think they are very similar, but cubic splines have the constraints that the first and second derivatives be continuous everywhere? A downside is this would require storing the second derivatives as well, and what we have might be close enough: it looks like the errors due to the differences in the interpolation method In #1544 at least are pretty small. Hacking together something equivalent to what Geant4 does (which looks like cubic spline interpolation with not-a-knot boundary conditions) and using it to build the range table, I'm able to exactly reproduce the range table values from Geant4. |
For context, some nice examples/theory at https://blog.timodenk.com/cubic-spline-interpolation/index.html . I guess it would behoove us (@lebuller ) to do a little convergence study of the range (which is the most important integral quantity) with the different methods: increasing geant4 xs points, then we compare the imported range (i.e. using their not-a-knot interpolation) to the calculated range (using your calculator here with the cubic spline eloss?) |
Spline interpolation (or some other nonlinear interpolation) is used in Geant4 by :
calc_energy_loss
)Research why it's necessary (the energy loss one provides an explanation of the consequences of linear interpolation, although it seems to me an alternate interpolation scheme such as log-log might have the same effect with less overheard) and compare spline interpolation with alternatives.
The text was updated successfully, but these errors were encountered: