Frequently Asked Questions : Editing Observing Scripts

Contents

  1. How do I generate an observing script?
  2. Which parameters must be edited before submitting the script?
    1. Instructions for the observers
    2. resetfreq
    3. IFfreq
    4. configband
  3. How do I submit an observing script?
  4. What calibration steps does the script perform?
  5. How close should the phase calibrator be to my source?
  6. How can I observe multiple sources with a single phase calibrator?
  7. How do I make a mosaic?
  8. How can I observe different phase calibrators for the first and second half of the track?
  9. How do I make a source catalog?
  10. How is a radio pointing source selected?
  11. How often should I perform radio and optical pointing?
  12. How can I observe multiple flux calibrators?
  13. What observing issues should I consider when editing the observing script?
    1. Gain calibrating narrow bandwidths
  14. What parameters do I need to edit for the Paired Antenna Calibration System (PACS)?
  15. Can I edit the python script to fine-tune my observations?
  16. What is this parameter used for?
    1. correlator
      1. configCal
      2. hybrid
      3. reconfig
      4. tintHybrid
    2. fluxcal
      1. ambient
      2. antwait
      3. doBoth
      4. doPoint
      5. doPrimary
      6. doSecondary
      7. elmax
      8. elmin
      9. forcePoint
      10. interval
      11. intervalPointing
      12. maxsep
      13. middle
      14. ncal
      15. ncycles
      16. preferredPointing
      17. preferredPri
      18. preferredSec
      19. record
      20. tint
      21. tsys
    3. limits
      1. ambient
      2. antwait
      3. combine
      4. maxElevationCal
      5. minElevationCal
      6. record
      7. tmoTrack
      8. trackingThreshold
      9. tsys
    4. mosaic
      1. ambient
      2. antwait
      3. arcminUnits
      4. doMosaic
      5. mosaic
      6. nphase
      7. offsets
      8. offsetsFile
      9. record
      10. startpos
      11. tmoMosaic
      12. tmoTrack
      13. tsys
    5. noise
      1. record
      2. tint
      3. tsample
    6. passband
      1. ambient
      2. antwait
      3. doPassband
      4. doPoint
      5. elmax
      6. elmin
      7. forcePoint
      8. interval
      9. maxsep
      10. middle
      11. minflux
      12. ncal
      13. preferred
      14. preferredPointing
      15. record
      16. tint
      17. tmo
      18. tsys
    7. pointing
      1. antwait
      2. crossTerminus
      3. doPointDay
      4. doPointNight
      5. doPointSunRiseSet
      6. elmax
      7. elmin
      8. intervalDay
      9. intervalNight
      10. intervalTran
      11. maxsep
      12. minflux
      13. mapPoints
      14. nrepCross
      15. nrepInt
      16. preferred
      17. tune95
      18. tune95Pref
      19. optical pointing parameters
        1. centroidLoopMax
        2. doOptPoint
        3. intervalOpt
        4. maxmag
        5. maxOptSep
        6. nbadAnts
        7. ncoadd
        8. nfailOpt
        9. optPointCal
        10. optPointTarget
        11. optradElmax
        12. optradElmin
        13. optradPreferred
        14. optradTune95
        15. subtract
    8. primaryFluxCalibrators
    9. projectinfo
      1. catalog
      2. code
      3. emailAddress
      4. obsblock
      5. subobsblock
    10. sources
      1. ambient
      2. antwait
      3. callist
      4. fluxlimit
      5. pacs
      6. phaseCal
      7. record
      8. target
      9. tintlist
      10. tintPhaseCal
      11. tintTarget
      12. tPhaseCalList
      13. tmo
      14. tsys
      15. useBrightest
      16. snapshot parameters
        1. doSnapshot
        2. snapAutoFlux
        3. snapAutoPhase
        4. snapAutoSep
        5. snapAutoTint
        6. snapDb
        7. snapElHa
        8. snapElmax
        9. snapFreq
        10. snapIF
        11. snapProject
        12. snapRetune
        13. snapSB
        14. snapTint
    11. tuning
      1. IFfreq
      2. restfreq
      3. sideband

