Obsdata

class ehtim.obsdata.Obsdata(ra, dec, rf, bw, datatable, tarr, scantable=None, polrep='stokes', source='SgrA', mjd=51544, timetype='UTC', ampcal=True, phasecal=True, opacitycal=True, dcal=True, frcal=True)[source]

A polarimetric VLBI observation of visibility amplitudes and phases (in Jy).

source

str – The source name

ra

float – The source Right Ascension in fractional hours

dec

float – The source declination in fractional degrees

mjd

int – The integer MJD of the observation

tstart

float – The start time of the observation in hours

tstop

float – The end time of the observation in hours

rf

float – The observation frequency in Hz

bw

float – The observation bandwidth in Hz

timetype

str – How to interpret tstart and tstop; either ‘GMST’ or ‘UTC’

polrep

str – polarization representation, either ‘stokes’ or ‘circ’

tarr

numpy.recarray – The array of telescope data with datatype DTARR

tkey

dict – A dictionary of rows in the tarr for each site name

data

numpy.recarray – the basic data with datatype DTPOL_STOKES or DTPOL_CIRC

scantable

numpy.recarray – The array of scan information

ampcal

bool – True if amplitudes calibrated

phasecal

bool – True if phases calibrated

opacitycal

bool – True if time-dependent opacities correctly accounted for in sigmas

frcal

bool – True if feed rotation calibrated out of visibilities

dcal

bool – True if D terms calibrated out of visibilities

amp

numpy.recarray – An array of saved (averaged) visibility amplitudes

bispec

numpy.recarray – An array of saved (averaged) bispectra

cphase

numpy.recarray – An array of saved (averaged) closure phases

camp

numpy.recarray – An array of saved (averaged) closure amplitudes

logcamp

numpy.recarray – An array of saved (averaged) log closure amplitudes

add_all(avg_time=0, return_type='rec', count='max', debias=True, snrcut=0.0, err_type='predicted', num_samples=1000, round_s=0.1)[source]

Adds tables of all all averaged derived quantities self.amp,self.bispec,self.cphase,self.camp,self.logcamp

Parameters:
  • avg_time (float) – closure amplitude averaging timescale
  • return_type – data frame (‘df’) or recarray (‘rec’)
  • debias (bool) – If True, debias the closure amplitude
  • count (str) – If ‘min’, return minimal set of closure quantities, if ‘max’ return all closure quantities
  • err_type (str) – ‘predicted’ or ‘measured’
  • num_samples – number of bootstrap (re)samples if measuring error
  • round_s (float) – accuracy of datetime object in seconds
  • snrcut (float) – flag closure amplitudes with snr lower than this
add_amp(avg_time=0, scan_avg=False, debias=True, err_type='predicted', return_type='rec', round_s=0.1, snrcut=0.0)[source]

Adds attribute self.amp: aan amplitude table with incoherently averaged amplitudes

Parameters:
  • avg_time (float) – incoherent integration time in seconds
  • scan_avg (bool) – if True, average over scans in self.scans instead of intime
  • debias (bool) – if True then apply debiasing
  • err_type (str) – ‘predicted’ or ‘measured’
  • return_type – data frame (‘df’) or recarray (‘rec’)
  • round_s (float) – accuracy of datetime object in seconds
  • snrcut (float) – flag amplitudes with snr lower than this
add_bispec(avg_time=0, return_type='rec', count='max', snrcut=0.0, err_type='predicted', num_samples=1000, round_s=0.1, uv_min=False)[source]

Adds attribute self.bispec: bispectra table with bispectra averaged for dt

Parameters:
  • avg_time (float) – bispectrum averaging timescale
  • return_type – data frame (‘df’) or recarray (‘rec’)
  • count (str) – If ‘min’, return minimal set of bispectra, if ‘max’ return all bispectra up to reordering
  • err_type (str) – ‘predicted’ or ‘measured’
  • num_samples – number of bootstrap (re)samples if measuring error
  • round_s (float) – accuracy of datetime object in seconds
  • snrcut (float) – flag bispectra with snr lower than this
add_camp(avg_time=0, return_type='rec', ctype='camp', count='max', debias=True, snrcut=0.0, err_type='predicted', num_samples=1000, round_s=0.1)[source]

Adds attribute self.camp or self.logcamp: closure amplitudes table

Parameters:
  • avg_time (float) – closure amplitude averaging timescale
  • return_type – data frame (‘df’) or recarray (‘rec’)
  • ctype (str) – The closure amplitude type (‘camp’ or ‘logcamp’)
  • debias (bool) – If True, debias the closure amplitude
  • count (str) – If ‘min’, return minimal set of amplitudes, if ‘max’ return all closure amplitudes up to inverses
  • err_type (str) – ‘predicted’ or ‘measured’
  • num_samples – number of bootstrap (re)samples if measuring error
  • round_s (float) – accuracy of datetime object in seconds
  • snrcut (float) – flag closure amplitudes with snr lower than this
add_cphase(avg_time=0, return_type='rec', count='max', snrcut=0.0, err_type='predicted', num_samples=1000, round_s=0.1, uv_min=False)[source]

Adds attribute self.cphase: cphase table averaged for dt

