Miscellaneous

Base class

class darc.base.DARCBase(source_queue, target_queue=None, second_target_queue=None, control_queue=None, config_file='/opt/hostedtoolcache/Python/3.10.8/x64/lib/python3.10/site-packages/darc/config.yaml', no_logger=False)

Bases: Process

DARC Base class

Provides common methods to services

Parameters
  • source_queue (Queue) – Input queue

  • target_queue (Queue) – Output queue

  • second_target_queue (Queue) – second output queue

  • control_queue (Queue) – Control queue

  • config_file (str) – Path to config file

  • no_logger (bool) – Skip logger initialization

cleanup(abort=False)

Stub for commands to run upon service stop, defaults to self.stop_observation

Parameters

abort (bool) – Whether to abort running observation

get_attribute(command)

Get attribute as given in input command

Parameters

command (dict) – Command received over queue

load_config()

Load config file

process_command(command, *args, **kwargs)

Process command from queue, other than start_observation and stop_observation. By default only provides get_attribute command

Parameters
  • command (dict) – Input command

  • args (list) – process command arguments

  • kwargs (dict) – process command keyword arguments

run()

Main loop

Receive commands on input queue, calls self.start_observation, self.stop_observation, else self.process_command

start_observation(*args, reload=True, **kwargs)

Start observation. By default only (re)loads config file.

Parameters
  • args (list) – start_observation arguments

  • reload (bool) – reload service settings (default: True)

  • kwargs (dict) – start_observation keyword arguments

stop(abort=False)

Stop this service

Parameters

abort (bool) – Whether to abort running observation

stop_observation(*args, **kwargs)

Stop observation stub, should be overridden by subclass if commands need to be executed at observation stop

Parameters
  • args (list) – stop_observation arguments

  • kwargs (dict) – stop_observation keyword arguments

Control

darc.control.main()

DARC command line interface

This function is called by the darc executable

Run darc –help for usage

darc.control.send_command(timeout, service, command, payload=None, host='localhost', port=None)

Send a command to the DARC master service

Parameters
  • timeout (float) – Timeout for reply in seconds

  • service (str) – Service to send command to

  • command (str) – Which command to send

  • payload (str) – Payload for command (optional)

  • host (str) – Hostname to connect to (default: localhost)

  • port (int) – Port to connect to (default: get from DARC config file)

Returns

reply from DARC master

Definitions

darc.definitions.AP_EFF = 0.6

Apertif/ARTS aperture efficiency

darc.definitions.ARRAY_ITRF = <Quantity [3828630.63486201,  443593.39226634, 5064922.99755   ] m>

ITRF WSRT reference position

darc.definitions.BANDWIDTH = <Quantity 300. MHz>

Apertif/ARTS bandwidth

darc.definitions.CONFIG_FILE = '/opt/hostedtoolcache/Python/3.10.8/x64/lib/python3.10/site-packages/darc/config.yaml'

Full path to config file: $HOME/darc/config.yaml if present, else default shipped with package

darc.definitions.DISH_DIAM = <Quantity 25. m>

WSRT dish diameter

darc.definitions.MASTER = 'arts041'

ARTS master name

darc.definitions.NCHAN = 1536

Apertif/ARTS number of channels

darc.definitions.NDISH = 8

Apertif/ARTS number of dishes in use

darc.definitions.NTAB = 12

Number of tied-array beams

darc.definitions.NUMCB = 40

Apertif/ARTS number of compound beams

darc.definitions.TIME_UNIT = 781250

Beamformer time constant: number of samples per second

darc.definitions.TSAMP = <Quantity 8.192e-05 s>

Apertif/ARTS sampling time

darc.definitions.TSYS = <Quantity 85. K>

Apertif/ARTS system temperature

darc.definitions.WORKERS = ['arts001', 'arts002', 'arts003', 'arts004', 'arts005', 'arts006', 'arts007', 'arts008', 'arts009', 'arts010', 'arts011', 'arts012', 'arts013', 'arts014', 'arts015', 'arts016', 'arts017', 'arts018', 'arts019', 'arts020', 'arts021', 'arts022', 'arts023', 'arts024', 'arts025', 'arts026', 'arts027', 'arts028', 'arts029', 'arts030', 'arts031', 'arts032', 'arts033', 'arts034', 'arts035', 'arts036', 'arts037', 'arts038', 'arts039', 'arts040']

ARTS worker names

Logger

darc.logger.get_logger(name, log_file, level=20)

Create logger

Parameters
  • name (str) – name to use in log prints

  • log_file (str) – Path to log file

  • level (int) – log level (default: logging.INFO)

Returns

logger

darc.logger.get_queue_logger(name, queue, level=20)

Create logger that puts messages on a queue to be handled by a separate listener :param str name: name to use in log prints :param Queue queue: Log queue :param int level: log level (default: logging.INFO) :return: logger

darc.logger.get_queue_logger_listener(queue, log_file)

Create thread that logs message from a queue :param Queue queue: Log queue :param str log_file: Path to log file :return: QueueListener thread

Synthesized Beam Generator

class darc.sb_generator.SBGenerator(fname=None, science_case=None, config_file='/opt/hostedtoolcache/Python/3.10.8/x64/lib/python3.10/site-packages/darc/config.yaml')

Bases: object

Synthesized beam generator

__init__ should be called by cls.from_science_case or cls.from_table

Parameters
  • fname – path to synthesized beam table

  • science_case – ARTS science case (3 or 4)

  • config_file (str) – Path to config file

_load_table()

Load SB table

classmethod from_science_case(science_case, config_file='/opt/hostedtoolcache/Python/3.10.8/x64/lib/python3.10/site-packages/darc/config.yaml')

