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, trial_speedups=False)[source]

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

source

The source name

Type

str

ra

The source Right Ascension in fractional hours

Type

float

dec

The source declination in fractional degrees

Type

float

mjd

The integer MJD of the observation

Type

int

tstart

The start time of the observation in hours

Type

float

tstop

The end time of the observation in hours

Type

float

rf

The observation frequency in Hz

Type

float

bw

The observation bandwidth in Hz

Type

float

timetype

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

Type

str

polrep

polarization representation, either ‘stokes’ or ‘circ’

Type

str

tarr

The array of telescope data with datatype DTARR

Type

numpy.recarray

tkey

A dictionary of rows in the tarr for each site name

Type

dict

data

the basic data with datatype DTPOL_STOKES or DTPOL_CIRC

Type

numpy.recarray

scantable

The array of scan information

Type

numpy.recarray

ampcal

True if amplitudes calibrated

Type

bool

phasecal

True if phases calibrated

Type

bool

opacitycal

True if time-dependent opacities correctly accounted for in sigmas

Type

bool

frcal

True if feed rotation calibrated out of visibilities

Type

bool

dcal

True if D terms calibrated out of visibilities

Type

bool

amp

An array of (averaged) visibility amplitudes

Type

numpy.recarray

bispec

An array of (averaged) bispectra

Type

numpy.recarray

cphase

An array of (averaged) closure phases

Type

numpy.recarray

cphase_diag

An array of (averaged) diagonalized closure phases

Type

numpy.recarray

camp

An array of (averaged) closure amplitudes

Type

numpy.recarray

logcamp

An array of (averaged) log closure amplitudes

Type

numpy.recarray

logcamp_diag

An array of (averaged) diagonalized log closure amps

Type

numpy.recarray

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_cphase_diag(avg_time=0, return_type='rec', vtype='vis', count='min', snrcut=0.0, err_type='predicted', num_samples=1000, round_s=0.1, uv_min=False)[source]

Adds attribute self.cphase_diag: cphase_diag table averaged for dt

Parameters
  • avg_time (float) – closure phase averaging timescale

  • return_type – data frame (‘df’) or recarray (‘rec’)

  • vtype (str) – Visibility type (e.g., ‘vis’, ‘llvis’, ‘rrvis’, etc.)

  • 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_logcamp_diag(avg_time=0, return_type='rec', count='min', snrcut=0.0, debias=True, err_type='predicted', num_samples=1000, round_s=0.1)[source]

Adds attribute self.logcamp_diag: logcamp_diag table averaged for dt

Parameters
  • avg_time (float) – diagonal log closure amplitude averaging timescale

  • return_type – data frame (‘df’) or recarray (‘rec’)

  • debias (bool) – If True, debias the diagonal log closure amplitude

  • count (str) – If ‘min’, return minimal set of amplitudes, If ‘max’ return all diagonal log 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 diagonal log 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, moving=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

  • moving (bool) – averaging with moving window (boxcar width in seconds)

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, vtype='vis', timetype=False, snrcut=0.0, method='from_maxset', 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

  • method (str) – ‘from_maxset’ (old, default), ‘from_vis’ (new, more robust)

  • 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_log_amplitudes_diag(vtype='vis', mode='all', count='min', debias=True, timetype=False, snrcut=0.0)[source]

Return a recarray of the equal time diagonalized log closure amplitudes.

Parameters
  • vtype (str) – The visibilty type (‘vis’,’qvis’,’uvis’,’vvis’,’pvis’) From which to assemble closure amplitudes

  • 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 - The individual visibility amplitudes are always debiased.

  • timetype (str) – ‘GMST’ or ‘UTC’

  • snrcut (float) – flag closure amplitudes with snr lower than this

Returns

A recarray of diagonalized closure amps with datatype DTLOGCAMPDIAG

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)

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

Return a recarray of the equal time diagonalized closure phases.

Parameters
  • vtype (str) – The visibilty type (‘vis’,’qvis’,’uvis’,’vvis’,’pvis’) from which to assemble closure phases

  • count (str) – If ‘min’, return minimal set of phases, If ‘min-cut0bl’ return minimal set after flagging zero-baselines

  • 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 diagonalized closure phases (datatype DTCPHASEDIAG),

along with associated triangles and transformation matrices

Return type

(numpy.recarry)

