Instruments

The observing instrument is instantiated as an Instrument. The simplest way to get an instrument is to grab a pre-defined one, e.g.:

# The Atacama Cosmology Telescope
act = maria.get_instrument('ACT')

# The Atacama Large Millimeter Array
alma = maria.get_instrument('ALMA')

# MUSTANG-2
m2 = maria.get_instrument('MUSTANG-2')

# and many more!

Customizing passbands

from maria.instrument import Band

my_band = Band(center=150, # in GHz
               width=30, # in GHz
               efficiency=0.5
               sensitivity=1e-5
               )

Note that any sensitivity units are only implicit due to the imperfect efficiency (caused by the instrument and the atmosphere). For a heuristic, the band implicitly assumes that we are observing the zenith at the ALMA site with a PWV of 1mm, and converts the given sensitivity to the corresponding noise equivalent power. We can customize this by setting the sensitivity as

my_band.set_sensitivity(1e-5, pwv=2, elevation=45, region="mauna_kea")

Customizing arrays

To customize an array, we specify a field of view and add some Band.

array = {"primary_size": 10 # in meters
         "field_of_view": 0.5 # in degrees
         "bands": [my_band],
         }

When passed to Instrument, this will generate an array such that the beams do not overlap and fill up the field of view. Instead of a Band, we can also pass a string that names a pre-defined band, or a mixture of the two.

array = {"primary_size": 10 # in meters
         "field_of_view": 0.5 # in degrees
         "bands": [my_band, "mustang2/f093"],
         }

Constructing an Instrument is then done as

instrument = maria.get_instrument(array=array)

To construct an instrument with multiple subarrays, we can create a dict wherein each value is a valid array:

subarrays = {"array1": {"array_offset": (0.1, 0), "field_of_view": 0.05, "bands": [f150]},
            "array2": {"array_offset": (-0.1, 0), "field_of_view": 0.05, "bands": [f150]},}

instrument = maria.get_instrument(subarrays=subarrays)