Initalize default table for given science case

Parameters
  • science_case (int) – science case (3 or 4)

  • config_file (str) – Path to config file

Returns

SBGenerator object

classmethod from_table(fname, config_file='/opt/hostedtoolcache/Python/3.10.8/x64/lib/python3.10/site-packages/darc/config.yaml')

Initalize with provided SB table

Parameters
  • fname (str) – Path to SB table

  • config_file (str) – Path to config file

Returns

SBGenerator object

get_map(sb)

Return mapping of requested SB

Parameters

sb (int) – beam to return mapping for

Returns

SB mapping for requested beam

property reversed

Whether or not the SB table is reversed for use on filterbank data

Returns

reversed (bool)

synthesize_beam(data, sb)

Synthesize beam

Parameters
  • data (np.ndarray) – TAB data with shape [TAB, freq, time]

  • sb (int) – SB index

Returns

SB data with shape [freq, time]

exception darc.sb_generator.SBGeneratorException

Bases: Exception

Utilities

darc.util.calc_snr_amber(data, thresh=3)

Calculate peak S/N using the same method as AMBER: Outliers are removed four times before calculating the S/N as peak - median / sigma The result is scaled by 1.048 to account for the removed values

Parameters
  • data (array) – timeseries data

  • thresh (float) – sigma threshold for outliers (Default: 3)

Returns

peak S/N

darc.util.calc_snr_matched_filter(data, widths=None)

Calculate S/N using several matched filter widths, then pick the highest S/N

Parameters
  • data (np.ndarray) – timeseries data

  • widths (np.ndarray) – matched filters widths to try (Default: [1, 5, 10, 25, 50, 100, 250, 500, 1000, 2500])

Returns

highest S/N, corresponding matched filter width

darc.util.clear_queue(queue)

Read all remaining items in a queue and discard them

Parameters

queue (queue.Queue) – queue to clear

darc.util.decode_parset(parset_bytes)

Decode parset into string

Parameters

parset_bytes (bytes) – raw parset bytes

Returns

parset as string

darc.util.dm_to_delay(dm, flo, fhi)

Convert DM to time delay

Parameters
  • dm (astropy.units.quantity.Quantity) – dispersion measure

  • flo (astropy.units.quantity.Quantity) – lowest frequency

  • fhi (astropy.units.quantity.Quantity) – highest frequency

Returns

time delay (astropy quantity)

darc.util.dm_to_smearing(dm, f, df)

Calculate intra-channel smearing time

Parameters
  • dm (astropy.units.quantity.Quantity) – dispersion measure

  • f (astropy.units.quantity.Quantity) – frequency

  • df (astropy.units.quantity.Quantity) – channel width

darc.util.encode_parset(parset_str)

Encode parset string into bytes

Parameters

parset_str (str) – parset as one string

Returns

encoded parset as bytes

darc.util.get_flux(snr, width, ndish=8, npol=2, coherent=True)

Compute single pulse flux density using radiometer equation

Parameters
  • snr (float) – S/N

  • width (astropy.units.quantity.Quantity) – Width

  • ndish (int) – Number of dishes used (default: 8)

  • npol (int) – Number of polarizations (default: 2)

  • coherent (bool) – Using coherent beamforming (default: True)

Returns

Peak flux density (astropy.units.quantity.Quantity)

darc.util.get_ymw16(parset, beam=0, logger=None)

Get YMW16 DM

Parameters
  • parset (dict) – Observation parset

  • beam (int) – CB for which to get YMW16 DM

  • logger (Logger) – Logger object (optional)

Returns

YMW16 DM (float)

darc.util.hadec_to_radec(ha, dec, t)

Convert apparent HA, Dec to J2000 RA, Dec

Parameters
  • ha – hour angle with unit

  • dec – declination with unit

  • t (Time/str) – Observing time

Returns

SkyCoord object of J2000 coordinates

darc.util.hadec_to_rot(ha, dec)

Convert WSRT HA, Dec to TAB rotation angle

Parameters
  • ha (astropy.units.quantity.Quantity) – hour angle with unit

  • dec (astropy.units.quantity.Quantity) – declination with unit

darc.util.makedirs(path)

Mimic os.makedirs, but do not error when directory already exists

Parameters

path (str) – path to recursively create

darc.util.parse_parset(parset_str)

Parse parset into dict with proper types

Parameters

parset_str (str) – raw parset as string

Returns

parset as dict

darc.util.radec_to_hadec(ra, dec, t)

Convert RA, Dec to apparent WSRT HA, Dec

Parameters
  • ra (Quantity) – Right ascension

  • dec (Quantity) – Declination

  • t (Time/str) – Observing time

Returns

HA (Quantity), Dec (Quantity)

darc.util.send_email(frm, to, subject, body, attachments=None)

Send email, only possible to ASTRON addresses

Parameters
  • frm (str) – From address

  • to (str/list) – To addresses, either single or list of addresses

  • subject (str) – Subject of email

  • body (dict) – Dict with e-mail content (str) and type (str)

  • attachments (dict/list) – optional dict or list of dicts with attachment path (str), type (str), and name (str)

darc.util.sleepuntil_utc(end_time, event=None)

Sleep until specified time

Parameters
  • end_time (datetime.datetime/astropy.time.Time/str) – sleep until this time

  • event (threading.Event) – if specified, uses event.wait instead of time.sleep

darc.util.tail(f, event, interval=0.1)

Read all lines of a file, then tail until stop event is set

Parameters
  • f (filehandle) – handle to file to tail

  • event (threading.Event) – stop event

  • interval (float) – sleep time between checks for new lines (default: .1)