Parameters:
  • avg_time (float) – closure phase averaging timescale
  • return_type – data frame (‘df’) or recarray (‘rec’)
  • count (str) – If ‘min’, return minimal set of phases, if ‘max’ return all closure phases up to reordering
  • err_type (str) – ‘predicted’ or ‘measured’
  • num_samples – number of bootstrap (re)samples if measuring error
  • round_s (float) – accuracy of datetime object in seconds
  • snrcut (float) – flag closure phases with snr lower than this
add_fractional_noise(frac_noise, debias=False)[source]

Add a constant fraction of amplitude at quadrature to thermal noise. Effectively imposes a maximal signal-to-noise ratio. !!! this operation is not currently tracked and should be applied with extreme caution!!!

Parameters:
  • frac_noise (float) – The fraction of noise to add.
  • debias (bool) – Whether or not to add frac_noise of debiased amplitudes.
Returns:

An Obsdata object with the inflated noise values.

Return type:

(Obsdata)

add_leakage_noise(Dterm_amp=0.1, min_noise=0.01, debias=False)[source]

Add estimated systematic noise from leakage at quadrature to thermal noise. Requires cross-hand visibilities. !!! this operation is not currently tracked and should be applied with extreme caution!!!

Parameters:
  • Dterm_amp (float) – Estimated magnitude of leakage terms
  • min_noise (float) – Minimum fractional systematic noise to add
  • debias (bool) – Debias amplitudes before computing fractional noise
Returns:

An Obsdata object with the inflated noise values.

Return type:

(Obsdata)

add_logcamp(avg_time=0, return_type='rec', ctype='camp', count='max', debias=True, snrcut=0.0, err_type='predicted', num_samples=1000, round_s=0.1)[source]

Adds attribute self.logcamp: closure amplitudes table

Parameters:
  • avg_time (float) – closure amplitude averaging timescale
  • return_type – data frame (‘df’) or recarray (‘rec’)
  • ctype (str) – The closure amplitude type (‘camp’ or ‘logcamp’)
  • debias (bool) – If True, debias the closure amplitude
  • count (str) – If ‘min’, return minimal set of amplitudes, if ‘max’ return all closure amplitudes up to inverses
  • err_type (str) – ‘predicted’ or ‘measured’
  • num_samples – number of bootstrap (re)samples if measuring error
  • round_s (float) – accuracy of datetime object in seconds
  • snrcut (float) – flag closure amplitudes with snr lower than this
add_scans(info='self', filepath='', dt=0.0165, margin=0.0001)[source]

Compute scans and add self.scans to Obsdata object.

Parameters:
  • info (str) – ‘self’ to infer from data, ‘txt’ for text file, ‘vex’ for vex schedule file
  • filepath (str) – path to txt/vex file with scans info
  • dt (float) – minimal time interval between scans in hours
  • margin (float) – padding scans by that time margin in hours
avg_coherent(inttime, scan_avg=False)[source]

Coherently average data along u,v tracks in chunks of length inttime (sec)

Parameters:
  • inttime (float) – coherent integration time in seconds
  • scan_avg (bool) – if True, average over scans in self.scans instead of intime
Returns:

Obsdata object containing averaged data

Return type:

(Obsdata)

avg_incoherent(inttime, scan_avg=False, debias=True, err_type='predicted')[source]

Incoherently average data along u,v tracks in chunks of length inttime (sec)

Parameters:
  • inttime (float) – incoherent integration time in seconds
  • scan_avg (bool) – if True, average over scans in self.scans instead of intime
  • debias (bool) – if True, debias the averaged amplitudes
  • err_type (str) – ‘predicted’ or ‘measured’
Returns:

Obsdata object containing averaged data

Return type:

(Obsdata)

bispectra(vtype='vis', mode='all', count='min', timetype=False, uv_min=False, snrcut=0.0)[source]

Return a recarray of the equal time bispectra.

Parameters:
  • vtype (str) – The visibilty type from which to assemble bispectra (‘vis’, ‘qvis’, ‘uvis’,’vvis’,’rrvis’,’lrvis’,’rlvis’,’llvis’)
  • mode (str) – If ‘time’, return phases in a list of equal time arrays, if ‘all’, return all phases in a single array
  • count (str) – If ‘min’, return minimal set of bispectra, if ‘max’ return all bispectra up to reordering
  • timetype (str) – ‘GMST’ or ‘UTC’
  • uv_min (float) – flag baselines shorter than this before forming closure quantities
  • snrcut (float) – flag bispectra with snr lower than this
Returns:

A recarray of the bispectra values with datatype DTBIS

Return type:

(numpy.recarry)

bispectra_tri(site1, site2, site3, snrcut=0.0, vtype='vis', timetype=False, bs=[], force_recompute=False)[source]

Return complex bispectrum over time on a triangle (1-2-3).

Parameters:
  • site1 (str) – station 1 name
  • site2 (str) – station 2 name
  • site3 (str) – station 3 name
  • vtype (str) – The visibilty type from which to assemble bispectra (‘vis’,’qvis’,’uvis’,’vvis’,’pvis’)
  • timetype (str) – ‘UTC’ or ‘GMST’
  • snrcut (float) – flag bispectra with snr lower than this
  • bs (list) – optionally pass in the precomputed, time-sorted bispectra
  • force_recompute (bool) – if True, recompute bispectra instead of using saved data
Returns:

A recarray of the bispectra on this triangle with datatype DTBIS

Return type:

(numpy.recarry)

bllist(conj=False)[source]

Group the data in a list of same baseline datatables.

