LWA Swarm Observations

Interferometer Definition Files

Module that contains all of the relevant class to build up a representation of a interferometer definition file. The hierarchy of classes is:

  • Project - class that holds all of the information about the project (including

    the observer) and one or more runs. Technically, a ID file has only one run but this approach allows for the generation of multiple SD files from a single Project object.

  • Observer - class that hold the observer’s name and numeric ID

  • Run - class that holds all of the scans associated and the associated

    correlator setup for a with a particular interferometer run

  • Scan - class that hold information about a particular scan. It

    includes a variety of attributes that are used to convert human- readable inputs to SDF data values. The scan class is further subclasses into:

    • DRX - class for general DRX scan, with sub-classes: * Solar - class for solar tracking * Jovian - class for Jovian tracking

Most class contain ‘validate’ attribute functions that can be used to determine if the project/run/scan are valid or not given the constraints of the ADP system.

In addition to providing the means for creating interferometer definition files from scratch, this module also includes a simple parser for ID files.

Changed in version 2.0.0: Added support for astropy.time.Time and astropy.coordinates.Angle instances

New in version 1.2.4.

Run Structure

Similar to the lsl.common.sdf module, lsl.common.idf provides a means to represent a set of scans using the LWA Swarm interferometer as Python objects. For each lsl.common.idf.Project, there is:

  1. An observer (lsl.common.idf.Observer)

  2. The project office comments (lsl.common.idf.ProjectOffice)

  3. A single run that defines the IDF (lsl.common.idf.Run)

The run contains one or more scans (lsl.common.idf.Scan). Each observing mode supported by the LWA Swarm is sub-classed (see below).

class lsl.common.idf.Project(observer, name, id, runs=None, comments=None, project_office=None)

Class to hold all the information about a specific interferometer run for a project/proposal.

append(newRun)

Add a new run to the list of runs.

generate_sdfs(starting_session_id=1, run=0, verbose=False)

Convert the ID file into a collection of lsl.common.sdfADP.Project instances that can be used to write SD files.

render(run=0, verbose=False)

Create a run definition file that corresponds to the specified run. Returns the ID file’s contents as a string.

update()

Update the various runs that are part of this project.

validate(verbose=False)

Examine all of the runs and all of their scans to check for validity. If everything is valid, return True. Otherwise, return False.

writeto(filename, run=0, verbose=False, overwrite=False)

Create a run definition file that corresponds to the specified run and write it to the provided filename.

class lsl.common.idf.Observer(name, id, first=None, last=None)

Class to hold information about an observer.

class lsl.common.idf.ProjectOffice(project=None, runs=None, scans=None)

Class to hold comments from the LWA object office. This class isn’t really needed to create ID files, but it is helpful for parsing ID files.

class lsl.common.idf.Run(name, id, scans=None, data_return_method='DRSU', comments=None, correlator_channels=512, correlator_inttime=1.0, correlator_basis='linear', stations=[<LWAStation id='VL', name='LWA1', lat=34:04:08.0, long=-107:37:42.1, elev=2133.6, pressure=0.0, horizon=0:00:00.0, antennas=[...], interface=<LSLInterface backend='lsl.common.dp', mcs='lsl.common.mcs', sdf='lsl.common.sdf', metabundle='lsl.common.metabundle', sdm='lsl.common.sdm'>>, <LWAStation id='SV', name='LWASV', lat=34:20:54.1, long=-106:53:08.8, elev=1477.8, pressure=0.0, horizon=0:00:00.0, antennas=[...], interface=<LSLInterface backend='lsl.common.adp', mcs='lsl.common.mcsADP', sdf='lsl.common.sdfADP', metabundle='lsl.common.metabundleADP', sdm='lsl.common.sdmADP'>>])

Class to hold all of the scans in an interferometer run.

append(newScan)

Add a new Scan to the list of scans.

property correlator_basis

Correlator output polarization basis.

property correlator_channels

Number of correlator channels to use.

property correlator_inttime

Correlator integration time in seconds.

property stations

List of LWA stations to use in the interferometer.

update()

Update the various scans in the run.

validate(verbose=False)

Examine all of the scans associated with the run to check for validity. If everything is valid, return True. Otherwise, return False.

class lsl.common.idf.Scan(target, intent, start, duration, mode, ra, dec, frequency1, frequency2, filter, gain=- 1, pm=[0.0, 0.0], comments=None)

Class to hold the specifics of a scans. It currently handles TRK_RADEC, TRK_SOL, and TRK_JOV.

add_alt_phase_center(target_or_apc, intent=None, ra=None, dec=None, pm=None)

Add an alternate phase center to the scan.

property dec

Target dec. (J2000).

property duration

Duration in seconds.

estimate_bytes()

Estimate the data volume for the specified type and duration of scans. For DRX:

bytes = duration * sample_rate / 4096 * 4128 bytes * 2 tunings * 2 pols.

property fixed_body

Return an ephem.Body object corresponding to where the scan is pointed. None if the scan mode is TBN.

property frequency1

Tuning 1 frequency in Hz.

property frequency2

Tuning 2 frequency in Hz.

property intent

Obsevational intent.

property pm

Target proper motion in mas/yr.

property ra

Target RA (J2000).

property start

Start time.

property target_visibility

Return the fractional visibility of the target during the scan period.

update()

Update the computed parameters from the string values.

validate(verbose=False)

Evaluate the scan and return True if it is valid, False otherwise.

Observing Modes

class lsl.common.idf.DRX(target, intent, start, duration, ra, dec, frequency1, frequency2, filter, gain=- 1, pm=[0.0, 0.0], comments=None)
Required Arguments:
  • scan target

  • scan intent

  • scan start date/time (UTC YYYY/MM/DD HH:MM:SS.SSS string or timezone- aware datetime instance)

  • scan duration (HH:MM:SS.SSS string or timedelta instance)

  • scan RA in hours, J2000.0 or ephem.hours instance

  • scan Dec in degrees, J2000.0 or ephem.hours instance

  • scan tuning frequency 1 (Hz)

  • scan tuning frequency 1 (Hz)

  • integer filter code

Optional Keywords:
  • comments - comments about the scan

class lsl.common.idf.Solar(target, intent, start, duration, frequency1, frequency2, filter, gain=- 1, comments=None)

Sub-class of DRX specifically for Solar DRX scans. It features a reduced number of parameters needed to setup the scan.

Required Arguments:
  • scan target

  • scan intent

  • scan start date/time (UTC YYYY/MM/DD HH:MM:SS.SSS string or timezone- aware datetime instance)

  • scan duration (HH:MM:SS.SSS string or timedelta instance)

  • scan tuning frequency 1 (Hz)

  • scan tuning frequency 1 (Hz)

  • integer filter code

Optional Keywords:
  • comments - comments about the scan

property fixed_body

Return an ephem.Body object corresponding to where the scan is pointed. None if the scan mode is TBN.

class lsl.common.idf.Jovian(target, intent, start, duration, frequency1, frequency2, filter, gain=- 1, comments=None)

Sub-class of DRX specifically for Jovian DRX scans. It features a reduced number of parameters needed to setup the scan.

Required Arguments:
  • scan target

  • scan intent

  • scan start date/time (UTC YYYY/MM/DD HH:MM:SS.SSS string or timezone- aware datetime instance)

  • scan duration (HH:MM:SS.SSS string or timedelta instance)

  • scan tuning frequency 1 (Hz)

  • scan tuning frequency 1 (Hz)

  • integer filter code

Optional Keywords:
  • comments - comments about the scan

property fixed_body

Return an ephem.Body object corresponding to where the scan is pointed. None if the scan mode is TBN.