Answers to frequently asked questions

  1. How do I generate an observing script?
    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.

  2. Which parameters do I need to edit before submitting the script?
    Assuming the script was created using the CARMA script writer, the remaining entries that are required to be edited are:
    1. 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.

    2. restfreq
      Rest frequency in GHz for the observations. See the rest frequency section for additional information.

    3. IFfreq
      The IF frequency in in GHz to place the specral line. See the IF frequency section for additional information.

    4. 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, programs are available to visualize and the correlator setup, and a detailed description of the correlator commands.

  3. How did I submit an observing script?
    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.

  4. What calibration steps does the observing script perform?
    The observing script will perform the following calibrations (not necessarily in this order):
    1. Observe the noise source, which is useful to calibrate narrow correlator bands.
    2. Perform radio or optical 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 perform radio pointing every 4 hours at night and every 2 hours during the day. Optical pointing is performed every hour by default.
    3. 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.
    4. Observe a primary flux calibrator if one is available during the track. A noise source integration is obtained before the flux observation.
    5. Cycle between the source and phase calibrator. A noise source integration is obtained before each phase calibrator observation.
  5. How close should the phase calibrator be to my source?
    A phase calibrator should be observed every 10-30 minutes, depending on the array configuration (about 15 minutes between calibration observations is appropriate for C configuration). See BIMA memo #70 for a discussion of the optimum time between phase calibrator observations. The phase calibrator should ideally be 1 Jy or greater, provided at least one band is in 500-MHz mode on the calibrator, and be observed for 2-3 minutes. The array geometry is determined to an accuracy of about 0.2 mm and so it can be acceptable to observe with a strong calibrator up to 30 degrees away at 3mm, rather than a very weak quasar that is closer to the source. Typically, a suitable calibrator can be found within 20 degrees of a source. At 1mm, it is best to choose a calibrator within 10 degrees if at all possible, even if this implies "hybrid mode" calibration (with all correlator bands in 500-MHz mode on the calibrator) to get sufficient sensitivity. If a more distant calibrator is used we strongly recommend observing a "test" source as well. The test source would be a known source (calibrator) close to the target source. This will allow an assessment of the reliability of phase calibration. Phase calibrators in the CARMA list are observed regularly to monitor their strength. The program Xplore provides a graphical interface to the CARMA calibrator list. If a calibrator's last known flux density is marginal, a short observation may be requested on a maintenance day. Please contact Nikolaus Volgenau (volgenau@mmarray.org).
  6. How can I observe multiple sources with a single phase calibrator?
    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.
  7. How do I make a mosaic?
    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:
    1. Set mosaic['doMosaic'] to True
    2. 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']).
    3. Indicate the units of the mosaic offsets. The possible values are arcminutes or fraction of the primary beam width.
    4. Set how many mosaic positions (mosaic['nphase']). should be observed between phase calibrator observations.
  8. How can I observe different phase calibrators for the first and second half of the track?
    See the section What is this parameter used for? for instructions on how to observe more than one phase calibrator within the track.

  9. How often should I perform radio or optical pointing?
    The radio pointing model is based on an optical pointing model derived from observations of hundreds of stars, and further observations are needed to measure the offset between the radio and optical pointing solutions. Currently the RMS residuals from the pointing model is 0.1 arcmin, which should be suitable for most 3mm observations. However, during daytime observations, the rms will increase.

    The current recommendation is that the radio pointing is performed every 4 hours for night time operations, and radio pointing is recommended every 2 hours during daytime. Observations that are conducting a mosaic may wish to measure the pointing offsets more frequently.

    In addition to radio pointing, optical pointing is available. The advantages to optical pointing is that it is significantly faster than radio pointing, and it often the case that a optical pointing star can be found closer to the science source than a radio pointing source. The disadvantage to optical pointing is that the difference between the optical and radio pointing offsets must be calibrated, and optical pointing will not work when it is cloudy, or when the optical sources are too close to the sun. The current recommendation is to enable optical pointing. The observing scripts will automatically measure the radio-optical pointing offsets, and switch from optical to radio pointing if optical pointing is not converging.

    For daytime observations, the relevant pointing parameters are pointing['doPointDay'] to perform pointing during the daytime, and perform radio pointing every pointing['intervalDay'] hours.

    For night-time observations, the relevant pointing parameters are pointing['doPointNight'] to perform pointing at night, and to perform radio pointing every pointing['intervalNight'] hours.

    For night-time observations, the relevant pointing parameters are pointing['doOptPoint'] to perform optical pointing every pointing['intervalOpt'] hours.

    During sunrise/sunset, the pointing is changing rapidly, and there are special keywords to control pointing during these time periods: pointing['doPointSunRiseSet'] to perform pointing at night every pointing['intervalTran'] hours.

  10. How is a radio pointing source selected?
    A suitable radio pointing source is selected based on the following criteria:
    1. brighter than pointing['minflux'] Janskys.
    2. elevation greater than pointing['elmin'] and less than 80 degrees.
    3. within pointing['maxsep'] degrees of the target.
    If a source in the pointing['preferred'] list satisfies these criteria, that source is used. Otherwise the nearest source in the CARMA calibrator list is used. If no suitable sources are available, the observations proceed without radio pointing. The script will attempt to find a suitable radio pointing source after every phase calibrator observation.

  11. How can I observe multiple flux calibrators?
    By default the script will observe a single flux calibrator. Multiple flux calibrators can be observed by setting parameters in fluxcal.

  12. How do I make a source catalog?
    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.

  13. What observing issues should I consider when editing the observing script?
    1. 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:
      1. 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.
      2. 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.utils.CORR_CUSTOM, you specify the exact correlator configuration for the calibrators using the correlator['configCal'] option.

        If mode=od.utils.CORR_BW500, all correlator bands are set to 500 MHz bandwidth when observing the calibrator at the same IF frequency.

        If mode=od.utils.CORR_BW500LO, all correlator bands are set to 500 MHz bandwidth and the IF frequency is changed such that the bands do not overlap.

        1. 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.
        2. 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. If mode=od.utils.CORR_BW500LO, all correlator bands are

  14. What parameters do I need to edit for the Paired Antenna Calibration System (PACS)??
    The PACS system usings the eight SZA 3.5m antennas to simulataneously observe a bright 30 GHz calibrator while the CARMA antennas observe a source in the 1mm or 3mm band. The SZA data are used to improve the phase calibration.

    To use the PACS system, you must add the parameter sources['pacs'] to the sources dictionary. This parameter indicates which sources the SZA antennas will observe while the CARMA system observes the science targets.

    There are two other optional parameters that only experienced observers should edit: noise['tsample'] and limits['combine'].

  15. Can I edit the python script to fine-tune my observations?
    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 CUSTOM
        
    These 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.

  16. What is this parameter used for?
    1. correlator
      1. configCal
        configCal specified the correlator configuration to be used when observing the phase and flux calibrator. This is only used when using hybrid mode. To use a a custom correlator configuration for the calibrators, reconfig must be set to od.utils.CORR_CUSTOM. For example:
        correlator = { 
           ...
           'reconfig'  : od.utils.CORR_CUSTOM,
           'configCal' : [ [1, BW500, tuning['restfreq']+1.0],
                           [2, BW500, tuning['restfreq']+0.5],
                           [3, BW500, tuning['restfreq']-0.5] ]
           ...
          } 
        The arguments to configCal are exactly the arguments to the configband command. Entries must be provided for each correlator band.
      2. hybrid
        In scripts where the source observations are all observed in narrow spectral line modes, while calibrators are observed in continuum mode (i.e. reconfig is set), it may be necessary to observe a bright source in multiple correlators modes to calibrate band-to-band offsets. The correlator modes that need to be observed are specified in hybrid.

        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:

        1. BW500, BW500, BW500
        2. BW62, BW62, BW62
        3. BW500, BW62, BW62
        4. BW62, BW500, BW62
        Correlator setups (1) and (2) will be already observed because reconfig has been set. However, a bright quasar will need to be observed in setups (3) and (4). This can be accomplished by setting the hybrid variable as follows:
        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'].

      3. reconfig
        Indicates whether the correlator should be reconfigured for continuum observations (500 MHz) when observing flux, phase, and passband calibrators.

        If reconfig=None, the correlator is not reconfigured for calibrator observations.

        If reconfig=od.utils.CORR_BW500, each correlator band is changed to a bandwidth of 500 MHz without changing the IF frequency.

        If reconfig=od.utils.CORR_BW500LO:

        1. for 3mm observations, each band is changed to a bandwidth of 500 MHz and the IF frequency for bands 1, 2, and 3 will be 1.65, 2.15, and 3.25 GHz respectively. These IF frequencies were chosen for historical reasons.
        2. for 1mm observations, each band is changed to a bandwidth of 500 MHz and the IF frequency for bands 1, 2, and 3 will be 2.25, 2.75, and 3.25 GHz respectively.

        If reconfig=od.utils.CORR_CUSTOM, then the user can specify exactly the correlator configuration. The correlator configuration should be specified using correlator['configCal'].

        See What observing issues should I consider... for further discussion on when it is necessary to set reconfig.

      4. tintHybrid
        Integration time in minutes when observing the passband calibrator for each of the hybrid correlator configurations. If the value is None, the integration time set by the passband['tint'] is used.
        Example:
        correlator = { 
           ...
           'tintHybrid' : 5.0,
           ...
          }
    2. fluxcal
      The fluxcal dictionary controls how many primary and flux calibrators are observed in a flux calibration cycle, and how many cycles to observe in a track. The default parameters are set to observe one primary flux calibrator if available, or one secondary flux calibrator otherwise. The fluxcal options can be modified to attempt multiple flux calibration cycles in a track. Given that most primary flux calibrators are found around 22 hours LST, there is no guarantee a primary flux calibrator will be observed.
      1. ambient
        If True, ambient will place the ambient load in the beam before integrating. This parameter overrides the value of limits['ambient'].
      2. antwait
        antwait, indicates how many antennas should be tracking the source before beginning the integration. The default value is antwait=-2.

        If, for example, antwait = -2 (i.e. is less than zero), then the integration will begin when all but two antennas arrive on source.

        If, for example, antwait = 2 (i.e. is greater than zero), then the integration will begin when any two antennas arrive on source.

        antwait=ALL means all antennas must be tracking the source before beginning the integration.

        antwait=ANY means that a minimum of two antennas must be tracking the source before beginning the integration.

        antwait is a hidden parameter that does not appear in the default observing script. By default, it assumes the value of limits['antwait'] unless it is explictly added to the fluxcal dictionary.
        For example, to begin integrating when all but 3 antennas are on source, set:

        fluxcal = { 
           ...
           'antwait' : -3,
           ...
          } 
      3. doBoth
        If doBoth is True and doprimary and dosecondary are also True, then the script will attempt to observe both primary and secondary calibrators.

        If doBoth is False, a secondary calibrator will be observed only if dosecondary is True and a primary flux calibrator is not observed.

      4. doPoint
        If doPoint is True, then radio pointing is performed on the flux calibrator before integrating if needed. The parameters and rules in the pointing dictionary are used, except for fluxcal['maxsep'] override the corresponding pointing parameter. Also, fluxcal['intervalPointing'] determines how often flux calibration is performed.

        Finally, if you want to force radio pointing for every fluxcal observation, then see fluxcal['forcePoint'].

      5. doPrimary
        If doPrimary is True, the script attempts to observe a primary flux calibrator during a flux calibration cycle.

      6. doSecondary
        If doSecondary is True, the script attempts to observe a secondary flux calibrator if (a) no primary flux calibrator has been observed or (b) doBoth is True.

      7. elmax
        elmax is the maximum elevation in degrees to observe a flux 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,
           ...
          }
        
      8. elmin
        elmin is the minimum elevation in degrees to observe a flux calibrator.

        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,
           ...
          }
        
      9. forcePoint
        If forcePoint is True, then radio pointing is attempted on every flux calibration observation assuming a pointing calibrator is available based on the fluxcal['maxsep'] and pointing['minflux'] parameters.

      10. interval
        interval indicates how often in hours to complete a flux calibration cycle.

      11. intervalPointing
        intervalPointing indicates how often in hours to point for a flux calibration cycle.

        intervalPointing is a hidden variable that assumes the value and functionality specified in pointing['interval'] unless it is explicity added to the fluxcal dictionary.
        Example:

        fluxcal = {
           ...
           'intervalPointing' : 15.0,
           ...
          }
        
      12. maxsep
        The maximum allowed separation in degrees between the pointing source and the flux calibrator. If the previous pointing source is more than maxsep degrees, then the pointing is repeated if fluxcal['doPoint'] is True and the pointing parameters are set to perform pointing.

        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,
           ...
          }
        
      13. middle
        If middle = True, flux calibration cycles will be executed in the middle of the phase-calibrator/source cycle if necessary.

      14. ncal
        The maximum number of flux calibrators to observe in a cycle. If ncal > 1, there will be no duplicate observations within a cycle.

      15. ncycles
        ncycles indicates the maximum number of successful cycles to observe during a track. A successful calibration is defined to be when at least once one primary or secondary calibrator is observed.

      16. preferredPointing
        preferredPointing indicates the preferred pointing sources for the flux calibrator observations. The preferred pointing sources must satisfy the flux limits in the pointing dictionary, and the fluxcal['maxsep'] parameter.

        preferredPointing is a hidden variable that default to a value of None. If None, then the pointing source is selected based upon the parameters in the pointing and fluxcal dictionaries. Also, if preferredPointing=None and the flux calibrator is Mars, Neptune, and Uranus, then pointing is performed on the planet. Example:

        fluxcal = {
           ...
           'preferredPointing' : '3c273 3c279',
           ...
          }
        

      17. preferredPri
        By default, the script will automatically choose suitable flux calibrators based on vicinity to the target source and the elevation limits. Investigators can indicate the preferred primary flux calibrator with the preferredPri variable.

        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.
      18. preferredSec
        By default, the script will automatically choose suitable secondary flux calibrators based on vicinity to the target source and the elevation limits. Investigators can indicate the preferred secondary flux calibrators with the preferredSec variable. By default, the two secondary flux calibrators are 3C84 and 3C273. Woojin Kown is maintaining a list of fluxes for these two objects and other bright sources that are observed periodically at CARMA.

        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).
      19. record
        record indicates the record length in seconds for the flux calibrator integrations.

        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,
           ...
          }
        
      20. tint
        Total integration time in minutes for the flux calibrator.

        The RMS noise for the amplitudes and phases are given in equations (1)-(4). channel is about 8 degrees per baseline.

      21. tsys
        tsys indicates how often (in minutes) to perform a full tsys measurement.

        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,
           ...
          }
        

      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,
        }
      
    3. limits
      The limits data dictionary contains sets various limits used in the observing scripts.
      1. ambient
        If ambient is set to True, then the ambient load is placed in the beam before integrating. The default value is False and should rarely be changed.

        The value of limits['ambient'] can be overridden in individual dictionaries by setting sources['ambient'], mosaic['ambient'], passband['ambient'], or fluxcal['ambient'].

        This is a hidden parameter that should only be used for testing purposes such as blank-sky scripts.

      2. antwait
        antwait, indicates how many antennas should be tracking the source before beginning the integration. The default value is antwait=-2.

        If, for example, antwait = -2 (i.e. is less than zero), then the integration will begin when all but two antennas arrive on source.

        If, for example, antwait = 2 (i.e. is greater than zero), then the integration will begin when any two antennas arrive on source.

        antwait=ALL means all antennas must be tracking the source before beginning the integration.

        antwait=ANY means that a minimum of two antennas must be tracking the source before beginning the integration.

      3. combine
        The number of 0.5 second records to average together on the SZA system when observing with PACS. combine is a hidden parameter that, by default, is computed from limits['record']. Useful values are between 4 and 20 (and must be an integer).
        Example:
        limits = { 
           ...
           'combine' : 10,
           ...
          } 
      4. maxElevationCal
        Maximum allowed elevation limit in degrees for flux calibration, passband calibration, and radio pointing. These limits can be overridden in the individual dictionaries for these calibration steps by setting the elmax variable (i.e. fluxcal['elmax'], passband['elmax'], and pointing['elmax']). Example:
        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.

      5. minElevationCal
        Minimum allowed limit in degrees for flux calibration, passband calibration, and radio pointing. These limits can be overridden in the individual dictionaries for these calibration steps by setting the elmin variable (i.e. fluxcal['elmax'], passband['elmax'], and pointing['elmax']). Example:
        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.

      6. record
        The record length in seconds for the observations. For example, if the record length is 30 seconds, and the source integration time is 5 minutes, the 5 minute integration will contain 10 records (= 5 min / 30 sec). The record length can be overridden in the individual dictionaries for these calibration steps by setting the record variable (i.e. fluxcal['record'], mosaic['record'], passband['record'], and sources['record']). Example:
        limits = {
           ...
           'record' : 30.0,
           ...
          }
        

      7. tmoTrack
        When moving to a new source (e.g. slewing from the phase calibrator to the source position), the integration will not start until all antennas acquire the source position or until tmo seconds have elapsed, which ever is shorter. The tmo time should be several minutes since the 10-m antennas have relatively long slew times relative to the 6-m antennas.

        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,
           ...
          } 
      8. trackingThreshold
        Maximum tracking threshold when flagging data, given in beam widths. If an antenna has a tracking error of X arcseconds, such that X/beamWidth > trackingThreshold, the data for that antenna are flagged in the miriad dataset.

        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.

      9. tsys
        The tsys parameter specifies how often in minutes a full system temperature measurement (including sky and ambient load) should be obtained. The tsys parameter is

        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']).

    4. mosaic
      The mosaic data dictionary contains the relevant parameters for mosaic observations. If you are not making a mosaic, set mosaic['doMosaic'] = False (the default value) and ignore the remaining mosaic parameters.
      1. ambient
        If True, ambient will place the ambient load in the beam before integrating. This parameter overrides the value of limits['ambient'].
      2. antwait
        antwait, indicates how many antennas should be tracking the source before beginning the integration. The default value is antwait=-2.

        If, for example, antwait = -2 (i.e. is less than zero), then the integration will begin when all but two antennas arrive on source.

        If, for example, antwait = 2 (i.e. is greater than zero), then the integration will begin when any two antennas arrive on source.

        antwait=ALL means all antennas must be tracking the source before beginning the integration.

        antwait=ANY means that a minimum of two antennas must be tracking the source before beginning the integration.

        antwait is a hidden parameter that does not appear in the default observing script. By default, it assumes the value of limits['antwait'] unless it is explictly added to the mosaic dictionary.
        For example, to begin integrating when all but 3 antennas are on source, set:

        mosaic = { 
           ...
           'antwait' : -3,
           ...
          } 
      3. arcminUnits
        If arcminUnits = True, the positions in the offsetsFile or the offsets list are given in arcminutes.

        If arcminUnits = False, the positions in the offsetsFile or the offsets list are given in fraction of the primary beam width.

      4. doMosaic
        If True, a mosaic is performed on the source listed in sources['target'].

        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.
      5. mosaic
        mosaic is a hidden parameter that indicates (True or False) which target sources should be mosaicked. In its most general form, mosaic is a list containing one entry for each target source. For example:
        sources = {
           'target'       : 'perb1, perb2, perb3, 0210+123']
           'phaseCal'     : '3c111',
           'tintTarget'   :   [1.0, 0.5, 2.0, 1.5] # [minutes]
           'tintPhaseCal' :   3.0, # [minutes]
          }
        
        mosaic = {
           'doMosaic'   : True, # If True, make a mosaic
           'mosaic'     : [True,True,True,False], # Indicate which sources  to mosaic
           'startpos'   :     1, # Starting mosaic position
           'nphase'     :     0, # Number of positions to observe between phase cal
           ...
        }
        
        In this example, the observing procedure would be as follows:
        1. Observe the phase calibrator 3c111 for 3 minutes
        2. mosaic the source perb1 for 1 minute per pointing
        3. mosaic the source perb2 for 0.5 minute per pointing
        4. mosaic the source perb3 for 2.0 minute per pointing
        5. Observe the test source 0210+123 for 1.5 minutes
        6. Observe the phase calibrator 3c111 for 3 minutes
        The default value is mosaic['mosaic'] = [True, False] such that the first source is mosaicked and the second source is not.

        Note the following in using the mosaic['mosaic'] option:

        1. mosaicking multiple sources is useful only if mosaic['nphase']=0.
        2. The same mosaic offsets file is used for each source.
        3. mosaic['doMosaic'] still must be set to true!

      6. nphase
        Number of mosaic positions to observe between phase calibrators. The general observing sequence is:
        1. observe the phase calibrator for sources['tintPhaseCal'] minutes
        2. observe the next nphase mosaic positions for sources['tintTarget'] minutes each
        3. Go back to step (1)
        If nphase=0, all of the mosaic positions are observed before going back to the phase calibrator. It is recommended that the phase calibrator be observed every 15-30 minutes depending on the array configuration. For large mosaics, nPhase should be set to a fraction of the total number of mosaic positions.

      7. offsets

        Instead of providing an offsets file, the offsets can be listed in the offsets variable. The offsets represent the equatorial offsets in arcminutes relative to the pointing center. The right ascension offsets must include the cos(dec) term. Positive offsets are toward east for right ascension, and north for declination. For example, the seven pointing grid offset above is:

        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.

      8. offsetsFile
        The name of the file containing the mosaic offsets positions. The offsets file should be submitted along with the observing script. The offsets should be listed one line per file, and represent the equatorial offsets in arcminutes relative to the pointing center. The right ascension offsets must include the cos(dec) term. Positive offsets are toward east for right ascension, and north for declination.

        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
         
      9. record
        record indicates how frequently the data are recorded in the output data file.

        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,
           ...
          } 
      10. startpos
        Starting position to observe first in the mosaic grid. startpos can have a value from 1 to N, where N is the number of positions in the mosaic.

      11. tmoMosaic
        When offseting to a new mosaic position, the integration will not start until all antennas acquire the source position or until tmoMosaic seconds have elapsed, which ever is shorter. The tmoMosaic time can be relatively short since the antennas generally have small distances to slew in mosaics. However, the value is too small, then most of the data are flagged or blanked since the antennas do not have a change to arrive on source. Observing tests indicate values less than tmoMosaic < 6 seconds are not useful.

        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.

      12. tmoTrack
        tmotrack specified the maximum time to allow the antennas to slew to a source before starting the integration.

        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,
           ...
          } 

    5. noise
      The noise data dictionary contains the relevant parameters for noise integrations. Noise integrations will be obtained at the begining of the track, and immediately before every flux and passband calibrator.
      1. record
        The record length in seconds for the noise integrations. For example, if the record length is 10 seconds, a 30 second integration will contain 3 records (= 30 seconds / 10 sec).
        Example:
        noise = { 
           ...
           'record' : 30.0,
           ...
          } 
      2. tint
        The integration time in seconds for the noise source integration. Normally 10 seconds will provide sufficient signal to noise for the noise source data.
        Example:
        noise = { 
           ...
           'tint' : 30.0,
           ...
          } 
      3. tsample
        How frequently (in minutes) to observe the noise source while observing on an astronomical source. A value of None implies that the science observations are not interrupted for noise source integrations.

        The default value is None for normal observations, and 1 minute for PACS observations.

        This option is useful to track the phase in the digitizers using the noise source.

        Example:

        noise = { 
           ...
           'tsample' : 1,
           ...
          } 
    6. passband
      The passband data dictionary contains the relevant parameters for passband observations. If you do not need passband observations (e.g. your phase calibrator is bright enough to use as a passband source), set passband['doPassband'] = False and ignore the remaining passband parameters. In a passband cycle, the passband calibrator is observed in the following correlator modes:
      1. the nominal correlator configuration set in the observing script
      2. the correlator configuration set by reconfig
      3. each of the correlator configurations specified in hybrid

      Other important notes:

      1. A few bright sources exhibit absorption lines from the local interstellar medium in their spectra and are not suitable calibrators if the velocity of your source is near 0 km/s (LSR). These sources are not selected unless the source is listed in passband['preferred']. Currently, the listed of sources excluded from automatic selection include:
        SourceAliasesReference
        0217+7380212+735Lucas & Liszt 1994, A&A, 383, L5
        0359+509NRAO150, 0355+508Lucas & Liszt 1994, A&A, 383, L5
        BLLAC2202+422, 2200+420Lucas & Liszt 1994, A&A, 383, L5



      1. ambient
        If True, ambient will place the ambient load in the beam before integrating. This parameter overrides the value of limits['ambient'].
      2. antwait
        antwait, indicates how many antennas should be tracking the source before beginning the integration. The default value is antwait=-2.

        If, for example, antwait = -2 (i.e. is less than zero), then the integration will begin when all but two antennas arrive on source.

        If, for example, antwait = 2 (i.e. is greater than zero), then the integration will begin when any two antennas arrive on source.

        antwait=ALL means all antennas must be tracking the source before beginning the integration.

        antwait=ANY means that a minimum of two antennas must be tracking the source before beginning the integration.

        antwait is a hidden parameter that does not appear in the default observing script. By default, it assumes the value of limits['antwait'] unless it is explictly added to the passband dictionary.
        For example, to begin integrating when all but 3 antennas are on source, set:

        passband = { 
           ...
           'antwait' : -3,
           ...
          } 
      3. doPassband
        If True, observe a passband calibrator. If False, passband observations are skipped.

      4. doPoint
        If doPoint is True, then radio pointing is performed on the flux calibrator before integrating if needed. The parameters and rules in the pointing dictionary are used, except for fluxcal['maxsep'] override the corresponding pointing parameter.

        Finally, if you want to force radio pointing for every fluxcal observation, then see passband['forcePoint'].

      5. elmax
        elmax is the maximum elevation in degrees to observe a passband 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,
           ...
          }
        
      6. elmin
        elmin is the minimum elevation in degrees to observe a passband calibrator.

        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,
           ...
          }
        
      7. forcePoint
        If forcePoint is True, then radio pointing is attempted on every flux calibration observation assuming a pointing calibrator is available based on the passband['maxsep'] and pointing['minflux'] parameters.

      8. interval
        interval indicates how often in hours to observe a passband calibrator. At most ncal calibrators will be observed in the track.

      9. maxsep
        The maximum allowed separation in degrees between the pointing source and the flux calibrator. If the previous pointing source is more than maxsep degrees, then the pointing is repeated if passband['doPoint'] is True and the pointing parameters are set to perform pointing.

        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,
           ...
          }
        
      10. middle
        If True, the passband calibrator will be observed in the middle of the track if necessary.

      11. minflux
        The minimum acceptable 3mm flux density when selecting a phase calibrator from the CARMA calibrator catalog. The signal to noise on the passband calibrator as a function of brightness can be estimated from Equation (1)-(4).

        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.

      12. ncal
        The maximum number of passband calibrators to observe in a cycle.

      13. preferred
        By default, the script will automatically choose suitable passband calibrators based on vicinity to the target source, elevation limits, and the minimum flux density. Investigators can indicate the preferred passband calibrator within the preferred variable.

        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.

      14. passbandPointing
        passbandPointing indicates the preferred pointing sources for the passband calibrator observations. The preferred pointing sources must satisfy the flux limits in the pointing dictionary, and the passband['maxsep'] parameter.

        preferredPointing is a hidden variable that default to a value of None. If None, then the pointing source is selected based upon the parameters in the pointing and passband dictionaries.
        Example:

        passband = {
           ...
           'preferredPointing' : '3c273 3c279',
           ...
          }
        

      15. record
        The record length in seconds for the mosaic observations. For example, if the record length is 30 seconds, and the mosaic integration time is 2.5 minutes, the 2.5 minute integration will contain 5 records (= 2.5 min / 30 sec). It can be useful to have a short record length of the passband['tint'] time is also short.

        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,
           ...
          } 
      16. tint
        Total integration time in minutes for the passband calibrator.

        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.

      17. tmo
        When slewing to the passband calibrator, the integration will not start until all antennas acquire the source position or until tmo seconds have elapsed, which ever is shorter. The tmo time should be several minutes since the 10-m antennas have relatively long slew times relative to the 6-m antennas.

        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,
           ...
          } 
      18. tsys
        The tsys parameter specifies how often in minutes a full system temperature measurement (including sky and ambient load) should be obtained when observing a passband calibrator.

        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,
           ...
          } 

    7. pointing
      The pointing dictionary controls how often radio pointing is performed.
      1. antwait
        antwait, indicates how many antennas should be tracking the source before beginning the integration. The default value is antwait=-2.

        If, for example, antwait = -2 (i.e. is less than zero), then the integration will begin when all but two antennas arrive on source.

        If, for example, antwait = 2 (i.e. is greater than zero), then the integration will begin when any two antennas arrive on source.

        antwait=ALL means all antennas must be tracking the source before beginning the integration.

        antwait=ANY means that a minimum of two antennas must be tracking the source before beginning the integration.

        antwait is a hidden parameter that does not appear in the default observing script. By default, it assumes the value of limits['antwait'] unless it is explictly added to the pointing dictionary.
        For example, to begin integrating when all but 3 antennas are on source, set:

        pointing = { 
           ...
           'antwait' : -3,
           ...
          } 
      2. crossTerminus
        If crossTerminus is True, then radio pointing sources on opposite side of the north-south terminus may be selected post source-transit.
        The default value is False, which implies that once the source transits, the radio pointing source must be on the same part of the sky. The default value is false since there can be systematic pointing offsets between the "north" and the "south", and there is often a large antenna slew on the 10-m antennas due to a cable wrap.

      3. doPointDay
        If doPointDay is True, then radio pointing is performed on a pointing source if needed during day time hours.

        The parameters in the pointing dictionary are used to select a pointing source.

        The following criteria are used to determine if pointing is needed for daytime hours:

        1. the last pointing source was more than pointing['intervalDay'] hours ago;
        2. the last pointing source was more than pointing['maxsep'] degrees from the science target;
        3. the last pointing source was on the opposite side of the north/south terminus relative to the science target;
        If either (1), (2), or (3) is True, then radio pointing is performed.

        See also pointing['doPointNight'] and pointing['doPointSunriseSet']

      4. doPointNight
        If doPointNight is True, then radio pointing is performed on a pointing source if needed during night time hours.

        The parameters in the pointing dictionary are used to select a pointing source.

        The following criteria are used to determine if pointing is needed for nighttime hours:

        1. the last pointing source was more than pointing['intervalNight'] hours ago;
        2. the last pointing source was more than pointing['maxsep'] degrees from the science target;
        3. the last pointing source was on the opposite side of the north/south terminus relative to the science target;
        If either (1), (2), or (3) is True, then radio pointing is performed.

        See also pointing['doPointDay'] and pointing['doPointSunriseSet']

      5. doPointSunRiseSet
        If doPointSunRiseSet is True, then radio pointing is performed approximately two hours after sunrise and two hours after sunset. The exact time will depend when the previous pointing occurred. In general, there will be at least one pointing within one hour of these limits.

        If more frequent pointing is desired during sunrise or sunset (defined as ± 2 hours when the sun is at elevation of 0 degrees), then the variable pointing['intervalTran'] can be set.

        doSunRiseSet is a hidden parameter that does not appear in the default template. It has a value of True by default unless it is explictly added to the pointing dictionary.

      6. elmax
        elmax is the maximum elevation in degrees to observe a pointing source.

        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,
           ...
          }
        
      7. elmin
        elmin is the minimum elevation in degrees to observe a pointing source.

        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,
           ...
          }
        
      8. intervalDay
        intervalDay indicates how often in hours to perform radio pointing within a track during the daytime. Daytime is defined as when the Sun is above 0 degrees elevation.

        See also pointing['intervalNight'] and pointing['intervalTran'].

      9. intervalNight
        intervalNight indicates how often in hours to perform radio pointing within a track at night. Night-time is defined as when the Sun is below 0 degrees elevation.

        See also pointing['intervalday'] and pointing['intervalTran'].

      10. intervalTran
        intervalTran indicates how often in hours to perform radio pointing during the transition period between ±2 hours around sunrise and sunset. During this time period the pointing can change quite rapidly.

        If intervalTran is not set, then pointing is performed approximately 2 hours after sunrise and 2 hours after sunset.

        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.

      11. mapPoints
        mapPoints indicates how many pointing positions in azimuth and elevation are made during a pointing cycle. For example, npos=5 will observe the pointing source at 5 different azimuth positions centered at the source position and 5 elevation positions.

      12. maxsep
        Maximum allowed separation in degrees between the pointing source and the science target. Section How a pointing source is selected discusses the criteria used to select a radio pointing source.
      13. minflux
        The minimum acceptable flux density when selecting a pointing source from the CARMA calibrator catalog. The signal to noise on the pointing calibrator as a function of brightness can be estimated from Equation (1)-(4).

        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.

      14. nrepCross
        nrepCross indicates the number of times to repeat the pointing cross observations. Currently the overhead on each pointing cross is about 10 minutes, and it is strongly recommended that investigators use nrepCross=1. If the calibrator is faint, the value of pointing['nrepInt'] should be increased rather than nrepCross.

        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.

      15. nrepInt
        nrepInt indicates the number of integrations to obtain at each pointing position. The default value of 1 is sufficient for pointing sources brighter than 4 Jy, but may be increased for fainter sources.

      16. preferred
        By default, the script will automatically choose suitable pointing source based on vicinity to the target source, elevation limits, and the minimum flux density. Investigators can indicate the preferred pointing source within the preferred variable.

        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.

      17. tune95
        If True, then the receivers are tuned to 95 GHz before radio pointing. The receivers are set back to the original frequency after pointing.

      18. tune95Pref
        If True, then the receivers are tuned to 95 GHz before radio pointing if the selected source is the preferred radio pointing source. The receivers are set back to the original frequency after pointing. If more than preferred pointing source is provided, then tune95Pref should be a list. For example,
        pointing = {
           ...
           'preferred'  : '3c273, 3c279',
           'tune95'     : True,
           'tune95Pref' : [False, True],
        }
        
        In this example, if 3c273 is selected as the pointing source, then the receivers are not retuned to 95 GHz. If 3c279 (or any other source) is selected, then the receivers are returned to 95 GHz before repointing.

      19. optical pointing parameters
        Each of the CARMA antennas is equipped with optical cameras. These cameras are used to observe bright stars across the sky and are used to establish the basic pointing model for each antenna.

        The optical cameras can be further used in science tracks to perform frequent pointing updates. The advantage of optical reference pointing compared to standard radio pointing is that the pointing solution usually converges in a few seconds at night time and a couple of minutes for daytime, while radio pointing takes 10-15 minutes. Also, the density of suitable optical pointing stars on the sky is higher than radio sources, and you are more likely to find a bright star near your source.

        The disadvantages to optical pointing are that it requires the difference between optical minute radio pointing offset to be the same over the sky, which is not guaranteed. Also, optical pointing will not work if it is cloudy or the star is too close to the sun.

        The default optical pointing procedure is as follows:

        1. Radio pointing is performed on a bright quasar.
        2. Optical pointing is done on a bright star near the quasar, and the optical-radio pointing difference is computed.
        3. If both radio and optical pointing converged, then optical pointing is used throughout the remainder of the track. The measured optical-radio pointing offset is used to convert the optical pointing offsets to radio pointing offsets. If optical pointing does not converge, then radio pointing is used in the standard manner.
        4. It is possible for optical and radio pointing to converge at the start of the track, but optical pointing fails later on (e.g. it becomes cloudy). By default, if optical pointing fails for three consecutive tries, then standard radio pointing is resumed.
        All of the optical pointing parameters are hidden and by default no optical pointing is performed. To perform optical pointing, at minimum you need to set 'doOptPoint' to True in the pointing dictionary. You do not need to add the other optical pointing parameters unless you wish to modify the default value.

        Here is the complete list of optical pointing options and a brief description of their functionality. The most important parameters are listed first.

        pointing = { 
           ...
           # doOptPoint is the only required parameter
           'doOptPoint'      :  True, # Must be True to implement optical pointing
           
           # These are optional parameters that you may wish to set. They need to
           # be included in the pointing dictionary only if you change the default values.
           # 
           'intervalOpt'     :   0.5, # [hours] How frequently to perform optical pointing
                                      # 0 -> at the start of every source cycle
           'optradPreferred' :  None, # Preferred radio sources which to measure optical-radio offset
           'optradElmin'     :    30, # [degrees] Minimum elevation which to measure optical-radio offset
           'optradElmax'     :    75, # [degrees] Maximum elevation which to measure optical-radio offset
           'optradTune95     :  None, # If True, tune to 3mm for radio pointing
           'optPointCal'     :  True, # True/False: Perform optical pointing before phase calibrator
           'optPointTarget'  : False, # True/False: Perform optical pointing before science target
           
           # The remaining parameters are optional that you probably should not change.
           # They need to be included in the pointing dictionary only if you change 
           # the default values.
           #
           'maxOptSep'       :    20, # [degrees] Maximum distance of optical pointing source from radio source
           'nbadAnts'        :     3, # Maximum number of antennas to fail optical pointing 
                                      # and still be considered a good pointing session
           'nfailOpt'        :     3, # Maximum number of bad consecutive optical pointing sessions 
                                      # allowed before going back to radio pointing
           'ncoadd'          :  None, # Number of optical images to coadd
           'subtract'        :  None, # Subtract background image before centroiding (True/False/None)
           'maxmag'          :  None, # [mag] Maximum V-band magnitude to point on
           'centroidLoopMax' :    16, # Maximum number of repeats per pointing cycle
           ...
          } 
        1. centroidLoopMax
          The maximum number of attempts per pointing session to try to converge on optical pointing. The default value is 16. It is not recommended that you change this parameter.
        2. doOptPoint
          If True, then optical pointing is enabled for the track. The default value is False.
        3. intervalOpt
          Specified how frequently to attempt optical pointing in hours. Default value is 0.5 hours. A value of 0 means that optical pointing is performed every source cycle.

          This parameter has similar functionality as intervalDay and intervalNight for radio pointing.

        4. maxmag
          Specifies that faintest star in V-band magnitudes that should be used for optical pointing. The default value is None, which implies a magnitude limit of 3.0 mag during the day, and 5.0 mag at night. It is not recommended that you change this parameter.
        5. maxOptSep
          Maximum allowed separation between the target and the optical pointing source. Default value is 20 degrees.
        6. nbadAnts
          The maximum number of antennas where optical pointing does not converge but the optical pointing session is considered a success. The default value is 3.

          For example, if nbadAnts=3 and optical pointing does not converge on 2 antennas, then the optical pointing session is still considered a success. But if 4 or more antennas fail, then the session is marked as failed. nbadAnts is used with pointing['nfailOpt'] to determine when to give up on optical pointing and revert back to optical pointing.

        7. ncoadd
          Specifies the number of optical images to coadd before measuring the centroid. This is useful to point up on fainter sources. The default value is None, which implies during the day time, 40 images are coadded, and during the night, only a single image is taken. It is not recommended that you change this parameter.
        8. nfailOpt
          If optical pointing fails for nfailOpt consecutive sessions, than optical pointing is stopped and standard radio pointing is resumed. The default value is 3.

          nfailOpt is used with pointing['nbadAnts'] to determine when to give up on optical pointing and revert back to optical pointing.

        9. optPointCal
          If True, then perform optical pointing immediately before observing the phase calibrator.

          If optPointCal is True and pointing['optPointTarget'] is False, then the optical pointing source is selected to be close to the science target. However, if both optPointCal and pointing['optPointTarget'] are True, then the optical pointing source is selected to be close to the science target.

          The default value is optPointCal = True and optPointTarget=False. In general, these two parameters should only both be true for 1mm observations where the calibrator is more than 20 deg from your target and high-dynamic range mosaicing is required.

        10. optPointTarget
          If True, then perform optical pointing immdiately before observing the science target.

          The optical pointing source is selected to be close to the target regardless of the value of pointing['optPointCal'].

          The default value is optPointCal = True and optPointTarget=False. In general, these two parameters should only both be true for 1mm observations where the calibrator is more than 20 deg from your target and high-dynamic range mosaicing is required.

        11. optradElmax
          Maximum elevation in degrees at which the optical-radio pointing vector should be measured. The value applies to both the optical and radio source, and overrides the value of limits['maxElevationCal']. Default value is 75 degrees.
        12. optradElmin
          Minimum elevation in degrees at which the optical-radio pointing vector should be measured. The value applies to both the optical and radio source, and overrides the value of limits['minElevationCal']. Default value is 30 degrees.
        13. optradPreferred
          Preferred radio source to measure the optical-radio pointing offset. Either a single (e.g. 'optradPreferred' : '3c273',) or a list of sources (e.g. 'optradPreferred' : ['3c273', '3c279'],) can be provided.

          The default value is optradPreferred=None. A value of None implies that a radio pointing source will be selected based on the flux density limits specified in the pointing dictionary.

        14. optradTune95
          This parameter indicates True or False if the receivers should be tuned to the 3mm band before attempting radio pointing on the calibrators in pointing['optradPreferred']. There should be an entry for each preferred pointing source.

          The default value is optradTune95=None, and the value of pointing['tune95'] is adopted.
          Example:

          pointing = { 
             ...
             'optradPreferred' : ['3c111', '3c84', '0530+135'],
             'optradTune95'    : [False, False, True],
             ...
            } 
        15. subtract
          If True, then a background image is obtained and subtracted from the stellar image. The background subtraction removes systematic structure in the images which prevent detecting faint stars. The default value is None, which implies background subtraction is done during the day, but not at night. It is not recommended that you change this parameter.

    8. primaryFluxCalibrators
      This parameter is used to specify which sources can be used as primary flux calibrators. If False is indicated, the source will not be observed by the script unless it is specified in the fluxcal['preferredPri'] list.

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

    9. projectInfo
      1. catalog
        Name of the catalog contain the source name and coordinates for the observed sources. In general, investigators only need to add the name of their science sources to the source catalog. Common phase calibrators and planets are already contained within the CARMA system catalogs.

        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.

        Currently, only VelFrame=VLSR and VelDef=RADIO are supported. If you want to observe high-z sources, you must calculate the redshifted frequency and set VLSR=0.

      2. emailAddress
        The observing script will send two email messages to the addresses listed in emailAddress. The first email notifies the investigators that the track has started, and the second email sends the script log. The observing script is sent with each email.

        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',
           ...
          } 
      3. code
        Project code that was assigned to your program when you submitted the proposal. This code is required for your script.
        Example:
        projectInfo = { 
           ...
           'code' : 'c0029',
           ...
          } 
      4. obsblock
        obsblock is used as an identifier for a track within a project. The obsblock name is specified on the the proposal coversheet and should be re-entered on the observing script.
        projectInfo = { 
           ...
           'obsblock' : 'G35',
           ...
          } 
      5. subobsblock
        Data files for a track are named projectCode.obsblock.subObsblock.trial. If no subObsblock name is specified, an empty string is used.
        projectInfo = { 
           ...
           'subobsblock' : 'mm1',
           ...
          } 

    10. sources
      1. ambient
        If True, ambient will place the ambient load in the beam before integrating. This parameter overrides the value of limits['ambient'].
      2. antwait
        antwait, indicates how many antennas should be tracking the source before beginning the integration. The default value is antwait=-2.

        If, for example, antwait = -2 (i.e. is less than zero), then the integration will begin when all but two antennas arrive on source.

        If, for example, antwait = 2 (i.e. is greater than zero), then the integration will begin when any two antennas arrive on source.

        antwait=ALL means all antennas must be tracking the source before beginning the integration.

        antwait=ANY means that a minimum of two antennas must be tracking the source before beginning the integration.

        antwait is a hidden parameter that does not appear in the default observing script. By default, it assumes the value of limits['antwait'] unless it is explictly added to the sources dictionary.
        For example, to begin integrating when all but 3 antennas are on source, set:

        sources = { 
           ...
           'antwait' : -3,
           ...
          } 
      3. callist
        callist lists potential phase calibrators that should be observed before the start of the track to check their brightness. If the calibrator is bright enough, then the script will use that source as the phase calibrator.

        callist can contain an arbitrary number of calibrators listed in order of decreasing priority. The format is:

        sources = { 
           ...
           'callist' : 'cal1, cal2, cal3, ...',
           ...
          } 

        There are three other variables that are used along with callist.

        1. fluxlimit
          sources['fluxlimit'] specified the minimum flux density in Janskys for the calibrator. sources['fluxlimit'] can be either a single number, or a list with a different flux limit for each source in callist. If sources['fluxlimit'] has a value of None, then the brightest source in callist is observed.
        2. tintlist
          sources['tintlist'] is the integration time in seconds for each source in callist. sources['tintlist'] must be a single number.
        3. tPhaseCalList
          sources['tPhaseCalList'] is the integration time in minutes that will be adopted for the sources in callist if the corresponding source in callist is adopted as the calibrator. sources['tPhaseCalList'] can be None, a single number, or a list.
        4. useBrightest
          If sources['useBrightest'] is True, then use the brightest calibrator that satisfies the sources['fluxlimit'].

        The procedure in choosing the calibrator is as follows:

        1. The next available source in callist is observed for sources['tintlist'] seconds.
        2. The median antenna-based amplitude is computed. If the source is brighter than sources['fluxlimit'] and sources['useBrightest'] is False, then this source is used as the flux calibrator. Otherwise, Step 1 is repeated for the next available source.
        3. If sources['fluxlimit'] has a value of None or sources['useBrightest'] is True, then the brightest calibrator satisfying sources['fluxlimit'] is used as the phase calibrator.
        4. If no suitable phase calibrator is found, then the phase calibrator specified in sources['phaseCal'] is used.

        callist is a hidden parameter that does not appear in the default observing script. By default, it assumes the value of None and the calibrator in sources['phaseCal'] is used.

        Example 1:
        Suppose the bright calibrator 3c84 is 25 degrees from your source, but you want to use a closer calibrator (either 0232+456, 0245+367, or 0305+403) if they are brighter than 2.0 Jy. 0232+456 is the closest calibrator, and you prefer to use that source if possible. You can set the sources dictionary as follows:

        sources = { 
           ...
           'phaseCal'     : '3c84',
           'callist'      : '0232+456, 0245+367, 0305+403'
           'fluxlimit'    : 2.0,
           'useBrightest' : False,
           ...
          } 

        Example 2:
        Use the brightest calibrator as long as it is at least 1 Jy:

        sources = { 
           ...
           'phaseCal'     : '3c84',
           'callist'      : '0232+456, 0305+403'
           'fluxlimit'    : 1.0,
           'useBrightest' : True,
           ...
          } 

        Example 3:
        You are willing to observe a closer calibrator (0232+456) even it is fainter (> 1 Jy) if it is fainter than a more distant but brighter calibrator (0305+403 @ 2 Jy). Use an integration time of two minutes per source when measuring the fluxes. If the fainter source (0232+456) is acceptable, use a phase-calibrator integration time of 5 minutes. If the brighter source is selected, use 2 minutes.

        sources = { 
           ...
           'phaseCal'     : '3c84',
           'callist'      : '0232+456, 0305+403'
           'fluxlimit'    : [1.0, 2.0],
           'tintlist'     : 120.0,
           'tPhaseCalList': [5.0, 2.0],
           ...
          } 

      4. fluxlimit
        fluxlimit, indicates the minimum allowed brightest in Janskys for sources specified in sources['callist'].

        There are three possible ways to use fluxlimit:

        1. fluxlimit = None

          If the value is None, then the brightest source in sources['callist'] is used.

        2. fluxlimit =

          If the value is set to a single number (e.g. 2.0), then this represents the minimum acceptable brightness (2.0 Jy in this example) for each source in sources['callist'].

        3. fluxlimit =

          If the value is set to a list (e.g. [1.0, 1.5, 4.0]), then each flux entry corresponds to a individual source in sources['callist']. In this case, the number of entries in fluxlimit and sources['callist'] must be identifical.

        fluxlimit is a hidden parameter that does not appear in the default observing script. By default, it has a value of None unless it is explictly added to the sources dictionary.

        See sources['callist'] for specific examples.

      5. pacs
        Source names to be observed by the SZA antennas while observing the science targets specifed by sources['target']. By default, the SZA will observe the same sources specified by sources['target'].

        For normal PACS usage, the observer will set the pacs variable to be a bright quasar that the SZA system will observe at 30 GHz.

        Example #1:

        sources = { 
           'target' : 'ABAur',
           'pacs'   : 'J0435+245',
           ...
          } 
        In this example, the CARMA system will observe AB Aur, while the SZA will observe 'J0435+245'.

        Example #2:

        sources = { 
           'target' : 'ABAur, GMAur, TTau',
           'pacs'   : 'J0435+245, J0456+134, J0412+299',
           ...
          } 
        In this example, CARMA will observe AB Aur, then GM Aur, and then T Tau. The SZA will will observe J0435+245, then J0456+134, and then J0412+299.
      6. phaseCal
        Name of the phase calibrator to be used in the track. If only one phase calibrator is needed, the calibrator name can be specified as:
        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. The script will observe the phase calibrators in the order they are listed in the phaseCal variable. 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.

        The phaseCal variable has more sophisticated options to control when sources are observed. Here is a complete example of all options.

        sources = { 
           ...
           'phaseCal' : [ '3c84 01:00:00 03:00:00', '3c111 elmax=85', 'flux',
                          'passband', 'point', '0530+135 t=20', '3c84']
           ...
          } 
        The observing sequence would be (1) use 3c84 as the phase calibrator between 1 and 3 LST, (2) use 3c111 as the phase calibrator until it reaches an elevation of 85 degrees, (3) observe the flux calibrator (if needed), (4) observe the passband calibrator (if need), (5) perform pointing, (6) observe 0530+135 for 20 minutes, and (7) go back to phase-cal/source cycles using 3c84 as the phase calibrator. Breaking up the track in this manner can be useful if the phase calibrator reaches a very high elevation (> 80-85 deg) where the pointing is poor, or if the calibrator is up for only a brief period of time.

        IMPORTANT: If you prefer to observe the flux calibrator or the passband calibrator in the middle of the track, you should comment out the first instance of the doFlux(...) and doPassband(...) commands in the observing script. The comment character is the pound symbol (#).

      7. record
        record indicates how frequently the data are recorded in the output data file.

        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,
           ...
          } 
      8. target
        Name of the science target(s) to be observed by the script. The source names will most likely be entered in the user source catalog.
        For example, to observe a single source, set:
        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']

      9. tintlist
        tintlist, indicates the integration time in seconds for each source listed in sources['callist']. tintlist must be a single number.

        tintlist is a hidden parameter that does not appear in the default observing script. By default, it has a value of 60 seconds unless it is explictly added to the sources dictionary.

        See sources['callist'] for specific examples.

      10. tintPhaseCal
        Integration time in minutes for the phase calibrator(s) listed in the phaseCal variable.

        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

        Similarly, the RMS phase noise on a single baseline for a source of brightness Ssource is:
        (See the
        RMS calculator for more detailed sensitivity calculations.) The phase calibrator should have a flux density of at least 0.5 Jy, and should preferably be brighter than 1 Jy. If you are unsure if a calibrator is suitable, contact the CARMA staff for guidance.

        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.

      11. tintTarget
        Integration time in minutes for each object listed in the source variable. If more than one object is listed, each object is observed for time.source minutes. To specify a different integration time for each object, set time.source to a list.
        Example:
        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.

      12. tmo
        When moving to a new source (e.g. slewing from the phase calibrator to the source position), the integration will not start until all antennas acquire the source position or until tmo seconds have elapsed, which ever is shorter. The tmo time should be several minutes since the 10-m antennas have relatively long slew times relative to the 6-m antennas.

        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,
           ...
          } 
      13. tPhaseCalList
        tPhaseCalList, indicates the integration time in minutes for each source listed in sources['callist']. tPhaseCalList can be None, a single number, or a list.

        If tPhaseCalList is none, the integration time specified in sources['tintPhaseCal'] is used.

        If tPhaseCalList is a single number, then that integration time will be adopted for any source selected from sources['callist'].

        If tPhaseCalList is a list (e.g. [1.0, 3.0, 2.0]), then each entry corresponds to the source listed in sources['callist']. The number of sources listed in sources['callist'] must equal the number of integration times in tPhaseCalList.

        tPhaseCalList is a hidden parameter that does not appear in the default observing script. By default, it has a value of None unless it is explictly added to the sources dictionary.

        See sources['callist'] for specific examples.

      14. tsys
        The tsys parameter specifies how often in minutes a full system temperature measurement (including sky and ambient load) should be obtained when observing a source.

        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:

        1. track the source
        2. take a tsys measurement
        3. integrate on the passband calibrator for 10 minutes
        4. take a tsys measurement
        5. integrate on the passband calibrator for 5 minutes
        The same procedure applies for flux calibrators, phase calibrators, and science-target observations.

        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:

        1. take a tsys measurement
        2. integrate on AB Aur for 5 minutes
        3. integrate on DM Tau for 5 minutes, but do not measure tsys
        4. take a tsys measurement
        5. integrate on HL Tau for 5 minutes

        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:

        1. track the source
        2. take a tsys measurement
        3. observe mosaic position #1 for 4 minutes
        4. observe mosaic position #2 for 4 minutes
        5. observe mosaic position #3 for 4 minutes
        6. take a tsys measurement

      15. useBrightest
        useBrightest, indicates that the brightest source in sources['callist'] that meets the flux density limits specified in sources['fluxlimit'] should be used as the phase calibrator.

        The only possible values for useBrightest are True or False.

        useBrightest is a hidden parameter that does not appear in the default observing script. By default, it has a value of False unless it is explictly added to the sources dictionary.

        See sources['callist'] for specific examples.

      16. snapshot parameters
      17. Some projects attempt to observe many sources. Rather than enter every source on the proposal oversheet, it may be simplier to specify one obsblock with the intent to observe many sources in that obsblock. The snapshot parameters enable observing scripts to observe multiple sources in this manner.

        The general procedure for snapshot observations is as follows:

        1. The investigator uploads a CARMA source catalog into the snapshot database (password protected). The priority list of sources, phase calibrators, secondary calibrators, and integration time for each source can be specified. One advantange of the snapshot system is that the investgators can change priorities as the observations take place.
        2. In the standard CARMA observing script, the investigator specifies various observations on how to observe each source. (e.g frequencies, tuning options, elevation ranges).
        3. The script will read the snapshot database, and select the highest priority object available that meets the specified criteria. The source will remain in the snapshot database until the specified on-source integration time has been met.

        Here is the complete list of the snapshot parameters that must appear in the sources dictionary, and a brief description of their functionality. The most important parameters are listed first.

        sources = { 
           ...
           # Required parameters
           'doSnapshot'      :  True,   # Must be True to implement snapshot observing
           'snapProject'     : 'cx221', # Name of the program in the snapshot database
           
           # Miscellaneous parameters
           'snapElmax'       :  None, # Maximum elevation in degrees at which to observe a source
           'snapElHa'        :  None, # Hour angle and minimum elevation limits to observe a source
           'snapRetune'      : False, # Retune receivers for each source for doppler tracking
           
           # Parameters to automatically select phase calibrators for snapshot observations
           'snapAutoPhase'   : False, # If True, automatically select phase calibrators
           'snapAutoFlux'    :   1.0, # Flux limit in Janskys for phase calibrators
           'snapAutoSep'     :   1.0, # Maximum separation of phase calibrator in degrees from source
           'snapAutoTint'    :   3.0, # Integration time in minutes on phase calibrators
           
           # Parameters for observing each source at multiple frequencies
           'snapFreq'        :  None, # List of rest frequencies (GHz) to observe.
           'snapIF'          :  None, # List of IF frequencies (GHz) for each snapFreq.
           'snapSB'          :  None, # List of sidebands for each snapFreq.
           'snapTint'        :  None, # List of integration time in minutes for each snapFreq.
           
           # The remaining parameters are optional and should not be changed.
           # They need to be included in the sources dictionary only if you change 
           # the default values.
           #
           'snapDb'          : 'snapshot', # Name of the database
           ...
          } 
      Here is a more detailed description of each parameter.
      1. doSnapshot
        If True, then read sources from the snapshot database instead of the sources['target'] list.
      2. snapAutoFlux
        The flux limits in Janskys when selecting phase calibrators automatically. The default value is 1 Jansky. See sources['snapAutoPhase'] for example usuage.
      3. snapAutoPhase
        If True, then the phase calibrator is automatically selected for the source if no phase calibrator is listed in the database. The default value is False.

        A phase calibrator is chosen that is within sources['snapAutoSep'] degrees from the source and brighter than sources['snapAutoFlux'] Jy.

        Multiple values can be entered in a list if one is observing multiple frequencies using sources['snapFreq'].

        This option is useful if one has many snapshot sources and it is tedious to specify a calibrator for each object. Also, in some projects, one can perform selfcal at one snapshot frequency, but not another.

        In the example below, a phase calibrator will be chosen automatically for the 230 GHz observations, but not the 115 GHz observations. The 230 GHz calibrator will be chosen such that it is brighter than 2 Jy and within 10 deg of the source. If no calibrator is found, then the source is observed, but with no phase calibrator observations. It is up to the investigator to ensure a suitable phase calibrator can be identified.

        sources = {
           ...
           'snapFreq'      : [115.0, 230.0],
           'snapAutoPhase' : [False, True],
           'snapAutoFlux'  : [1.0, 2.0],
           'snapAutoSep'   : [20.0, 10.0],
           'snapAutoTint'  : [1.0, 2.0],
           ...
          }
        
      4. snapAutoSep
        The maximum allowed separation in Janskys when selecting phase calibrators automatically. The default value is 25 degrees. See sources['snapAutoPhase'] for example usuage.
      5. snapAutoTint
        The integration time in minutes on the automatically-selected phase calibrators. The default value is 3 minutes. See sources['snapAutoPhase'] for example usuage.
      6. snapDb
        The name of the database that contains the snapshot source catalogs. The default value is snapDb = 'snapshot'. This value is for testing purposes and should be changed rarely.
      7. snapElHa
        The minumum elevation in degrees and hour angle limits when selecting a source to observe. The default value is snapElHa = None.

        As an example, snapElHa = [30.0, -3.0, -3.0] means that the next snapshot source should be higher than 30 degrees elevation OR between hour hangles of -3 and 3 hours. Typically, the the minimum elevation will be applicable to high declination sources, and the hour angle limits to low declination sources.

      8. snapElmax
        The maximum elevation in degrees in which a source will be observed. This parameter can be useful for programs where sources rise above about 80 degrees and the pointing/tracking errors may increase.

      9. snapFreq
        List of frequencies in GHz to observe. The default value is snapFreq = None, which implies the frequency listed in the tuning dictionary is used.

        Any number of frequencies can be specified in either the 1 or 3mm receiver bands. Frequencies can also be repeated within the list.

        See sources['snapAutoPhase'] for example usuage.

      10. snapIF
        List of IF frequencies in GHz for each snapshot tuning. The default value is snapIF = None, which implies the IF frequency listed in the tuning dictionary is used.

        An IF frequency can be specified for each sources['snapFreq']. If only one IF frequency is specified, then that IF frequency is used for each tuning.

        See sources['snapAutoPhase'] for example usuage.

      11. snapProject
        The project name in the snapshot database. This parameter must be set. Normally the project name is set to the project code, but that is not required. Example:
        sources = {
           ...
           'snapProject'   : 'cx221',
           ...
          }
        
      12. snapRetune
        Indicates True or False if the receivers should be retuned for each source. The default value is False.

        For continuum snapshot surveys, it is best to have snapRetune=False to reduce the overhead in receiver tuning. For spectral-line snapshot surveys however, retuning may be necessary to doppler track each source. In this case, the overhead will increase for retuning, and it will no longer possible to share calibrator sources between snapshot targets.

        sources = {
           ...
           'snapRetune'   : False,
           ...
          }
        
      13. snapSB
        List of sidebands for each snapshot tuning. The default value is snapSB = None, which implies the sideband listed in the tuning dictionary is used.

        An sideband can be specified for each sources['snapFreq']. If only one sideband is specified, then that sideband is used for each tuning.

        See sources['snapAutoPhase'] for example usuage.

      14. snapTint
        List of integration times in minutes for each snapshot tuning. The default value is snapTint = None, which implies the integration time listed in the sources['tintTarget'] is used.

        If snapTint is less than sources['tintTarget'], the phase calibrator will be observed using the time interval specified by sources['tintTarget']. This will allow you to have short integration times for a source.

        An integration time can be specified for each sources['snapFreq']. If only one integration is specified, then that integration is used for each tuning.

        See sources['snapAutoPhase'] for example usuage.

    11. tuning
      1. IFfreq
        The intermediate frequency (IF) band currently extends from 1 to 5 GHz. The IFfreq parameter specifies where in the IF band the spectral line should be placed. The units are in GHz. For continuum projects and observations of a single line, the optimal value is approximately 2.5-2.75 GHz. Example:
        tuning = {
           ...
           'IFfreq' : 2.5,
           ...
          }
        

      2. restfreq
        The rest frequency of the molecular line or, if observing continuum only, the continuum rest frequency. The frequency is entered in units of GHz.
        Example:
        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'),
           ...
          }
        

      3. sideband
        The desired sideband to place the line frequency. The possible values are 'LSB' for lower sideband and 'USB' for upper sideband. For most users, lower sideband is preferred except when observing 12CO J=1-0, when upper sideband is preferred.
        Example:
        tuning = { 
           ...
           'sideband' : LSB,
           ...
          } 
        Note that there are no quotes around LSB or USB.

Last updated: April 15, 2009 by John Carpenter