Parameters:conj (bool) – True if tlist_out includes conjugate baselines.
Returns:a list of data tables containing baseline-partitioned data
Return type:(list)
c_amplitudes(vtype='vis', mode='all', count='min', ctype='camp', debias=True, timetype=False, snrcut=0.0)[source]

Return a recarray of the equal time closure amplitudes.

Parameters:
  • vtype (str) – The visibilty type from which to assemble closure amplitudes (‘vis’,’qvis’,’uvis’,’vvis’,’pvis’)
  • ctype (str) – The closure amplitude type (‘camp’ or ‘logcamp’)
  • mode (str) – If ‘time’, return amplitudes in a list of equal time arrays, if ‘all’, return all amplitudes in a single array
  • count (str) – If ‘min’, return minimal set of amplitudes, if ‘max’ return all closure amplitudes up to inverses
  • debias (bool) – If True, debias the closure amplitude
  • timetype (str) – ‘GMST’ or ‘UTC’
  • snrcut (float) – flag closure amplitudes with snr lower than this
Returns:

A recarray of the closure amplitudes with datatype DTCAMP

Return type:

(numpy.recarry)

c_phases(vtype='vis', mode='all', count='min', ang_unit='deg', timetype=False, uv_min=False, snrcut=0.0)[source]

Return a recarray of the equal time closure phases.

Parameters:
  • vtype (str) – The visibilty type from which to assemble closure phases (‘vis’,’qvis’,’uvis’,’vvis’,’pvis’)
  • mode (str) – If ‘time’, return phases in a list of equal time arrays, if ‘all’, return all phases in a single array
  • count (str) – If ‘min’, return minimal set of phases, if ‘max’ return all closure phases up to reordering
  • ang_unit (str) – If ‘deg’, return closure phases in degrees, else return in radians
  • timetype (str) – ‘UTC’ or ‘GMST’
  • uv_min (float) – flag baselines shorter than this before forming closure quantities
  • snrcut (float) – flag bispectra with snr lower than this
Returns:

A recarray of the closure phases with datatype DTCPHASE

Return type:

(numpy.recarry)

camp_quad(site1, site2, site3, site4, snrcut=0.0, vtype='vis', ctype='camp', debias=True, timetype=False, camps=[], force_recompute=False)[source]

Return closure phase over time on a quadrange (1-2)(3-4)/(1-4)(2-3).

Parameters:
  • site1 (str) – station 1 name
  • site2 (str) – station 2 name
  • site3 (str) – station 3 name
  • site4 (str) – station 4 name
  • vtype (str) – The visibilty type from which to assemble closure amplitudes (‘vis’,’qvis’,’uvis’,’vvis’,’pvis’)
  • ctype (str) – The closure amplitude type (‘camp’ or ‘logcamp’)
  • debias (bool) – If True, debias the closure amplitude
  • timetype (str) – ‘UTC’ or ‘GMST’
  • snrcut (float) – flag closure amplitudes with snr lower than this
  • camps (list) – optionally pass in the time-sorted, precomputed camps
  • force_recompute (bool) – if True, recompute closure phases instead of using saved data
Returns:

A recarray of the closure amplitudes with datatype DTCAMP

Return type:

(numpy.recarry)

chisq(im_or_mov, dtype='vis', pol='I', ttype='nfft', mask=[], **kwargs)[source]

Give the reduced chi^2 of the observation for the specified image and datatype.

