[SciPy-User] Re[SciPy-user] binning to polar coordinates
Jerome Kieffer
Jerome.Kieffer@esrf...
Fri Aug 31 03:31:15 CDT 2012
On Fri, 31 Aug 2012 00:36:21 -0700 (PDT)
arsbbr <arsbbr@gmx.net> wrote:
> thank you for your tip! Unfortunately I'm getting big gaps for my real data
> in the small rho region. The optimal algorithm should interpolate in the
> small rho region and bin in the high rho region.
> I guess your split pixel solution would be best. But this a whole API with a
> lot of corrections and methods for real experimental data. Is it possible to
> use your sophisticated algorithm only for the transformation from Cartesian
> to a evenly stepped polar grid? Speed is not the issue with my data, so a
> numpy solution would be fine.
I wish this would be possible using only numpy but I failed.
I had to write it in a low-level (Cython) way to get decent speed because the algorithm is iterating over all input pixels.
What you are looking for is in:
https://github.com/kif/pyFAI/blob/master/src/splitBBox.pyx
Use the function histoBBox2d(weights,
pos0, delta_pos0,
pos1, delta_pos1,
bins=(100, 36))
If you refer to the manual of numpy.histogram2d:
-> bins has the same meaning, i.e. the shape of the output image
-> pos0 and pos1 are the same a x and y; they should contain the coordinated in (rho,theta) of the center of input pixels.
-> delta_pos0 and delta_pos1 are the distance in (rho,theta) from pixel center to the pixel corner. This is of course new compared to numpy
-> weights is as in numpy the intensity of input pixels.
All array need to have the same size.
The output is:
-> your transformed image (maybe it's transposed), i.e. weighted_histogram/unweighted_histogram
-> axis in rho (or theta) 1D
-> axis in theta (or rho) 1D
-> weighted histogram (2D)
-> unweighted histogram (2D)
splitBBox should be stand alone: just use this setup.py to compile the module (needs Cython)
########################################
try:
from setuptools import setup
except ImportError:
from distutils.core import setup
from distutils.core import Extension
from Cython.Distutils import build_ext
# for numpy
from numpy.distutils.misc_util import get_numpy_include_dirs
split_ext = Extension("splitBBox",
include_dirs=get_numpy_include_dirs(),
sources=['splitBBox.pyx'],
setup(name='histogram',
version="0.3.0",
author="Jerome Kieffer",
author_email="jerome.kieffer@esrf.eu",
description='test for azim int',
ext_modules=[split_ext],
cmdclass={'build_ext': build_ext},
)
#####################################################
Nota:
I am working on X-ray diffraction so
Your "rho" could be named "2theta", tth or q.
Your "theta" is usually named "chi" in my comments.
Different sciences; different conventions :)
I hope this helps, cheers,
--
Jérôme Kieffer
On-Line Data analysis / Software Group
ISDD / ESRF
tel +33 476 882 445
More information about the SciPy-User
mailing list