Method visibility improved
This commit is contained in:
parent
a197ccae1f
commit
4c5465321b
@ -72,7 +72,7 @@ class Airy(IPSF):
|
|||||||
reduced_observation_angle = 1.028
|
reduced_observation_angle = 1.028
|
||||||
if not np.isclose(obstruction, 0.0):
|
if not np.isclose(obstruction, 0.0):
|
||||||
# Use obstructed airy disk
|
# Use obstructed airy disk
|
||||||
reduced_observation_angle = newton(lambda y: self.airy(np.pi * y, np.sqrt(obstruction)) - 0.5,
|
reduced_observation_angle = newton(lambda y: self.__airy(np.pi * y, np.sqrt(obstruction)) - 0.5,
|
||||||
reduced_observation_angle / 2) * 2
|
reduced_observation_angle / 2) * 2
|
||||||
contained_energy = "fwhm"
|
contained_energy = "fwhm"
|
||||||
elif contained_energy.lower() == "min":
|
elif contained_energy.lower() == "min":
|
||||||
@ -81,15 +81,15 @@ class Airy(IPSF):
|
|||||||
contained_energy = 0.8377 * u.dimensionless_unscaled
|
contained_energy = 0.8377 * u.dimensionless_unscaled
|
||||||
if not np.isclose(obstruction, 0.0):
|
if not np.isclose(obstruction, 0.0):
|
||||||
# Use obstructed airy disk
|
# Use obstructed airy disk
|
||||||
reduced_observation_angle = fmin(lambda y: self.airy(np.pi * y, np.sqrt(obstruction)),
|
reduced_observation_angle = fmin(lambda y: self.__airy(np.pi * y, np.sqrt(obstruction)),
|
||||||
reduced_observation_angle / 2, disp=False)[0] * 2
|
reduced_observation_angle / 2, disp=False)[0] * 2
|
||||||
contained_energy = self.airy_int(np.pi * reduced_observation_angle / 2,
|
contained_energy = self.__airy_int(np.pi * reduced_observation_angle / 2,
|
||||||
np.sqrt(obstruction)) * u.dimensionless_unscaled
|
np.sqrt(obstruction)) * u.dimensionless_unscaled
|
||||||
else:
|
else:
|
||||||
# Calculate the width numerically from the integral of the airy disk
|
# Calculate the width numerically from the integral of the airy disk
|
||||||
contained_energy = contained_energy / 100 * u.dimensionless_unscaled
|
contained_energy = contained_energy / 100 * u.dimensionless_unscaled
|
||||||
reduced_observation_angle = 2 * bisect(
|
reduced_observation_angle = 2 * bisect(
|
||||||
lambda y: self.airy_int(np.pi * y, np.sqrt(obstruction)) - contained_energy.value, 0, 100)
|
lambda y: self.__airy_int(np.pi * y, np.sqrt(obstruction)) - contained_energy.value, 0, 100)
|
||||||
if jitter_sigma is not None and (isinstance(contained_energy, u.Quantity) or isinstance(contained_energy, str)
|
if jitter_sigma is not None and (isinstance(contained_energy, u.Quantity) or isinstance(contained_energy, str)
|
||||||
and contained_energy.lower() == "fwhm"):
|
and contained_energy.lower() == "fwhm"):
|
||||||
# Convert jitter to reduced observation angle in lambda / d_ap
|
# Convert jitter to reduced observation angle in lambda / d_ap
|
||||||
@ -106,7 +106,7 @@ class Airy(IPSF):
|
|||||||
# Calculate the corresponding x-coordinates of each grid element
|
# Calculate the corresponding x-coordinates of each grid element
|
||||||
x = np.arange(1, n_points + 1) * dx
|
x = np.arange(1, n_points + 1) * dx
|
||||||
# Calculate the psf from an airy disk for each element on the grid
|
# Calculate the psf from an airy disk for each element on the grid
|
||||||
psf = self.airy(np.pi * x, np.sqrt(obstruction))
|
psf = self.__airy(np.pi * x, np.sqrt(obstruction))
|
||||||
# Calculate the integral of the undisturbed airy disk in order to scale the result of the convolution
|
# Calculate the integral of the undisturbed airy disk in order to scale the result of the convolution
|
||||||
total = np.sum(psf * x) * dx * 2 * np.pi
|
total = np.sum(psf * x) * dx * 2 * np.pi
|
||||||
# Mirror the PSF to the negative x-domain
|
# Mirror the PSF to the negative x-domain
|
||||||
@ -139,7 +139,7 @@ class Airy(IPSF):
|
|||||||
return reduced_observation_angle * u.dimensionless_unscaled
|
return reduced_observation_angle * u.dimensionless_unscaled
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def airy(x: Union[float, np.ndarray], obstruction: float = None):
|
def __airy(x: Union[float, np.ndarray], obstruction: float = None) -> Union[float, np.ndarray]:
|
||||||
"""
|
"""
|
||||||
Calculate function values of the airy disk
|
Calculate function values of the airy disk
|
||||||
|
|
||||||
@ -177,7 +177,7 @@ class Airy(IPSF):
|
|||||||
return res
|
return res
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def airy_int(x: float, obstruction: float = None):
|
def __airy_int(x: float, obstruction: float = None) -> float:
|
||||||
"""
|
"""
|
||||||
Calculate the integral of the airy disk from 0 to x.
|
Calculate the integral of the airy disk from 0 to x.
|
||||||
|
|
||||||
@ -234,7 +234,7 @@ class Airy(IPSF):
|
|||||||
# Calculate the new PSF-center indices of the reduced mask
|
# Calculate the new PSF-center indices of the reduced mask
|
||||||
psf_center_ind = [mask.psf_center_ind[0] - y_ind.min(), mask.psf_center_ind[1] - x_ind.min()]
|
psf_center_ind = [mask.psf_center_ind[0] - y_ind.min(), mask.psf_center_ind[1] - x_ind.min()]
|
||||||
# Oversample the reduced mask
|
# Oversample the reduced mask
|
||||||
mask_red_os = self.rebin(mask_red, self.__osf).view(PixelMask)
|
mask_red_os = self._rebin(mask_red, self.__osf).view(PixelMask)
|
||||||
# Calculate the new PSF-center indices of the reduced mask
|
# Calculate the new PSF-center indices of the reduced mask
|
||||||
psf_center_ind = [x * self.__osf for x in psf_center_ind]
|
psf_center_ind = [x * self.__osf for x in psf_center_ind]
|
||||||
|
|
||||||
@ -247,7 +247,7 @@ class Airy(IPSF):
|
|||||||
0]) * reduced_observation_angle_pixel.value / self.__osf)
|
0]) * reduced_observation_angle_pixel.value / self.__osf)
|
||||||
dist = np.sqrt(x_mesh ** 2 + y_mesh ** 2)
|
dist = np.sqrt(x_mesh ** 2 + y_mesh ** 2)
|
||||||
if jitter_sigma is None:
|
if jitter_sigma is None:
|
||||||
res = self.airy(dist * np.pi, np.sqrt(obstruction))
|
res = self.__airy(dist * np.pi, np.sqrt(obstruction))
|
||||||
else:
|
else:
|
||||||
if self.__psf_jitter is None:
|
if self.__psf_jitter is None:
|
||||||
self.calcReducedObservationAngle("fwhm", jitter_sigma, obstruction)
|
self.calcReducedObservationAngle("fwhm", jitter_sigma, obstruction)
|
||||||
@ -257,7 +257,7 @@ class Airy(IPSF):
|
|||||||
fill_value="extrapolate")
|
fill_value="extrapolate")
|
||||||
res = psf_interp(dist)
|
res = psf_interp(dist)
|
||||||
|
|
||||||
res = self.rebin(res, 1 / self.__osf)
|
res = self._rebin(res, 1 / self.__osf)
|
||||||
res = (mask_red * res).view(np.ndarray)
|
res = (mask_red * res).view(np.ndarray)
|
||||||
# Integrate the reduced mask and divide by the indefinite integral to get relative intensities
|
# Integrate the reduced mask and divide by the indefinite integral to get relative intensities
|
||||||
res = res * (reduced_observation_angle_pixel.value / self.__osf) ** 2 / (4 / np.pi) * (1 - obstruction)
|
res = res * (reduced_observation_angle_pixel.value / self.__osf) ** 2 / (4 / np.pi) * (1 - obstruction)
|
||||||
|
Loading…
Reference in New Issue
Block a user