Scattering¶
-
ehtim.scattering.stochastic_optics.
MakeEpsilonScreen
(Nx, Ny, rngseed=0)[source]¶ Create a standardized Fourier representation of a scattering screen
-
class
ehtim.scattering.stochastic_optics.
ScatteringModel
(model='dipole', scatt_alpha=1.38, observer_screen_distance=8.702519999999999e+21, source_screen_distance=1.706558e+22, theta_maj_mas_ref=1.38, theta_min_mas_ref=0.703, POS_ANG=81.9, wavelength_reference_cm=1.0, r_in=80000000.0, r_out=1e+20)[source]¶ A scattering model based on a thin-screen approximation.
- Models include:
- (‘von_Mises’, ‘boxcar’, ‘dipole’): These scattering models are motivated by observations of Sgr A*.
Each gives a Gaussian at long wavelengths that matches the model defined by {theta_maj_mas_ref, theta_min_mas_ref, POS_ANG} at the reference wavelength wavelength_reference_cm with a lambda^2 scaling. The source sizes {theta_maj, theta_min} are the image FWHM in milliarcseconds at the reference wavelength. Note that this may not match the ensemble-average kernel at the reference wavelength, if the reference wavelength is short enough to be beyond the lambda^2 regime! This model also includes an inner and outer scale and will thus transition to scattering with scatt_alpha at shorter wavelengths Note: This model requires a finite inner scale
- ‘power-law’: This scattering model gives a pure power law at all wavelengths. There is no inner scale, but there can be an outer scale.
The ensemble-average image is given by {theta_maj_mas_ref, theta_min_mas_ref, POS_ANG} at the reference wavelength wavelength_reference_cm. The ensemble-average image size is proportional to wavelength^(1+2/scatt_alpha) = wavelength^(11/5) for Kolmogorov
-
model
¶ The type of scattering model (determined by the power spectrum of phase fluctuations).
- Type
string
-
theta_maj_mas_ref
¶ FWHM in mas of the major axis angular broadening at the specified reference wavelength.
- Type
-
theta_min_mas_ref
¶ FWHM in mas of the minor axis angular broadening at the specified reference wavelength.
- Type
-
Deblur_obs
(obs, use_approximate_form=True)[source]¶ Deblurs the observation obs by dividing visibilities by the ensemble-average scattering kernel. See Fish et al. (2014): arXiv:1409.4690.
-
Ensemble_Average_Blur
(im, wavelength_cm=None, ker=None, use_approximate_form=True)[source]¶ Blurs an input Image with the ensemble-average scattering kernel.
- Parameters
- Returns
The ensemble-average scattered image.
- Return type
out (Image)
-
Ensemble_Average_Kernel
(Reference_Image, wavelength_cm=None, use_approximate_form=True)[source]¶ The ensemble-average convolution kernel for images; returns a 2D array corresponding to the image dimensions of the reference image
- Parameters
- Returns
The ensemble-average scattering kernel in the image domain.
- Return type
ker (2D ndarray)
-
Ensemble_Average_Kernel_Visibility
(u, v, wavelength_cm, use_approximate_form=True)[source]¶ The ensemble-average multiplicative scattering kernel for visibilities at a particular {u,v} coordinate
- Parameters
- Returns
The ensemble-average kernel at the specified {u,v} point and observing wavelength.
- Return type
-
Mag
()[source]¶ Returns the effective magnification the scattering screen: (observer-screen distance)/(source-screen distance).
- Returns
The effective magnification of the scattering screen.
- Return type
M (float)
-
MakePhaseScreen
(EpsilonScreen, Reference_Image, obs_frequency_Hz=0.0, Vx_km_per_s=50.0, Vy_km_per_s=0.0, t_hr=0.0, sqrtQ_init=None)[source]¶ Create a refractive phase screen from standardized Fourier components (the EpsilonScreen). All lengths should be specified in centimeters If the observing frequency (obs_frequency_Hz) is not specified, then it will be taken to be equal to the frequency of the Reference_Image Note: an odd image dimension is required!
- Parameters
EpsilonScreen (2D ndarray) – Optionally, the scattering screen can be specified. If none is given, a random one will be generated.
Reference_Image (Image) – The reference image.
obs_frequency_Hz (float) – The observing frequency, in Hz. By default, it will be taken to be equal to the frequency of the Unscattered_Image.
Vx_km_per_s (float) – Velocity of the scattering screen in the x direction (toward East) in km/s.
Vy_km_per_s (float) – Velocity of the scattering screen in the y direction (toward North) in km/s.
t_hr (float) – The current time of the scattering in hours.
ea_ker (2D ndarray) – The used can optionally pass a precomputed array of the ensemble-average blurring kernel.
sqrtQ_init (2D ndarray) – The used can optionally pass a precomputed array of the square root of the power spectrum.
- Returns
The phase screen.
- Return type
phi_Image (Image)
-
Q
(qx, qy)[source]¶ Computes the power spectrum of the scattering model at a wavenumber {qx,qy} (in 1/cm). The power spectrum is part of what defines the scattering model (along with Dphi). Q(qx,qy) is independent of the observing wavelength.
-
Scatter
(Unscattered_Image, Epsilon_Screen=array([], dtype=float64), obs_frequency_Hz=0.0, Vx_km_per_s=50.0, Vy_km_per_s=0.0, t_hr=0.0, ea_ker=None, sqrtQ=None, Linearized_Approximation=False, DisplayImage=False, Force_Positivity=False, use_approximate_form=True)[source]¶ Scatter an image using the specified epsilon screen. All lengths should be specified in centimeters If the observing frequency (obs_frequency_Hz) is not specified, then it will be taken to be equal to the frequency of the Unscattered_Image Note: an odd image dimension is required!
- Parameters
Unscattered_Image (Image) – The unscattered image.
Epsilon_Screen (2D ndarray) – Optionally, the scattering screen can be specified. If none is given, a random one will be generated.
obs_frequency_Hz (float) – The observing frequency, in Hz. By default, it will be taken to be equal to the frequency of the Unscattered_Image.
Vx_km_per_s (float) – Velocity of the scattering screen in the x direction (toward East) in km/s.
Vy_km_per_s (float) – Velocity of the scattering screen in the y direction (toward North) in km/s.
t_hr (float) – The current time of the scattering in hours.
ea_ker (2D ndarray) – The used can optionally pass a precomputed array of the ensemble-average blurring kernel.
sqrtQ (2D ndarray) – The used can optionally pass a precomputed array of the square root of the power spectrum.
Linearized_Approximation (bool) – If True, uses a linearized approximation for the scattering (Eq. 10 of Johnson & Narayan 2016). If False, uses Eq. 9 of that paper.
DisplayImage (bool) – If True, show a plot of the unscattered, ensemble-average, and scattered images as well as the phase screen.
Force_Positivity (bool) – If True, eliminates negative flux from the scattered image from the linearized approximation.
Return_Image_List (bool) – If True, returns a list of the scattered frames. If False, returns a movie object.
- Returns
The scattered image.
- Return type
AI_Image (Image)
-
Scatter_Movie
(Unscattered_Movie, Epsilon_Screen=array([], dtype=float64), obs_frequency_Hz=0.0, Vx_km_per_s=50.0, Vy_km_per_s=0.0, framedur_sec=None, N_frames=None, ea_ker=None, sqrtQ=None, Linearized_Approximation=False, Force_Positivity=False, Return_Image_List=False, processes=0)[source]¶ Scatter a movie using the specified epsilon screen. The movie can either be a movie object, an image list, or a static image If scattering a list of images or static image, the frame duration in seconds (framedur_sec) must be specified If scattering a static image, the total number of frames must be specified (N_frames) All lengths should be specified in centimeters If the observing frequency (obs_frequency_Hz) is not specified, then it will be taken to be equal to the frequency of the Unscattered_Movie Note: an odd image dimension is required!
- Parameters
Unscattered_Movie – This can be a movie object, an image list, or a static image
Epsilon_Screen (2D ndarray) – Optionally, the scattering screen can be specified. If none is given, a random one will be generated.
obs_frequency_Hz (float) – The observing frequency, in Hz. By default, it will be taken to be equal to the frequency of the Unscattered_Movie.
Vx_km_per_s (float) – Velocity of the scattering screen in the x direction (toward East) in km/s.
Vy_km_per_s (float) – Velocity of the scattering screen in the y direction (toward North) in km/s.
framedur_sec (float) – Duration of each frame, in seconds. Only needed if Unscattered_Movie is not a movie object.
N_frames (int) – Total number of frames. Only needed if Unscattered_Movie is a static image object.
ea_ker (2D ndarray) – The used can optionally pass a precomputed array of the ensemble-average blurring kernel.
sqrtQ (2D ndarray) – The used can optionally pass a precomputed array of the square root of the power spectrum.
Linearized_Approximation (bool) – If True, uses a linearized approximation for the scattering (Eq. 10 of Johnson & Narayan 2016). If False, uses Eq. 9 of that paper.
Force_Positivity (bool) – If True, eliminates negative flux from the scattered image from the linearized approximation.
Return_Image_List (bool) – If True, returns a list of the scattered frames. If False, returns a movie object.
processes (int) – Number of cores to use in multiprocessing. Default value (0) means no multiprocessing. Uses all available cores if processes < 0.
- Returns
Either a movie object or a list of images, depending on the flag Return_Image_List.
- Return type
Scattered_Movie
-
dDphi_dz
(r, phi, phi_q, wavelength)[source]¶ differential contribution to the phase structure function
-
rF
(wavelength)[source]¶ Returns the Fresnel scale [cm] of the scattering screen at the specified wavelength [cm].
-
sqrtQ_Matrix
(Reference_Image, Vx_km_per_s=50.0, Vy_km_per_s=0.0, t_hr=0.0)[source]¶ Computes the square root of the power spectrum on a discrete grid. Because translation of the screen is done most conveniently in Fourier space, a screen translation can also be included.
- Parameters
Reference_Image (Image) – Reference image to determine image and pixel dimensions and wavelength.
Vx_km_per_s (float) – Velocity of the scattering screen in the x direction (toward East) in km/s.
Vy_km_per_s (float) – Velocity of the scattering screen in the y direction (toward North) in km/s.
t_hr (float) – The current time of the scattering in hours.
- Returns
The square root of the power spectrum of the screen with an additional phase for rotation of the screen.
- Return type
sqrtQ (2D complex ndarray)