1. Create an observing script
Load /groups/sci/scripts/5.0.3/irc10216_SO2.py as a template into an editor.
It uses the high resolution FDM correlator mode. If you want the standard low-resolution TDM mode, (useful for nearly live looks at the phase) see one of:
/groups/sci/scripts/5.0.3/3C273_long.py 1 scan, 30 subscans each of 2 minutes on 3C273
/groups/sci/scripts/5.0.3/3C84_0359.py 20 scans, each on 1 2min subscan, alternating between 3C273 and 3C279
Keep in mind that they are older and probably need updating.
Rename your file to avoid inadvertantly saving over the template.
Things you might want to edit in the file:
Choose between High Res and Low Res Corr Modes
# use FDM -> tFBMode.setValue(1)
#corrConf.BaseBandConfig.ChannelAverageBands.startChannel.setValue(50)
#corrConf.BaseBandConfig.ChannelAverageBands.numberChannels.setValue(7230)
#corrConf.BaseBandConfig.SpectralSubbandSet.tFBMode.setValue(1)
#Use TDM -> tFBMode.setValue(103)
corrConf.BaseBandConfig.SpectralSubbandSet.tFBMode.setValue(103)
corrConf.BaseBandConfig.ChannelAverageBands.startChannel.setValue(10)
corrConf.BaseBandConfig.ChannelAverageBands.numberChannels.setValue(140)
a) Number of cycles
cycles=n
n is the number of cycles of the main repeat loop
b) Integration time
corrConf.integrationDuration.setValue(n)
n is the number of 48ms correlator dumps in an integration. Standard value is
210 (10.08s). Values between 21 and 210 are typical.
c) subscan duration
corrConf.subScanDuration.setValue(n)
n is the number of integrations per subscan. These should correspond to 2 minutes or
less (a subscan is the amount of data transferred from correlator to
archive). Standard values 12 integrations of 10.08s. At the ATF each subscan has some overhead (~10s?) during which no data is taken.
d) Observing frequency
sfi_obs_mode.setFrequency(freq)
freq is the observing frequency, in Hz. Standard value is 103.83375e9; for CS
observations, use 98E9.
e) Walsh switching
Once the observing frequency has been set, turn on Walsh switching:
PSI>rs walsh 3,4
Tells Vx to use Walsh function 3, and AEC to use 4. 0 and 1 should also work. The order does not matter as long as each antenna is using a different function.
To actually turn on (enable) Walsh switching:
PSI>rs walsh ef
NOTE! The performance will be degraded if you retune the receiver frequency while Walsh switching is on. Disable it
with
PSI>rs walsh d
before changing frequencies (and then enable it again). This is a problem for nearly all of the scripts, since they run setFrequency().
f) Sources (including calibrators) to be observed
execfile('/groups/sci/scripts/sources.py')
name_src = 'OMC-1'
ra_src, dec_ = sources.radec_from_name(name1)
src1 = create_source_RADec(ra1, dec1)
Here, sourcename1 must be one of the sources in the catalog
/groups/sci/scripts/sources.text. If you want to observe something else, add it to the catalog for future use. Make as many blocks as you need for the sources you want to observe, e.g.
name_cal='0530+135'
ra_cal, dec_cal = sources.radec_from_name(name_cal)
src_cal = create_source_RADec(ra_cal, dec_cal)
f) Optimizing signal levels
You should first go to the target position in order to optimize on the right airmass:
sfi_obs_mode.setDirection(ra_src, dec_src, fieldName=name_src)
The command used for 5.0.3 is
sfi_obs_mode.optimizeSignalLevels(2.0)
Unlike in 5.0.2, you should use a value of 2.0 to get voltages around 1V.
g) Using the hot load
Insert this block immediately before observing the sources.
import CCL.FEB
name_hl = 'hotload'
src_hl = create_source_RADec(ra_src, dec_src) # use source 1 position
sfi_obs_mode.setDirection(ra_src, dec_src, fieldName=name_hl)
# Put in the hot loads.
febs ={}
for ant in array.antennas():
febs[ant] = CCL.FEB.FEB(ant)
febs[ant].SET_CHOPPER_TO_LOAD()
# 30s should be plenty of time for a hot load obs.
nints_per_subscan = int(30.0 / (0.048 * n48ms_per_intdur))
if nints_per_subscan < 1:
nints_per_subscan = 1
corrConf.subScanDuration.setValue(nints_per_subscan)
nints_per_subscan = corrConf.subScanDuration.getValue()
print "Starting the hot load observation."
sfi_obs_mode.beginScan([ScanIntentMod.TARGET], src_hl)
sfi_obs_mode.beginSubscan(spectSpec,corrConf,[SubscanIntentMod.ON_SOURCE])
sfi_obs_mode.endSubscan()
sfi_obs_mode.endScan()
# Take out the hot loads.
for ant in febs:
febs[ant].SET_CHOPPER_TO_SKY()
h) Cable delay
# Specify the cable_delay in seconds.
cable_delay = 119.275e-9 # Empirical 2008 Apr 27
sds.setAntennaCableDelay('DA41',cable_delay)
Be prepared for this number to change if electronics modules are replaced. See
Appendix B, below for details of how to change it.
i) Order of observations
Best explained by some examples.
A simple block with one source, scan and subscan
sfi_obs_mode.setDirection(ra1, dec1, fieldName=name1)
sfi_obs_mode.beginScan([ScanIntentMod.TARGET], src1)
sfi_obs_mode.beginSubscan(spectSpec,corrConf,[SubscanIntentMod.ON_SOURCE])
sfi_obs_mode.endSubscan()
The same, but repeated cycles times:
sfi_obs_mode.setDirection(ra1, dec1, fieldName=name1)
sfi_obs_mode.beginScan([ScanIntentMod.TARGET], src1)
for i in range(cycles):
sfi_obs_mode.beginSubscan(spectSpec,corrConf,[SubscanIntentMod.ON_SOURCE])
sfi_obs_mode.endSubscan()
sfi_obs_mode.endScan()
Note: indentation is important, and very tricky (don't even try!) on the CCL command line. Use an editor and execfile for even short snippets requiring indentation.
Alternating between two sources:
for i in range(cycles):
sfi_obs_mode.setDirection(ra1, dec1, fieldName=name1)
sfi_obs_mode.beginScan([ScanIntentMod.TARGET], src1)
sfi_obs_mode.beginSubscan(spectSpec,corrConf,[SubscanIntentMod.ON_SOURCE])
sfi_obs_mode.endSubscan()
sfi_obs_mode.endScan()
sfi_obs_mode.setDirection(ra2, dec2, fieldName=name2)
sfi_obs_mode.beginScan([ScanIntentMod.TARGET], src2)
sfi_obs_mode.beginSubscan(spectSpec,corrConf,[SubscanIntentMod.ON_SOURCE])
sfi_obs_mode.endSubscan()
sfi_obs_mode.endScan()
--
AntonioHales - 04 May 2008