math¶
Submodules¶
arte.math.make_xy module¶
- arte.math.make_xy.make_xy(sampling, ratio, dtype=None, polar=False, vector=False, zero_sampled=False, quarter=False, fft=False)¶
Generates zero-centered domains in a cartesian plane.
Generates a zero-centered domain on a cartesian plane or axis, using cartesian or polar coordinates, tipically for pupil sampling and FFT usage.
Calling sequence:
x,y = make_xy(sampling, ratio) r, theta = make_xy(sampling, ratio, polar=True)
- Parameters:
sampling (int) – Number of sampling points per dimension of the domain, greater or equal to 2.
ratio (float) – Extension of sampled domain: -Ratio <= x [,y] <= +Ratio
polar (bool, optional) – If True, return domain sampling in polar coordinates. Default value is False (use cartesian coordinates)
dtype (np.dtype, optional) – If set, the result will have this dtype. Otherwise, it will be inferred by the dtype of sampling and ratio
vector (bool, optional) – If True, 1-dimensional domain is sampled instead of 2d. If polar is True, the value of vector is ignored.
zero_sampled (bool, optional) – If True, origin of the domain is sampled. This flag is useful to force the zero to be sampled when sampling is even. When sampling is odd, the zero is always sampled
quarter (bool, optional) – If True, only 1st quadrant is returned with (X>=0 AND Y>=0). The array returned has: * if Sampling is even: Sampling/2 X Sampling/2 elements * if Sampling is odd: (Sampling+1)/2 X (Sampling+1)/2 elements
fft (bool, optional) –
If True, order the output values for FFT purposes. For example:
- Sampling=4, Ratio=1 vector -3/4,-1/4,+1/4,+3/4:
returned as +1/4,+3/4,-3/4,-1/4.
- Sampling=4, Ratio=1, zero_sampled=True, vector -1,-1/2,0,+1/2:
returned as 0,1/2,-1,-1/2
- Sampling=5, Ratio=1 vector -4/5,-2/5,0,+2/5,+4/5:
returned as 0,+2/5,+4/5,-4/5,-2/5
- Returns:
(X, Y) (tuple of numpy arrays) – with no special options, a 2-elements tuple with the X and Y values of sampled points
(R, Angle) (tuple of numpy arrays) – if polar is True, a 2-elements tuple with radial and angular values (in radians) of sampled points
X (numpy array) – if vector is True, numpy array with X values of sampled points.
- Raises:
ValueError – If the sampling parameter is lower than 2.
Notes
HOW THE DOMAIN IS SAMPLED
The concept is the following: considering an array of
sampling
xsampling pixels, the bottom-left corner of the bottom-left pixel has coordinates (-`ratio
,-ratio
) and the top-right cornet of the to-left pixel has coordinates (+`ratio`,+`ratio`). The procedure returns the coordinates of the centers of the pixels. Whensampling
is even andzero_sampled
is True, the coordinates of the bottom-left corners of the pixels are returned.sampling
is even andzero_sampled
is False: the edge of the domain is not sampled and the sampling is symmetrical respect to origin:Ex: Sampling=4, Ratio=1. -1 -0.5 0 0.5 1 Domain (Ex. X axis) | | | | | * * * * Sampling points -0.75 -0.25 0.25 0.75 Returned vector
sampling
is even andzero_sampled
is True: the lower edge is sampled and the sampling is not symmetrical respect to the origin:Ex: Sampling=4, Ratio=1. -1 -0.5 0 0.5 1 Domain (Ex. X axis) | | | | | * * * * Sampling points -1 -0.5 0 0.5 Returned vector
sampling
is odd (zero_sampled
is ignored): the zero is always sampled:Ex: Sampling=5, Ratio=1. -1 -3/5 -1/5 1/5 3/5 1 Domain (Ex. X axis) | | | | | | * * * * * Sampling points -4/5 -2/5 0 2/5 4/5 Returned vector
If
fft
is True, output values are ordered for FFT purposes:Ex: 2-dimensional domain: N = Sampling X or Y(0:N/2-1, 0:N/2-1) 1st quadrant (including origin if ZERO_SAMPLEDis set) X or Y(N/2:N, 0:N/2-1) 2nd quadrant X or Y(N/2:N, N/2:N) 3rd quadrant X or Y(0:N/2-1, N/2:N) 2nd quadrant
Examples
Compute a tilt plane on a round pupil
>>> x, y = make_xy(256, 1.0) >>> pupil = x*0 >>> pupil[(x*x + y*y)<=1] =1 >>> plt.imshow(pupil)