CARMA observing scripts are written in Python. While you can write scripts from scratch, you are strongly encouraged to generate scripts using the CARMA script writer.At minimum, you will need to enter the source name, coordinates, assigned project code, and contact information. You can optionally change the default integration times. Click on "Generate Observing Script" to see a listing of the adopted calibrators and the template script. You can download the script to an ascii file, and make further edits to the observing script as necessary.
Assuming the script was created using the CARMA script writer, the remaining entries that are required to be edited are:
- Instructions for the observers
Any special instructions for the observers should be entered in the comment section of the observing script. This section can be left blank if no special instructions are needed.
- restfreq
Rest frequency in GHz for the observations. See the rest frequency section for additional information.
- IFfreq
The IF frequency in in GHz to place the specral line. See the IF frequency section for additional information.
- Correlator configuration (configband)
The configband commands set the correlator configuration. A configband() command should be issued for each correlator band (currently there are 3 bands). The precise correlator configuration depends on the details of science program. The CARMA script writer produced recommended setups for basic continuum or spectral line observing models.More information is available on the CARMA instrument web page for general correlator information, a program is available to visualize the correlator setup, and a detailed description of the correlator commands.
Observing scripts, source catalogs, and mosaic files should be combined into a tar file and uploaded using the CARMA script uploader. A username and password is required to upload the scripts. External investigators should contact their internal CARMA contact for instructions on how to upload the scripts.Observing scripts should be called projectCode_obsblock.obs (e.g. c0010_abaur.obs), where project code is the project assigned where your proposal was submitted and obsblock is the obsblock specified on the proposal cover sheet. If you have multiple scripts per obsblock, an additional identifier can be added to the script name (e.g. c0010_abaur_1.obs).
Source catalogs should be named projectCode.cat, where project code is the project code assigned when your proposal was submitted.
The files should be combined into a single file called projectcode.tar (e.g. c0010.tar). You may also include in the tar file a README_projectCode containing instructions for the observers.
The observing script will perform the following calibrations (not necessarily in this order):
- Observe the noise source, which is useful to calibrate narrow correlator bands.
- Perform radio pointing at the start of the track and and every N-hours thereafter as specified by the PI for the project. Note: The current default is to skip radio pointing
- Observe the passband calibrator to measure the sensitivity variations as a function of frequency within each band. A noise source integration is obtained before the passband observations.
- Observe a primary flux calibrator if one is available during the track. A noise source integration is obtained before the flux observation.
- Cycle between the source and phase calibrator. A noise source integration is obtained before each phase calibrator observation.
As described in the sources dictionary, sources['target'] can be set to a list of names that will be observed after each phase calibrator observation.
Mosaicking parameters are specified in the mosaic structure contained in the template observing script. One will need to edit the following parameters in the mosaic structure:
- Set mosaic['doMosaic'] to True
- Specify the mosaic positions by creating a file of offset positions (i.e. mosaic['offsetFile']) or by specifying a list of offsets (i.e. mosaic['offsets']).
- Indicate the units of the mosaic offsets. The possible values are arcminutes or fraction of the primary beam width.
- Set how many mosaic positions (mosaic['nphase']). should be observed between phase calibrator observations.
See the section What is this parameter used for? for instructions on how to observe more than one phase calibrator within the track.
The radio pointing model is based on an optical pointing model derived from observations of hundreds of stars, and further observations to measure the offset between the radio and optical pointing solutions. Currently the RMS residuals from the pointing model is 0.2 arcmin, which should be suitable for most 3mm observations.If you would nonetheless like to perform radio pointing, you should be set pointing['doPoint'] to True. Radio pointing will then be performed at the start of the track, and every N hours thereafter as specified by the pointing['interval'] variable.
The source catalog should be generated as an ascii text file in the CARMA catalog format. The name of the catalog should be distinctive for your program, and is usually given as projectCode.cat, where project code is the project code assigned when your proposal was submitted.If you do not already have a source catalog, you should send the source along with the observing script when submitting your observing program.
- Gain calibrating narrow bandwidths
One often does not have adequate signal to noise to perform gain-calibration on the phase calibrator in the narrow spectral bands. There are two limiting cases in calibrating narrow bands:
- At least one correlator band is set to 500 MHz
In this case, the 500 MHz band can be used to gain calibrate the narrow bands. Observations of a bright source are needed to solve for any calibrations offsets between the narrow and broad bandwidths. These offsets appear to constant over a track and can be determined from the passband or phase calibrator observations.- All correlator bands are set to narrow bandwidths
In this case, one generally does not have adequate signal to noise on the gain calibrators. Therefore, one needs to reconfigure the correlator to continuum mode for the phase, flux, and passband calibrator observations. To do this, set the parameter reconfig(mode) in the observing template and specify the correlator configuration in the function setCorrCal() in the observing template.If mode=od.CORR_BW500, all correlator bands are set to 500 MHz bandwidth when observing the calibrator at the same IF frequency.
If mode=od.CORR_BW500LO6, all correlator bands are set to 500 MHz bandwidth and and the IF frequency is changed such that the bands do not overlap within the 6-m IF band.
If mode=od.CORR_BW500LO, all correlator bands are set to 500 MHz bandwidth and and the IF frequency is changed such that the bands do not overlap.
- At 3mm only, two bands are placed in the optimum 6-m IF, and the third band is in the optimum 10-m IF. In this case, the third band is outside the 6-m IF and would not contain any signal from the 6-m antennas.
- At 1mm only, all three bands are within the IF for the 6-m and 10-m antennas.
The passband for the narrow spectral line models can be solved for using the noise source. In addition, the template script will observe the passband calibrator in both correlator configurations to help measure phase offsets between the different correlator configurations.
- Cable wrap when observing sources in both the north and south
Occasionally the best phase calibrators for a source will be north of the observatory latitude of 37.23 degrees while the source will be south of this limit (or vice versa). As the phase calibrator and source transits, the cable wraps on the 10-m antennas will reach a limit, and it will be necessary to slew the antennas 360 degrees so that they can observe both the southern and northern sources. In the worst case (but not infrequent) scenario, the 10-m antennas will slew 360 degrees every time when switching between the phase calibrator and the source. A common situation when this occurs is in Taurus, where 3c111 is a convenient calibrator, but it north of the terminus while Taurus is south.In these instances, the best situation is to use two calibrators: 3c111 for the first part of the track before it transits, and a second calibrator in the south after 3c111 transits. See the section on listing phase calibrators for instructions on how to specify multiple phase calibrators in a track.
While the template script will handle most observations, some programs will need a specialized observing script. Investigators can edit the observing scripts as needed.
Custom modified scripts that do not execute properly may not be re-scheduled.You may wish to contact CARMA staff or a CARMA collaborator and arrange for a short test of a customized script before submitting the script. If you edit the observing script, please enclose your changes with the comment lines:
# BEGIN CUSTOM code changes... # END CUSTOMThese comments will help the observers diagnose any problems with the script, and also provide ideas on how to improve the template script.Investigators needs to be extremely careful modifying the script, since the script is designed to give the observers considerable flexibility in running the track.
For example, if the science targets are observed with all bands set to 62 MHz, and the calibrator is set to 500 MHz bandwidth, a bright quasar should be observed in the following correlator setups:
correlator = {
...
'hybrid' : [ [BW500, BW62, BW62],
[BW62, BW500, BW62] ],
...
}
The hybrid correlator modes will be observed as part of the passband calibration observations. The integration time for each hybrid configuration is set by correlator['tintHybrid'].
If reconfig=None, the correlator is not reconfigured for calibrator observations.
If reconfig=od.CORR_BW500, each correlator band is changed to a bandwidth of 500 MHz without changing the IF frequency.
If reconfig=od.CORR_BW500LO6:
If reconfig=od.CORR_BW500LO:
See What observing issues should I consider... for further discussion on when it is necessary to set reconfig.
correlator = {
...
'tintHybrid' : 5.0,
...
}
If, for example, count = -2 (i.e. is less than zero), then the integration will begin when all but two antennas arrive on source.
If, for example, count = 2 (i.e. is greater than zero), then the integration will begin when any two antennas arrive on source.
The count parameter is only used when waiton = COUNT. Otherwise, the value of count is ignored.
count is a hidden parameter that does not appear
in the default observing script. By default, it assumes the
value of limits['count']
unless it is explictly added to the
fluxcal dictionary.
For example, to begin integrating when all but 3 antennas
are on source, set:
limits = {
...
'waiton' : COUNT,
'count' : -3,
...
}
If doBoth is False, a secondary calibrator will be observed only if dosecondary is True and a primary flux calibrator is not observed.
The following criteria are used to determine if pointing is needed on the calibrator:
elmax is a hidden variable that assumes the value
and functionality specified in
limits['maxElevationCal']
unless it is explicity added to the
fluxcal dictionary.
Example:
fluxcal = {
...
'elmax' : 80.0,
...
}
elmin is a hidden variable that assumes the value
and functionality specified in
limits['minElevationCal']
unless it is explicity added to the
fluxcal dictionary.
Example:
fluxcal = {
...
'elmin' : 30.0,
...
}
maxsep is a hidden variable that assumes the value
in pointing['maxsep']
unless it is explicity added to the
fluxcal dictionary.
Example, to set the maximum separation to 30 degrees:
fluxcal = {
...
'maxsep' : 30.0,
...
}
For example, if you prefer to observe the flux calibrator
Uranus or Neptune, set:
fluxcal = {
...
'preferredPri' : 'Uranus, Neptune',
...
}
This implies that when it is time to observe the flux
calibrator, the script will observe Uranus if it is above
the elevation limit specified by
fluxcal['elmin']. If it is
not, the script will attempt to observe Neptune,
and if that source is not available, the script will
attempt any calibrators listed in
primaryFluxCalibrators.
For example, if you prefer to observe the secondary
flux calibrator 3c279 or 3c273, set:
fluxcal = {
...
'preferredSec' : '3c279, 3c273',
...
}
This implies that when it is time to observe the secondary
flux calibrator, the script will observe 3C279 if it is
above the elevation limit specified by
fluxcal['elmin']. If it is
not, the script will attempt to observe 3C 273.
If that source is not available, the script will
attempt to observe any of the
secondary calibrators
(except MWC 349, which is in the primary flux
calibrator list).
record is a hidden variable that assumes the value
and functionality described in
limits['record']
unless it is explicity added to the
fluxcal dictionary.
Example:
fluxcal = {
...
'record' : 30.0,
...
}
The RMS noise for the amplitudes and phases are given in equations (1)-(4). channel is about 8 degrees per baseline.
tsys is a hidden variable that assumes the value
and functionality described in
limits['tsys']
unless it is explicity added to the
fluxcal dictionary.
Example:
fluxcal = {
...
'tsys' : 10.0,
...
}
waiton=ALL means all antennas must be tracking the source before beginning the integration.
waiton=ANY means that a minimum of two antennas must be tracking the source before beginning the integration.
waiton=COUNT means that the integration will begin when the number of antennas specified by fluxcal['count'] arrive on source.
waiton is a hidden parameter that does not appear
in the default observing script. By default, it assumes the
value of limits['waiton']
unless it is explictly added to the
fluxcal dictionary.
For example, to begin integrating when all antennas
arrive on source, set:
fluxcal = {
...
'waiton' : ALL,
...
}
Example #1:
To observe two flux calibrators (primary and secondary) in a
single calibration cycle:
fluxcal = {
'doPrimary' : True,
'doSecondary' : True,
'doBoth' : True,
'ncal' : 2,
'ncycle' : 1,
}
Example #2:
To observe a flux calibrator (priamry or secondary) at the
beginning of the track, and again at the end of the track, set:
fluxcal = {
'doPrimary' : True,
'doSecondary' : True,
'doBoth' : False,
'ncal' : 1,
'ncycle' : 2,
}
Example #3:
To observe a single flux calibrator every 2 hours:
fluxcal = {
'doPrimary' : True,
'doSecondary' : True,
'doBoth' : False,
'ncycles' : 200, # Set to a large number
'ncal' : 1,
}
If, for example, count = -2 (i.e. is less than zero), then the integration will begin when all but two antennas arrive on source.
If, for example, count = 2 (i.e. is greater than zero), then the integration will begin when any two antennas arrive on source.
The count parameter is only used when waiton = COUNT. Otherwise, the value of count is ignored.
count is a hidden parameter that does not appear
in the default observing script. By default, it assumes the
value of count = -2
unless it is explictly added to the
limits dictionary.
For example, to begin integrating when all but 3 antennas
are on source, set:
fluxcal = {
...
'waiton' : COUNT,
'count' : -3,
...
}
limits = {
...
'maxElevationCal' : 80.0,
...
}
The elevation limit to observe phase calibrators and science targets are controlled separately by the observers. In general, the source and phase calibrator will be observed above an elevation of 30 degrees or an hour angle of +/3 hours, which ever is longer.
limits = {
...
'minElevationCal' : 30.0,
...
}
The elevation limit to observe phase calibrators and science targets are controlled separately by the observers. In general, the source and phase calibrator will be observed above an elevation of 30 degrees or an hour angle of +/3 hours, which ever is longer.
limits = {
...
'record' : 30.0,
...
}
limits['tmoTrack'] sets the default limits for sources, passband, and fluxCal dictionaries. The limits can be overridden by adding the 'tmo' variable to the individual dictionaries (i.e. fluxcal['tmo'], passband['tmo'], and sources['tmo']).
Example:
limits = {
...
'tmoTrack' : 500.0,
...
}
As example, a tracking threshold of 0.1 implies that data will be flagged if the tracking error is larger than 6 arcsec on a 10.4 m antenna at 115 GHz (or 3 arcsec at 230 GHz).
A tracking threshold of 0.1 would imply a loss of 3% if two antennas are off by the maximum amount. For 0.15 it is 6% and 0.2 it is 10%. Depending on the calibration requirements for your program, you may wish to increase the tracking threshold.
IMPORTANT: Data are currently NOT flagged is the tracking error is larger than the trackingThreshold. Flagging will likely be enabled in the future, and therefore this parameter should be set to a reasonable value. In the meantime, the current procedure is for individual investigators to flag their own data using miriad that have a large value of the axis RMS, indicating the antenna was not tracking properly on source.
limits['tsys'] sets the default value for the sources, passband, and fluxCal dictionaries. The limits can be overridden by adding the 'tsys' variable to the individual dictionaries (i.e. fluxcal['tsys'], passband['tsys'], and sources['tsys']).
waiton=ALL means all antennas must be tracking the source before beginning the integration.
waiton=ANY means that a minimum of two antennas must be tracking the source before beginning the integration.
waiton=COUNT means that the integration will begin when the number of antennas specified by limits['count'] arrive on source.
waiton is a hidden parameter that does not appear
in the default observing script. By default, it assumes the
value of waiton=COUNT
unless it is explictly added to the
limits dictionary.
For example, to wait for all antennas to arrive on source
before integrating, set:
limits = {
...
'waiton' : ALL,
...
}
If arcminUnits = False, the positions in the offsetsFile or the offsets list are given in fraction of the primary beam width.
If, for example, count = -2 (i.e. is less than zero), then the integration will begin when all but two antennas arrive on source.
If, for example, count = 2 (i.e. is greater than zero), then the integration will begin when any two antennas arrive on source.
The count parameter is only used when waiton = COUNT. Otherwise, the value of count is ignored.
count is a hidden parameter that does not appear
in the default observing script. By default, it assumes the
value of mosaic['count']
unless it is explictly added to the
mosaic dictionary.
For example, to begin integrating when all but 3 antennas
are on source, set:
mosaic = {
...
'waiton' : COUNT,
'count' : -3,
...
}
The integration time per pointing is indicated by sources['tintTarget'].
If sources['target'] lists multiple sources, a mosaic if performed around the first target, and the remaining sources in the list are observed once.
Example #1:
sources = {
'target' : 'NGC1333',
'phaseCal' : '3c111',
'tintTarget' : 2.5
'tintPhaseCal' : 3.0
}
mosaic = {
'doMosaic' : True,
'nphase' : 5,
...
}
In this example, the phase calibrator 3c111 is first
observed for 3 minutes, followed by 5 positions in the
NGC1333 mosaic which are observed for 2.5 minutes each,
and followed by the phase calibrator again.
Example #2:
sources = {
'target' : 'NGC1333, 0336+323, 0303+472',
'phaseCal' : '3c111',
'tintTarget' : [2.5, 1.0, 1.0]
'tintPhaseCal' : 3.0
}
mosaic = {
'doMosaic' : True,
'nphase' : 5,
...
}
In this example, the phase calibrator 3c111 is first
observed for 3 minutes, followed by 5 positions in the
NGC1333 mosaic which are observed for 2.5 minutes each,
followed by 1 a minute integration on 0336+323, a
1 minute integration on 0303+472, and then by a 3 minute
phase calibrator observation.
mosaic = {
...
...
offsets : [ [-0.500, -0.866], [ 0.500, -0.866], [1.000, 0.000], [0.000, 0.000],
[-1.000, 0.000], [-0.500, 0.866], [0.500, 0.866] ]
}
Note the use of brackets in specifying the mosaic
positions.
For example, here is a seven point offset grid in
arcminutes (this is an example only, and the actual
spacing for a Nyquist sample mosaic will depend on the
observed frequency):
-0.500 -0.866
0.500 -0.866
1.000 0.000
0.000 0.000
-1.000 0.000
-0.500 0.866
0.500 0.866
record is a hidden parameter that does not appear
in the default template. By default, it assumes the value
and functionality specified by
limits['record']
unless it is explictly added to the
mosaic dictionary.
Example:
mosaic = {
...
'record' : 30.0,
...
}
tmoMosaic is a hidden parameter that does not appear in the default template. By default, it has a value 15 seconds unless is explictly added to the mosaic dictionary.
tmoTrack is a hidden parameter that does not appear
in the default template. By default, it assumes the value
and functionality specified by
limits['tmoTrack'] unless
it is explictly added to the mosaic
dictionary.
Example:
mosaic = {
...
'tmoTrack' : 500.0,
...
}
waiton=ALL means all antennas must be tracking the source before beginning the integration.
waiton=ANY means that a minimum of two antennas must be tracking the source before beginning the integration.
waiton=COUNT means that the integration will begin when the number of antennas specified by mosaic['count'] arrive on source.
waiton is a hidden parameter that does not appear
in the default observing script. By default, it assumes the
value of limits['waiton']
unless it is explictly added to the
mosaic dictionary.
For example, to begin integrating when all antennas
arrive on source, set:
mosaic = {
...
'waiton' : ALL,
...
}
noise = {
...
'record' : 30.0,
...
}
noise = {
...
'tint' : 30.0,
...
}
If, for example, count = -2 (i.e. is less than zero), then the integration will begin when all but two antennas arrive on source.
If, for example, count = 2 (i.e. is greater than zero), then the integration will begin when any two antennas arrive on source.
The count parameter is only used when waiton = COUNT. Otherwise, the value of count is ignored.
count is a hidden parameter that does not appear
in the default observing script. By default, it assumes the
value of limits['count']
unless it is explictly added to the
passband dictionary.
For example, to begin integrating when all but 3 antennas
are on source, set:
passband = {
...
'waiton' : COUNT,
'count' : -3,
...
}
The following criteria are used to determine if pointing is needed on the calibrator:
elmax is a hidden variable that assumes the value
and functionality specified in
limits['maxElevationCal']
unless it is explicity added to the
passband dictionary.
Example:
passband = {
...
'elmax' : 80.0,
...
}
elmin is a hidden variable that assumes the value
and functionality specified in
limits['minElevationCal']
unless it is explicity added to the
passband dictionary.
Example:
passband = {
...
'elmin' : 30.0,
...
}
maxsep is a hidden variable that assumes the value
in pointing['maxsep']
unless it is explicity added to the
passband dictionary.
Example, to set the maximum separation to 30 degrees:
passband = {
...
'maxsep' : 30.0,
...
}
The flux density is specified for the LO frequency of the science observations, unless pointing['tune95'] is True, in which case 95 GHz is used.
For example, if you prefer that the passband be measured on
3c279 or 3c273, you can set:
passband = {
...
'preferred' : '3c279 3c273'
...
}
This implies that when it is time to observe the passband, the
script will observe 3c279 if it is above the elevation
limit specified by elmin. If
it is not, it will then try 3c273, and if that source is not
available, the script will automatically choose a suitable
calibrator. If not calibrator is found, then passband
calibration is skipped.
record is a hidden parameter that does not appear
in the default template. By default, it assumes the value
and functionality specified by
limits['record']
unless it is explictly added to the
passband dictionary.
Example:
passband = {
...
'record' : 30.0,
...
}
The RMS noise for the amplitudes and phases are given in equations (1)-(4), where the bandwith (BW) should be replaced by the channel width for your correlator setup. For example, the 500 MHz correlator mode has 33 MHz wide channels. In 15 minutes integration time, the rms amplitude per channel in 15 minutes integration time will be approximately 0.14 Jy per baseline, or about 5% accuracy for a 3 Jy source. Similary, the rms phase per channel is about 8 degrees per baseline.
For narrow bandwidths, it is often not feasible to obtain adequate signal to noise even on a bright quasar. Instead, one should use the electronic noise source to remove the channel to variations, and a bright quasar to remove any DC offsets between the noise source and the astronomical source. The necessary noise source integrations will be obtained automatically within the track.
tmo is a hidden parameter that does not appear
in the default template. By default, it assumes the value
and functionality specified by
limits['tmoTrack'] unless
it is explictly added to the passband
dictionary.
Example:
passband = {
...
'tmo' : 500.0,
...
}
tsys is a hidden parameter that does not appear
in the default template. By default, it assumes the value
and functionality specified by
limits['tsys']
unless it is explictly added to the
passband dictionary.
Example:
passband = {
...
'tsys' : 10.0,
...
}
waiton=ALL means all antennas must be tracking the source before beginning the integration.
waiton=ANY means that a minimum of two antennas must be tracking the source before beginning the integration.
waiton=COUNT means that the integration will begin when the number of antennas specified by passband['count'] arrive on source.
waiton is a hidden parameter that does not appear
in the default observing script. By default, it assumes the
value of limits['waiton']
unless it is explictly added to the
passband dictionary.
For example, to begin integrating when all antennas
arrive on source, set:
passband = {
...
'waiton' : ALL,
...
}
If, for example, count = -2 (i.e. is less than zero), then the integration will begin when all but two antennas arrive on source.
If, for example, count = 2 (i.e. is greater than zero), then the integration will begin when any two antennas arrive on source.
The count parameter is only used when waiton = COUNT. Otherwise, the value of count is ignored.
count is a hidden parameter that does not appear
in the default observing script. By default, it assumes the
value of limits['count']
unless it is explictly added to the
pointing dictionary.
For example, to begin pointing when all but 3 antennas
are on source, set:
pointing = {
...
'waiton' : COUNT,
'count' : -3,
...
}
The parameters in the pointing dictionary are used to select a pointing source.
The following criteria are used to determine if pointing is needed:
elmax is a hidden variable that assumes the value
and functionality specified in
limits['maxElevationCal']
unless it is explicity added to the
pointing dictionary.
Example:
pointing = {
...
'elmax' : 80.0,
...
}
elmin is a hidden variable that assumes the value
and functionality specified in
limits['minElevationCal']
unless it is explicity added to the
pointing dictionary.
Example:
pointing = {
...
'elmin' : 30.0,
...
}
intervalTran is a hidden parameter that does not appear in the default template. It has a value of None by default unless it is explictly added to the pointing dictionary.
The flux density is specified for the LO frequency of the science observations, unless pointing['tune95'] is True, in which case 95 GHz is used.
nrepCross is a hidden parameter that does not appear in the default template. It has a value of 1 by default unless it is explictly added to the pointing dictionary.
For example, if you prefer that the pointing be measured on
3c279 or 3c273, you can set:
pointing = {
...
'preferred' : '3c279 3c273'
...
}
This implies that when it is time to point, the
script will observe 3c279 if it is above the elevation
limit specified by elmin. If
it is not, it will then try 3c273, and if that source is not
available, the script will automatically choose a suitable
pointing source. If not pointing source is found, then
pointing is skipped.
waiton=ALL means all antennas must be tracking the source before beginning the integration.
waiton=ANY means that a minimum of two antennas must be tracking the source before beginning the integration.
waiton=COUNT means that the integration will begin when the number of antennas specified by pointing['count'] arrive on source.
waiton is a hidden parameter that does not appear
in the default observing script. By default, it assumes the
value of limits['waiton']
unless it is explictly added to the
pointing dictionary.
For example, to begin pointing when all antennas
arrive on source, set:
pointing = {
...
'waiton' : ALL,
...
}
The primary flux calibrators are Uranus, Neptune, Mars, and MWC 349. Jupiter and Saturn are generally not used as flux calibrators since they often resolved by CARMA on most baselines. Note that the angular size of Mars can vary substantially throughout the year and may not always be an appropriate calibrator depending on the array configuration. The angular diameter of solar system bodies can be looked up using the online calculators at the U.S. Naval Observatory or Jet Propulsion Laboratory (JPL).
Additional primary flux calibrators can be specified by adding to the primaryFluxCalibrators list or by specifying the source in fluxcal['preferredPri'].
The recommended file name for the catalog is projectCode.cat, where projectCode is the project code assigned when the proposal was submitted.
The source catalog should be sent along with the observing script and (if applicable) the mosaic offset file to to observing_scripts@mmarray.org. Please send the files as attachments.
Example:
projectInfo = {
...
'catalog' : 'c0029.cat',
...
}
Here is an example catalog entry to illustrate the format:
#| Source | RA | DEC | Parallax | Velocity | VelFrame | VelDef | PMRA | PMDEC | ID | PntType | Comments |
#| s | hms | dms | r | r | s | s | r | r | i | s | s |
#| | | | mas | km/s | | mas/year | mas/year | | | |
cygnusA 19:59:28.35 40:44:02.01 0.0 0.0 LSR RADIO 0.000 0.000 1 RADIO
M16 18:18:51.29 -13:50:02.32 0.0 25.0 LSR RADIO 0.000 0.000 1 RADIO
IMPORTANT: Source names are restricted to 8
characters or less. The epoch and equinox are assumed to
be J2000. Fields should be separated by spaces only and
not tabs. The source name cannot contain spaces, *, or
other unusual characters.
This field is required if you wish to be notified when your
track has been observed. Multiple email addresses can be
entered as a comma separated list.
Example:
projectInfo = {
...
'emailAddress' : 'myname@astro.university.com,coI@astro.university.com',
...
}
projectInfo = {
...
'code' : 'c0029',
...
}
projectInfo = {
...
'obsblock' : 'G35',
...
}
projectInfo = {
...
'subobsblock' : 'mm1',
...
}
If, for example, count = -2 (i.e. is less than zero), then the integration will begin when all but two antennas arrive on source.
If, for example, count = 2 (i.e. is greater than zero), then the integration will begin when any two antennas arrive on source.
The count parameter is only used when waiton = COUNT. Otherwise, the value of count is ignored.
count is a hidden parameter that does not appear
in the default observing script. By default, it assumes the
value of limits['count']
unless it is explictly added to the
sources dictionary.
For example, to begin integrating when all but 3 antennas
are on source, set:
sources = {
...
'waiton' : COUNT,
'count' : -3,
...
}
sources = {
...
'phaseCal' : '0530+135',
...
}
On occasion one may need different phase calibrators for
the first and second half of the track (e.g.
when the calibrator
is in the north and the science target is in the south).
You can specify the LST ranges to observe multi-calibrators
by setting the variable phaseCal in the observing
script as follows:
sources = {
...
'phaseCal' : [ '3c111, 01:00:00, 04:00:00',
'0449+113, 03:30:00, 08:00:00']
...
}
Note the use of brackets in this example are required.
In this example, the script will use 3c111 as the phase calibrator between 1:00 and 4:00 LST, and 0449+113 between 03:30 and 8:00 LST. It is up to the PI to ensure that the LST ranges are valid and there are no gaps in the LST coverage. Some overlap between the LST ranges is strongly suggested in case the preceeding phase calibrator cycle ends a few minutes early.
record is a hidden parameter that does not appear
in the default template. By default, it assumes the value
and functionality specified by
limits['record']
unless it is explictly added to the
sources dictionary.
Example:
sources = {
...
'record' : 30.0,
...
}
sources = {
'target' : 'ABAur',
...
}
In this example, the script will first observe the phase
calibrator, then AB Aur, and then the phase calibrator again.
To observe multiple sources, set:
sources = {
'target' : 'ABAur, GMAur, TTau',
...
}
In this example, the script will first observe the phase
calibrator, then ABAur, followed by GMAur, then TTau, and
finally the phase calibrator again.
Multiple targets can be entered as comma- or space- separated
lists. The following are all equivalent:
'ABAur,GMAur,TTau'
'ABAur GMAur TTau'
['ABAur', 'GMAur', 'TTau']
The integration time on the phase calibrator should be
dictated by the calibration accuracy needed for your
program. For an integration time of tint, a
system temperature of Tsys, a correlator
efficiency of nq (= 0.88), an effective area
(Aeff) for an antenna diameter of D
(assumed aperture efficiency = 0.55), and a bandwidth of
BW, the RMS amplitude noise
on a single baseline is
There are periodic phase variations caused by temperature variations in the correlator. The fluctuations have a peak-to-peak phase amplitude of 10 deg and a period of 10 minutes. In principle one should integrate 10 minutes to average over these phase fluctuations. In practice, CARMA observers typically integrate for less than 5 minutes and only partially average over the phase variations. CARMA staff will be working on the correlator to improve the temperature stability and further reduce the phase fluctuations.
sources = {
'target' : 'ABAur, GMAur, TTau'
'tintTarget' : [10.0, 15.0, 12.0]
...
}
In this example, the integration time for AB Aur
will be 10 minutes, 15 minutes for GM Aur, and
12 minutes for T Tau.
For mosaic observations, each position in the mosaic is observed for tintTarget minutes.
tmo is a hidden parameter that does not appear
in the default template. By default, it assumes the value
and functionality specified by
limits['tmotrack'] unless
it is explictly added to the sources
dictionary.
Example:
sources = {
...
'tmo' : 500.0,
...
}
For example, if the integration time on the passband calibrator is 15 minutes, and the tsys time is 10 minutes, the observing procedure would be:
If multiple sources are specified, it may not be necessary to obtain a tsys measurement before each source. If the sources['tsys'] is less than zero, then a tsys measurement is obtained at the start of the source cycle and every abs(sources['tsys']) minutes thereafter regardless of another source is observed. For example, if sources['target'] = 'abaur, dmtau, hltau', sources['tintTaaget'] = 5.0, and sources['tsys'] = -10, the observing procedure would be:
Mosaics are handled slightly differently in anticipation that mosaics often have many pointing centers with short integration times. For mosaic observations, tsys is performed after the next break in the mosaic. For example, if the time integration time per pointing center was 4 minutes, and tsys-time was 10 minutes, the observing procedure would be:
waiton=ALL means all antennas must be tracking the source before beginning the integration.
waiton=ANY means that a minimum of two antennas must be tracking the source before beginning the integration.
waiton=COUNT means that the integration will begin when the number of antennas specified by sources['count'] arrive on source.
waiton is a hidden parameter that does not appear
in the default observing script. By default, it assumes the
value of limits['waiton']
unless it is explictly added to the
sources dictionary.
For example, to begin integrating when all antennas
arrive on source, set:
sources = {
...
'waiton' : ALL,
...
}
Currently for the 3mm band, the usable portion of the IF band
is between 1.1-2.4 GHz for the 6-m antennas. For the 10-m
antennas, the entire 1-5 GHz IF band is usable, but the 3-5
GHz portion of the IF has better sensitivity. See the
section below on configband
for recommended IF frequency setups.
Example:
tuing = {
...
'IFfreq' : 2.15,
...
}
tuning = {
...
'restfreq' : 115.271204,
...
}
An alternative method to specify the rest frequency is to
use the linefreq() command.
Example:
tuning = {
...
'restfreq' : linefreq('12CO(1-0)'),
...
}
In this example, the linefreq() command will look up the
rest frequency of 12CO J=1-0 in the system line catalog.
A list of the molecules and transitions can be found in the
CARMA spectral line catalog.
The linefreq command can be used for any entries
listed between the lines shortcuts and
End shortcuts.
For frequencies listed after the End shortcuts line,
one can use the command transitionfreq to return
the frequency listed in the
CARMA spectral line catalog.
The syntax of the command is
restfreq = transitionfreq(line,transition).
Example:
tuning = {
...
'restfreq' : transitionfreq('CO','1-0'),
...
}
tuning = {
...
'sideband' : LSB,
...
}
Note that there are no quotes around LSB or USB.