Repository navigation
Torch-native PDF pipeline + origin finder improvements - #248
ehrhardtkm wants to merge 14 commits into
Conversation
|
@ehrhardtkm before I review, it seems like being merged to |
|
Another question I had was from the PR comment was - what's approx speed/improvement given various sizes? Mostly likely it will be either 512x512x192x192 or 256x256x192x192 to be practical, just ballpark numbers. Ref: |
…uch better on experimental data. also user-set r_cut and max_iter
@bobleesj This PR carries just the PDF code from PR #177 plus improvements/fixes since then, which are listed in this PR's description. If |
|
@ehrhardtkm ah-ha divergence! Often inevitable esp for scientific code - maybe before the hackathon, if possible, we shall have |
|
@bobleesj I don’t think nanobeam can go into dev as a plain merge. Apart from the PDF code it carries 5k lines (MAPED, strain mapping, a file reader, imaging_utils changes). Also, from what I see, its imaging_utils fixes the same sub-pixel cross-correlation bug as dev’s #281, plus open PRs #284 and #97 are also on newer version of the strain code. It would be cleaner for at least the strain and PDF code to go into dev in these separate merges, I think. |
happy to merge this PR to @arthurmccray could you please check if I have permission for merging?
|

What problem this PR addresses
Follow-on to #177 (the polar transform + PDF pipeline that merged into
nanobeam). This PR brings that work ontodevand lands the changes I've made since.Conceptually unchanged — same
Polar4dstemdatastructure, samePairDistributionFunctionshape, same overall workflow (origin → polar → PDF). The public API should be the same, except for a few minor changes.Changes since #177:
Fully torch-native, dual-backend pipeline. The whole pipeline accepts numpy or torch input on the existing
Dataset, device is inferred from the input, and there are no GPU↔CPU round-trips inside the pipeline. numpy vs tensor input give identical results.Background fitting. Rewritten with an analytic Jacobian that is noticeably faster than the previous implementation. Added a batched
fit_bg_batchedpath for full-dataset use, which the downstream PDF widget (PR3) needs to recompute backgrounds interactively. Also includes some small fixes I picked up while running this on real data.Origin finding. The existing finder's hardcoded margin requirement caused it to error out on smaller detectors, so I made it the margin dynamic and added a 2D-quadratic subpixel refinement (renamed to
find_origin_angular_grid). I also added a secondary option,find_origin_angular_descent, a margin-free, COM-anchored descent finder. It's slower but I've found it slightly more reliable on noisier data. Both are dispatched fromPolar4dstem.from_data(origin_method="grid"|"descent").Tests in
tests/diffraction/test_polar.pyare parametrized over both origin finders and add coverage for the new code paths.Out of scope (follow-on PRs to shortly follow):
What should the reviewer(s) do
Merge after review. Reviewing commit-by-commit is likely easier than the unified diff — each commit is a single conceptual change.