Parameters:
  • im_or_mov (Image or Movie) – image or movie object on which to test chi^2
  • dtype (str) – data type of chi^2 (e.g., ‘vis’, ‘amp’, ‘bs’, ‘cphase’)
  • pol (str) – polarization type (‘I’, ‘Q’, ‘U’, ‘V’, ‘LL’, ‘RR’, ‘LR’, or ‘RL’
  • mask (arr) – mask of same dimension as im.imvec
  • ttype (str) – “fast” or “nfft” or “direct”
  • fft_pad_factor (float) – zero pad the image to (fft_pad_factor * image size) in FFT
  • conv_func ('str') – The convolving function for gridding; ‘gaussian’, ‘pill’,’cubic’
  • p_rad (int) – The pixel radius for the convolving function
  • order ('str') – Interpolation order for sampling the FFT
  • systematic_noise (float) – adds a fractional systematic noise tolerance to sigmas
  • snrcut (float) – a snr cutoff for including data in the chi^2 sum
  • debias (bool) – if True then apply debiasing to amplitudes/closure amplitudes
  • weighting (str) – ‘natural’ or ‘uniform’
  • systematic_cphase_noise (float) – a value in degrees to add to the closure phase sigmas
  • cp_uv_min (float) – flag baselines shorter than this before forming closure quantities
  • maxset (bool) – if True, use maximal set instead of minimal for closure quantities
Returns:

image chi^2

Return type:

(float)

cleanbeam(npix, fov, pulse=<function trianglePulse2D>)[source]

Make an image of the observation clean beam.

Parameters:
  • npix (int) – The pixel size of the square output image.
  • fov (float) – The field of view of the square output image in radians.
  • pulse (function) – The function convolved with the pixel values for continuous image.
Returns:

an Image object with the clean beam.

Return type:

(Image)

copy()[source]

Copy the observation object.

Args:

Returns:a copy of the Obsdata object.
Return type:(Obsdata)
cphase_tri(site1, site2, site3, snrcut=0.0, vtype='vis', ang_unit='deg', timetype=False, cphases=[], force_recompute=False)[source]

Return closure phase over time on a triangle (1-2-3).

Parameters:
  • site1 (str) – station 1 name
  • site2 (str) – station 2 name
  • site3 (str) – station 3 name
  • vtype (str) – The visibilty type from which to assemble closure phases (‘vis’,’qvis’,’uvis’,’vvis’,’pvis’)
  • ang_unit (str) – If ‘deg’, return closure phases in degrees, else return in radians
  • timetype (str) – ‘GMST’ or ‘UTC’
  • snrcut (float) – flag bispectra with snr lower than this
  • cphases (list) – optionally pass in the precomputed time-sorted cphases
  • force_recompute (bool) – if True, recompute closure phases instead of using saved data
Returns:

A recarray of the closure phases with datatype DTCPHASE

Return type:

(numpy.recarry)

data_conj()[source]

Make a data array including all conjugate baselines.

Args:

Returns:a copy of the Obsdata.data table including all conjugate baselines.
Return type:(numpy.recarray)
deblur()[source]

Deblur the observation obs by dividing by the Sgr A* scattering kernel.

Args:

Returns:a new deblurred observation object.
Return type:(Obsdata)
dirtybeam(npix, fov, pulse=<function trianglePulse2D>, weighting='uniform')[source]

Make an image of the observation dirty beam.

Parameters:
  • npix (int) – The pixel size of the square output image.
  • fov (float) – The field of view of the square output image in radians.
  • pulse (function) – The function convolved with the pixel values for continuous image.
  • weighting (str) – ‘uniform’ or ‘natural’
Returns:

an Image object with the dirty beam.

Return type:

(Image)

dirtyimage(npix, fov, pulse=<function trianglePulse2D>, weighting='uniform')[source]

Make the observation dirty image (direct Fourier transform).

Parameters:
  • npix (int) – The pixel size of the square output image.
  • fov (float) – The field of view of the square output image in radians.
  • pulse (function) – The function convolved with the pixel values for continuous image.
  • weighting (str) – ‘uniform’ or ‘natural’
Returns:

an Image object with dirty image.

Return type:

(Image)

estimate_noise_rescale_factor(max_diff_sec=0.0, min_num=10, median_snr_cut=0, count='max', vtype='vis', print_std=False)[source]

Estimate a constant noise rescaling factor on all baselines, times, and polarizations. Uses pairwise differences of closure phases relative to the expected scatter. This is useful for AIPS data, which has a missing factor relating ‘weights’ to noise.

Parameters:
  • max_diff_sec (float) – The maximum difference of adjacent closure phases (in seconds) If 0, auto-estimates this value to twice the median scan length.
  • min_num (int) – The minimum number of closure phase differences for a triangle to be included in the set of estimators.
  • median_snr_cut (float) – Do not include a triangle if its median SNR is below this
  • count (str) – If ‘min’, use minimal set of phases, if ‘max’ use all closure phases up to reordering
  • vtype (str) – Visibility type (e.g., ‘vis’, ‘llvis’, ‘rrvis’, etc.)
  • print_std (bool) – Whether or not to print the std dev. for each closure triangle.
Returns:

The rescaling factor.

Return type:

(float)

filter_subscan_dropouts(perc=0, return_type='rec')[source]

Fancy filtration that drops data to ensure that we only average parts with same timestamp. Potentially this could reduce risk of non-closing errors.

Args:
perc (float): drop baseline from scan if it has less than this fraction
of median baseline observation time during the scan

return_type (str): data frame (‘df’) or recarray (‘rec’)

Returns:
(Obsdata): a observation object with flagged data points removed
find_amt_fractional_noise(im, dtype='vis', target=1.0, debias=False, maxiter=200, ftol=1e-20, gtol=1e-20)[source]

Returns the amount of fractional sys error necessary to make the image have a chisq close to the targeted value (1.0)

fit_beam(weighting='uniform', units='rad')[source]

Fit a Gaussian to the dirty beam and return the parameters (fwhm_maj, fwhm_min, theta).

Parameters:
  • weighting (str) – ‘uniform’ or ‘natural’.
  • units (string) – ‘rad’ returns values in radians, ‘natural’ returns FWHMs in uas and theta in degrees
Returns:

a tuple (fwhm_maj, fwhm_min, theta) of the dirty beam parameters in radians.

Return type:

(tuple)

fit_gauss(flux=1.0, fittype='amp', paramguess=(4.848136811094136e-10, 4.848136811094136e-10, 0.0))[source]

Fit a gaussian to either Stokes I complex visibilities or Stokes I visibility amplitudes.

Parameters:
  • flux (float) – total flux in the fitted gaussian
  • fitttype (str) – “amp” to fit to visibilty amplitudes
  • paramguess (tuble) – initial guess of fit Gaussian (fwhm_maj, fwhm_min, theta)
Returns:

(fwhm_maj, fwhm_min, theta) of the fit Gaussian parameters in radians.

Return type:

(tuple)

flag_UT_range(UT_start_hour=0.0, UT_stop_hour=0.0, flag_type='all', flag_what='', output='kept')[source]

Flag data points within a certain UT range

Parameters:
  • UT_start_hour (float) – start of time window
  • UT_stop_hour (float) – end of time window
  • flag_type (str) – ‘all’, ‘baseline’, or ‘station’
  • flag_what (str) – baseline or station to flag
  • output (str) – returns ‘kept’, ‘flagged’, or ‘both’ (a dictionary)
Returns:

a observation object with flagged data points removed

Return type:

(Obsdata)

flag_anomalous(field='snr', max_diff_seconds=100, robust_nsigma_cut=5, output='kept')[source]

Flag anomalous data points

Parameters:
  • field (str) – The quantity to test for
  • max_diff_seconds (float) – The moving window size for testing outliers
  • robust_nsigma_cut (float) – Outliers further than this from the mean are removed
  • output (str) – returns ‘kept’, ‘flagged’, or ‘both’ (a dictionary)
Returns:

a observation object with flagged data points removed

Return type:

(Obsdata)

flag_bl(sites, output='kept')[source]

Flag data points that include the specified baseline

Parameters:
  • sites (list) – baseline to remove from the data
  • output (str) – returns ‘kept’, ‘flagged’, or ‘both’ (a dictionary)
Returns:

a observation object with flagged data points removed

Return type:

(Obsdata)

flag_elev(elev_min=0.0, elev_max=90, output='kept')[source]

Flag visibilities for which either station is outside a stated elevation range

Parameters:
  • elev_min (float) – Minimum elevation (deg)
  • elev_max (float) – Maximum elevation (deg)
  • output (str) – returns ‘kept’, ‘flagged’, or ‘both’ (a dictionary)
Returns:

a observation object with flagged data points removed

Return type:

(Obsdata)

flag_high_sigma(sigma_cut=0.005, sigma_type='sigma', output='kept')[source]

Flag high sigma (thermal noise on Stoke I) data points

Parameters:
  • sigma_cut (float) – remove points with sigma higher than this
  • sigma_type (str) – sigma type (sigma, rrsigma, llsigma, etc.)
  • output (str) – returns ‘kept’, ‘flagged’, or ‘both’ (a dictionary)
Returns:

a observation object with flagged data points removed

Return type:

(Obsdata)

flag_large_fractional_pol(max_fractional_pol=1.0, output='kept')[source]

Flag visibilities for which the fractional polarization is above a specified threshold

Parameters:
  • max_fractional_pol (float) – Maximum fractional polarization
  • output (str) – returns ‘kept’, ‘flagged’, or ‘both’ (a dictionary)
Returns:

a observation object with flagged data points removed

Return type:

(Obsdata)

flag_low_snr(snr_cut=3, output='kept')[source]

Flag low snr data points

Parameters:
  • snr_cut (float) – remove points with snr lower than this
  • output (str) – returns ‘kept’, ‘flagged’, or ‘both’ (a dictionary)
Returns:

a observation object with flagged data points removed

Return type:

(Obsdata)

flag_sites(sites, output='kept')[source]

Flag data points that include the specified sites

Parameters:
  • sites (list) – list of sites to remove from the data
  • output (str) – returns ‘kept’, ‘flagged’, or ‘both’ (a dictionary)
Returns:

a observation object with flagged data points removed

Return type:

(Obsdata)

flag_uvdist(uv_min=0.0, uv_max=1000000000000.0, output='kept')[source]

Flag data points outside a given uv range

Parameters:
  • uv_min (float) – remove points with uvdist less than this
  • uv_max (float) – remove points with uvdist greater than this
  • output (str) – returns ‘kept’, ‘flagged’, or ‘both’ (a dictionary)
Returns:

a observation object with flagged data points removed

Return type:

(Obsdata)

flags_from_file(flagfile, flag_type='station')[source]

Flagging data based on csv file

Parameters:flagfile – path to csv file with mjds of flagging start / stop time, and optionally baseline / stations
Returns:a observation object with flagged data points removed
Return type:(Obsdata)
obsdata_args()[source]

“Copy arguments for making a new Obsdata into a list and dictonary

plot_bl(site1, site2, field, debias=True, ang_unit='deg', timetype=False, axis=False, rangex=False, rangey=False, snrcut=0.0, color=(0.11764705882352941, 0.5647058823529412, 1.0), marker='o', markersize=3, label=None, grid=True, ebar=True, axislabels=True, legend=False, show=True, export_pdf='')[source]

Plot a field over time on a baseline site1-site2.

Parameters:
  • site1 (str) – station 1 name
  • site2 (str) – station 2 name
  • field (str) – y-axis field (from FIELDS)
  • debias (bool) – If True, debias amplitudes.
  • ang_unit (str) – phase unit ‘deg’ or ‘rad’
  • timetype (str) – ‘GMST’ or ‘UTC’
  • axis (matplotlib.axes.Axes) – add plot to this axis
  • rangex (list) – [xmin, xmax] x-axis limits
  • rangey (list) – [ymin, ymax] y-axis limits
  • color (str) – color for scatterplot points
  • marker (str) – matplotlib plot marker
  • markersize (int) – size of plot markers
  • label (str) – plot legend label
  • grid (bool) – Plot gridlines if True
  • ebar (bool) – Plot error bars if True
  • axislabels (bool) – Show axis labels if True
  • legend (bool) – Show legend if True
  • show (bool) – Display the plot if true
  • export_pdf (str) – path to pdf file to save figure
Returns:

Axes object with data plot

Return type:

(matplotlib.axes.Axes)

plot_camp(site1, site2, site3, site4, vtype='vis', ctype='camp', camps=[], force_recompute=False, debias=False, timetype=False, snrcut=0.0, axis=False, rangex=False, rangey=False, color=(0.11764705882352941, 0.5647058823529412, 1.0), marker='o', markersize=3, label=None, grid=True, ebar=True, axislabels=True, legend=False, show=True, export_pdf='')[source]

Plot closure amplitude over time on a quadrangle (1-2)(3-4)/(1-4)(2-3).

Parameters:
  • site1 (str) – station 1 name
  • site2 (str) – station 2 name
  • site3 (str) – station 3 name
  • site4 (str) – station 4 name
  • vtype (str) – The visibilty type from which to assemble closure amplitudes (‘vis’,’qvis’,’uvis’,’vvis’,’pvis’)
  • ctype (str) – The closure amplitude type (‘camp’ or ‘logcamp’)
  • camps (list) – optionally pass in camps so they don’t have to be recomputed
  • force_recompute (bool) – if True, recompute camps instead of using stored data
  • snrcut (float) – flag closure amplitudes with snr lower than this
  • debias (bool) – If True, debias the closure amplitude
  • timetype (str) – ‘GMST’ or ‘UTC’
  • axis (matplotlib.axes.Axes) – amake_cdd plot to this axis
  • rangex (list) – [xmin, xmax] x-axis limits
  • rangey (list) – [ymin, ymax] y-axis limits
  • color (str) – color for scatterplot points
  • marker (str) – matplotlib plot marker
  • markersize (int) – size of plot markers
  • label (str) – plot legend label
  • grid (bool) – Plot gridlines if True
  • ebar (bool) – Plot error bars if True
  • axislabels (bool) – Show axis labels if True
  • legend (bool) – Show legend if True
  • show (bool) – Display the plot if True
  • export_pdf (str) – path to pdf file to save figure
Returns:

Axes object with data plot

Return type:

(matplotlib.axes.Axes)

plot_cphase(site1, site2, site3, vtype='vis', cphases=[], force_recompute=False, ang_unit='deg', timetype=False, snrcut=0.0, axis=False, rangex=False, rangey=False, color=(0.11764705882352941, 0.5647058823529412, 1.0), marker='o', markersize=3, label=None, grid=True, ebar=True, axislabels=True, legend=False, show=True, export_pdf='')[source]

Plot a closure phase over time on a triangle site1-site2-site3.

Parameters:
  • site1 (str) – station 1 name
  • site2 (str) – station 2 name
  • site3 (str) – station 3 name
  • vtype (str) – The visibilty type from which to assemble closure phases (‘vis’,’qvis’,’uvis’,’vvis’,’pvis’)
  • cphases (list) – optionally pass in the prcomputed, time-sorted closure phases
  • force_recompute (bool) – if True, recompute closure phases instead of using stored data
  • snrcut (float) – flag closure amplitudes with snr lower than this
  • ang_unit (str) – phase unit ‘deg’ or ‘rad’
  • timetype (str) – ‘GMST’ or ‘UTC’
  • axis (matplotlib.axes.Axes) – add plot to this axis
  • rangex (list) – [xmin, xmax] x-axis limits
  • rangey (list) – [ymin, ymax] y-axis limits
  • color (str) – color for scatterplot points
  • marker (str) – matplotlib plot marker
  • markersize (int) – size of plot markers
  • label (str) – plot legend label
  • grid (bool) – Plot gridlines if True
  • ebar (bool) – Plot error bars if True
  • axislabels (bool) – Show axis labels if True
  • legend (bool) – Show legend if True
  • show (bool) – Display the plot if True
  • export_pdf (str) – path to pdf file to save figure
Returns:

Axes object with data plot

Return type:

(matplotlib.axes.Axes)

plotall(field1, field2, conj=False, debias=True, tag_bl=False, ang_unit='deg', timetype=False, axis=False, rangex=False, rangey=False, snrcut=0.0, color=(0.11764705882352941, 0.5647058823529412, 1.0), marker='o', markersize=3, label=None, grid=True, ebar=True, axislabels=True, legend=False, show=True, export_pdf='')[source]

Plot two fields against each other.

Parameters:
  • field1 (str) – x-axis field (from FIELDS)
  • field2 (str) – y-axis field (from FIELDS)
  • conj (bool) – Plot conjuage baseline data points if True
  • debias (bool) – If True, debias amplitudes.
  • tag_bl (bool) – if True, label each baseline
  • ang_unit (str) – phase unit ‘deg’ or ‘rad’
  • timetype (str) – ‘GMST’ or ‘UTC’
  • axis (matplotlib.axes.Axes) – add plot to this axis
  • rangex (list) – [xmin, xmax] x-axis limits
  • rangey (list) – [ymin, ymax] y-axis limits
  • color (str) – color for scatterplot points
  • marker (str) – matplotlib plot marker
  • markersize (int) – size of plot markers
  • label (str) – plot legend label
  • snrcut (float) – flag closure amplitudes with snr lower than this
  • grid (bool) – Plot gridlines if True
  • ebar (bool) – Plot error bars if True
  • axislabels (bool) – Show axis labels if True
  • legend (bool) – Show legend if True
  • show (bool) – Display the plot if true
  • export_pdf (str) – path to pdf file to save figure
Returns:

Axes object with data plot

Return type:

(matplotlib.axes.Axes)

polchisq(im, dtype='pvis', ttype='nfft', pol_prim='amp_phase', mask=[], **kwargs)[source]

Give the reduced chi^2 for the specified image and polarimetric datatype.

Parameters:
  • im (Image) – image to test polarimetric chi^2
  • dtype (str) – data type of polarimetric chi^2 (‘pvis’,’m’,’pbs’)
  • pol (str) – polarization type (‘I’, ‘Q’, ‘U’, ‘V’, ‘LL’, ‘RR’, ‘LR’, or ‘RL’
  • mask (arr) – mask of same dimension as im.imvec
  • ttype (str) – if “fast” or “nfft” or “direct”
  • pol_prim (str) – “amp_phase” I,m,chi “qu” for IQU, “qu_frac” for I,Q/I,U/I
  • fft_pad_factor (float) – zero pad the image to (fft_pad_factor * image size) in FFT
  • conv_func ('str') – The convolving function for gridding; ‘gaussian’, ‘pill’,’cubic’
  • p_rad (int) – The pixel radius for the convolving function
  • order ('str') – Interpolation order for sampling the FFT
  • systematic_noise (float) – adds a fractional systematic noise tolerance to sigmas
  • snrcut (float) – a snr cutoff for including data in the chi^2 sum
  • debias (bool) – if True then apply debiasing to amplitudes/closure amplitudes
  • weighting (str) – ‘natural’ or ‘uniform’
  • systematic_cphase_noise (float) – a value in degrees to add to the closure phase sigmas
  • cp_uv_min (float) – flag baselines shorter than this before forming closure quantities
  • maxset (bool) – if True, use maximal set instead of minimal for closure quantities
Returns:

image chi^2

Return type:

(float)

recompute_uv()[source]

Recompute u,v points using observation times and metadata

Args:

Returns:New Obsdata object containing the same data with recomputed u,v points
Return type:(Obsdata)
reorder_baselines()[source]

Reorder baselines to match uvfits convention, based on the telescope array ordering

reorder_tarr_random()[source]

Randomly reorder the telescope array.

reorder_tarr_sefd()[source]

Reorder the telescope array by SEFD minimal to maximum.

reorder_tarr_snr()[source]

Reorder the telescope array by median SNR maximal to minimal.

res()[source]

Return the nominal resolution (1/longest baseline) of the observation in radians.

Args:

Returns:normal array resolution in radians
Return type:(float)
rescale_noise(noise_rescale_factor=1.0)[source]

Rescale the thermal noise on all Stokes parameters by a constant factor. This is useful for AIPS data, which has a missing factor relating ‘weights’ to noise.

Parameters:noise_rescale_factor (float) – The number to multiple the existing sigmas by.
Returns:An Obsdata object with the rescaled noise values.
Return type:(Obsdata)
rescale_zbl(totflux, uv_max, debias=True)[source]

Rescale the short baselines to a new level of total flux.

Parameters:
  • totflux (float) – new total flux to rescale to
  • uv_max (float) – maximum baseline length to rescale
  • debias (bool) – Debias amplitudes before computing original total flux from short bls
Returns:

An Obsdata object with the inflated noise values.

Return type:

(Obsdata)

reverse_taper(fwhm)[source]

Reverse taper the observation with a circular Gaussian kernel

Parameters:fwhm (float) – real space fwhm size of convolution kernel in radian
Returns:a new reverse-tapered observation object
Return type:(Obsdata)
reweight(uv_radius, weightdist=1.0)[source]

Reweight the sigmas based on the local density of uv points

Parameters:
  • uv_radius (float) – radius in uv-plane to look for nearby points
  • weightdist (float) –

    ??

Returns:

a new reweighted observation object.

Return type:

(Obsdata)

save_oifits(fname, flux=1.0)[source]

Save visibility data to oifits. Polarization data is NOT saved.

Parameters:
  • fname (str) – path to output text file
  • flux (float) – normalization total flux
save_txt(fname)[source]

Save visibility data to a text file.

Parameters:fname (str) – path to output text file
save_uvfits(fname, force_singlepol=False, polrep_out='circ')[source]

Save visibility data to uvfits file.

Parameters:
  • fname (str) – path to output text file
  • force_singlepol (str) – if ‘R’ or ‘L’, will interpret stokes I field as ‘RR’ or ‘LL’
  • polrep_out (str) – ‘circ’ or ‘stokes’: how data should be stored in the uvfits file
sourcevec()[source]

Return the source position vector in geocentric coordinates at 0h GMST.

Args:

Returns:normal vector pointing to source in geocentric coordinates (m)
Return type:(numpy.array)
split_obs()[source]

Split single observation into multiple observation files, one per scan.

Args:

Returns:list of single-scan Obsdata objects
Return type:(list)
switch_polrep(polrep_out='stokes', allow_singlepol=True, singlepol_hand='R')[source]

Return a new observation with the polarization representation changed

Parameters:
  • polrep_out (str) – the polrep of the output data
  • allow_singlepol (bool) – If True, treat single-polarization data as Stokes I when converting from ‘circ’ polrep to ‘stokes’
  • singlepol_hand (str) – ‘R’ or ‘L’; determines which parallel-hand is assumed when converting ‘stokes’ to ‘circ’ if only I is present
Returns:

new Obsdata object with potentially different polrep

Return type:

(Obsdata)

switch_timetype(timetype_out='UTC')[source]

Return a new observation with the time type switched

Parameters:timetype (str) – “UTC” or “GMST”
Returns:new Obsdata object with potentially different timetype
Return type:(Obsdata)
taper(fwhm)[source]

Taper the observation with a circular Gaussian kernel

Parameters:fwhm (float) – real space fwhm size of convolution kernel in radian
Returns:a new tapered observation object
Return type:(Obsdata)
tlist(conj=False, t_gather=0.0, scan_gather=False)[source]

Group the data in a list of equal time observation datatables.

Parameters:
  • conj (bool) – True if tlist_out includes conjugate baselines.
  • t_gather (float) – Grouping timescale (in seconds). 0.0 indicates no grouping.
  • scan_gather (bool) – If true, gather data into scans
Returns:

a list of data tables containing time-partitioned data

Return type:

(list)

unpack(fields, mode='all', ang_unit='deg', debias=False, conj=False, timetype=False)[source]

Unpack the data for the whole observation .

Parameters:
  • fields (list) – list of unpacked quantities from availalbe quantities in FIELDS
  • mode (str) – ‘all’ returns all data in single table, ‘time’ groups output by equal time, ‘bl’ groups by baseline
  • ang_unit (str) – ‘deg’ for degrees and ‘rad’ for radian phases
  • debias (bool) – True to debias visibility amplitudes
  • conj (bool) – True to include conjugate baselines
  • timetype (str) – ‘GMST’ or ‘UTC’ changes what is returned for ‘time’
Returns:

unpacked numpy array with data in fields requested

Return type:

(numpy.recarray)

unpack_bl(site1, site2, fields, ang_unit='deg', debias=False, timetype=False)[source]

Unpack the data over time on the selected baseline site1-site2.

Parameters:
  • site1 (str) – First site name
  • site2 (str) – Second site name
  • fields (list) – list of unpacked quantities from available quantities in FIELDS
  • ang_unit (str) – ‘deg’ for degrees and ‘rad’ for radian phases
  • debias (bool) – True to debias visibility amplitudes
  • timetype (str) – ‘GMST’ or ‘UTC’ changes what is returned for ‘time’
Returns:

unpacked numpy array with data in fields requested

Return type:

(numpy.recarray)

unpack_dat(data, fields, conj=False, ang_unit='deg', debias=False, timetype=False)[source]

Unpack the data in a passed data recarray.

Parameters:
  • data (numpy.recarray) – data recarray of format DTPOL_STOKES or DTPOL_CIRC
  • fields (list) – list of unpacked quantities from availalbe quantities in FIELDS
  • conj (bool) – True to include conjugate baselines
  • ang_unit (str) – ‘deg’ for degrees and ‘rad’ for radian phases
  • debias (bool) – True to debias visibility amplitudes
  • timetype (str) – ‘GMST’ or ‘UTC’ changes what is returned for ‘time’
Returns:

unpacked numpy array with data in fields requested

Return type:

(numpy.recarray)

ehtim.obsdata.load_maps(arrfile, obsspec, ifile, qfile=0, ufile=0, vfile=0, src='SgrA', mjd=51544, ampcal=False, phasecal=False)[source]

Read an observation from a maps text file and return an Obsdata object.

Parameters:
  • arrfile (str) – path to input array file
  • obsspec (str) – path to input obs spec file
  • ifile (str) – path to input Stokes I data file
  • qfile (str) – path to input Stokes Q data file
  • ufile (str) – path to input Stokes U data file
  • vfile (str) – path to input Stokes V data file
  • src (str) – source name
  • mjd (int) – integer observation MJD
  • ampcal (bool) – True if amplitude calibrated
  • phasecal (bool) – True if phase calibrated
Returns:

Obsdata object loaded from file

Return type:

obs (Obsdata)

ehtim.obsdata.load_oifits(fname, flux=1.0)[source]

Load data from an oifits file. Does NOT currently support polarization.

Parameters:
  • fname (str) – path to input text file
  • flux (float) – normalization total flux
Returns:

Obsdata object loaded from file

Return type:

obs (Obsdata)

ehtim.obsdata.load_txt(fname, polrep='stokes')[source]

Read an observation from a text file. :param fname: path to input text file :type fname: str :param polrep: load data as either ‘stokes’ or ‘circ’ :type polrep: str

Returns:Obsdata object loaded from file
Return type:obs (Obsdata)
ehtim.obsdata.load_uvfits(fname, flipbl=False, remove_nan=False, force_singlepol=None, channel=<built-in function all>, IF=<built-in function all>, polrep='stokes', allow_singlepol=True)[source]

Load observation data from a uvfits file. :param fname: path to input text file :type fname: str :param flipbl: flip baseline phases if True. :type flipbl: bool :param remove_nan: True to remove nans from missing polarizations :type remove_nan: bool :param polrep: load data as either ‘stokes’ or ‘circ’ :type polrep: str :param force_singlepol: ‘R’ or ‘L’ to load only 1 polarization :type force_singlepol: str :param channel: list of channels to average in the import. channel=all averages all :type channel: list :param IF: list of IFs to average in the import. IF=all averages all IFS :type IF: list

Returns:Obsdata object loaded from file
Return type:obs (Obsdata)
ehtim.obsdata.merge_obs(obs_List, force_merge=False)[source]

Merge a list of observations into a single observation file.

Parameters:
  • obs_List (list) – list of split observation Obsdata objects.
  • force_merge (bool) – forces the observations to merge even if parameters are different
Returns:

merged Obsdata object containing all scans in input list

Return type:

mergeobs (Obsdata)