camp_quad(site1, site2, site3, site4, vtype='vis', ctype='camp', debias=True, timetype=False, snrcut=0.0, method='from_maxset', 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

  • method (str) – ‘from_maxset’ (old, default), ‘from_vis’ (new, more robust)

  • camps (list) – optionally pass in the time-sorted, precomputed camps

  • force_recompute (bool) – if True, do not use save closure amplitude 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 closure phase sigmas

  • cp_uv_min (float) – flag short baselines 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, vtype='vis', ang_unit='deg', timetype=False, snrcut=0.0, method='from_maxset', 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 (e.g., ‘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

  • method (str) – ‘from_maxset’ (old, default), ‘from_vis’ (new, more robust)

  • cphases (list) – optionally pass in the precomputed time-sorted cphases

  • force_recompute (bool) – if True, do not use save closure phase tables

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 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]

Filtration to drop data and ensure that we only average parts with same timestamp. Potentially this could reduce risk of non-closing errors.

Parameters
  • 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

a observation object with flagged data points removed

Return type

(Obsdata)

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)

getClosestScan(time, splitObs=None)[source]

Split observation by scan and grab scan closest to timestamp

Parameters
  • time (float) – Time (GMST) you want to find the scan closest to

  • splitObs – a list of Obsdata objects, output from split_obs, to save time

make_hdulist(force_singlepol=False, polrep_out='circ')[source]

Returns an hdulist in the same format as in a saved .uvfits file. :param force_singlepol: if ‘R’ or ‘L’, will interpret stokes I field as ‘RR’ or ‘LL’ :type force_singlepol: str :param polrep_out: ‘circ’ or ‘stokes’: how data should be stored in the uvfits file :type polrep_out: str

Returns

hdulist (astropy.io.fits.HDUList)

obsdata_args()[source]

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

plot_bl(site1, site2, field, debias=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 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, do not use stored closure phase able

  • 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=False, 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_trans=True, 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_trans (bool) – True for I,m,chi, False for IQU

  • 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) – value in degrees to add to closure phase sigmas

  • cp_uv_min (float) – flag short baselines 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(trial_speedups=False)[source]

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

reorder_baselines_trial_speedups()[source]

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

reorder_tarr_random(reorder_baselines=True)[source]

Randomly reorder the telescope array.

reorder_tarr_sefd(reorder_baselines=True)[source]

Reorder the telescope array by SEFD minimal to maximum.

reorder_tarr_snr(reorder_baselines=True)[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. :param fname: path to output uvfits file. :type fname: str :param force_singlepol: if ‘R’ or ‘L’, will interpret stokes I field as ‘RR’ or ‘LL’ :type force_singlepol: str :param polrep_out: ‘circ’ or ‘stokes’: how data should be stored in the uvfits file :type polrep_out: str

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(t_gather=0.0, scan_gather=False)[source]

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

Parameters
  • t_gather (float) – Grouping timescale (in seconds). 0.0 indicates no grouping.

  • scan_gather – If true, gather data into scans

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_obs(fname, polrep='stokes', flipbl=False, remove_nan=False, force_singlepol=None, channel=<built-in function all>, IF=<built-in function all>, allow_singlepol=True, flux=1.0, obsspec=None, ifile=None, qfile=None, ufile=None, vfile=None, src='SgrA', mjd=51544, ampcal=False, phasecal=False)[source]

Smart obs read-in, detects file type and loads appropriately.

Parameters
  • fname (str) – path to input text file

  • polrep (str) – load data as either ‘stokes’ or ‘circ’

  • flipbl (bool) – flip baseline phases if True.

  • remove_nan (bool) – True to remove nans from missing polarizations

  • polrep – load data as either ‘stokes’ or ‘circ’

  • force_singlepol (str) – ‘R’ or ‘L’ to load only 1 polarization

  • channel (list) – list of channels to average in the import. channel=all averages all

  • IF (list) – list of IFs to average in the import. IF=all averages all IFS

  • flux (float) – normalization total flux

  • 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.

Parameters
  • fname (str) – path to input text file

  • polrep (str) – load data as either ‘stokes’ or ‘circ’

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, ignore_pzero_date=True, trial_speedups=False)[source]

Load observation data from a uvfits file.

Parameters
  • fname (str or HDUList) – path to input text file or HDUList object

  • flipbl (bool) – flip baseline phases if True.

  • remove_nan (bool) – True to remove nans from missing polarizations

  • polrep (str) – load data as either ‘stokes’ or ‘circ’

  • force_singlepol (str) – ‘R’ or ‘L’ to load only 1 polarization

  • channel (list) – list of channels to average in the import. channel=all averages all

  • IF (list) – list of IFs to average in the import. IF=all averages all IFS

  • remove_nan – whether or not to remove entries with nan data

  • ignore_pzero_date (bool) – if True, ignore the offset parameters in DATE field TODO: what is the correct behavior per AIPS memo 117?

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)