Pulsar Search Observations#
When to Use This Quick Guide
This quick guide can be used to obtain high time-resolution data when searching for new pulsars, following up on pulsars whose properties are not well known, observing multiple pulsars in the same region of the sky (e.g. globular clusters), or when observing single pulses from pulsars and fast radio bursts (FRBs).
We will use two different configurations, one with coherent dedispersion, and one without coherent dedispersion. Coherent dedispersion should be used any time the dispersion measure (DM) of a source is known, either from previous observations or from a reliable model estimate.
Overview#
This quick guide can be used to obtain high time-resolution data when searching for new pulsars, following up on pulsars whose properties are not well known, observing multiple pulsars in the same region of the sky (e.g. globular clusters), or when observing single pulses from pulsars and fast radio bursts (FRBs).
We will use two different configurations, one with coherent dedispersion, and one without coherent dedispersion. Coherent dedispersion should be used any time the dispersion measure (DM) of a source is known, either from previous observations or from a reliable model estimate.
Example Configurations#
Configuration Keywords Common to Pulsar Search Modes#
The following configuration string is common to both pulsar modes in this tutorial.
# Define config strings
config_common = """
obstype = 'Pulsar'
backend = 'VEGAS'
deltafreq = 0.0
swtype = 'none'
swper = 0.04
swfreq = 0
vdef = 'Radio'
vframe = 'topo'
vlow = 0.0
vhigh = 0.0
vegas.outbits = 8
Receiver-Specific Configuration Keywords#
The following configuration keywords are receiver-specific. In this example, we will use the L-Band receiver.
config_LBand = """
receiver = 'Rcvr1_2'
pol = 'Linear'
notchfilter = 'In'
nwin = 1
restfreq = 1500.0
dopplertrackfreq = 1500.0
bandwidth = 800.0
Note
Not every receiver has a notch filter.
The value of nwin must match the number of rest frequencies.
You should choose a bandwidth that is well-matched to the frequency range of the receiver you are using.
VEGAS Keywords#
Search Mode With Coherent Dedispersion#
The following configuration string specifies keywords that will configure for a pulsar search observation that uses coherent dedispersion. Because coherent dedispersion completely removes intra-channel dispersive smearing, we usually use wider frequency channels in order to achieve higher time resolution, compared to when we do not use coherent dedispersion.
config_coherent_search = """
swmode = 'tp_nocal'
noisecal = 'off'
vegas.obsmode = 'coherent_search'
tint = 10.24e-6
vegas.numchan = 512
vegas.scale = 1585
vegas.polnmode = 'full_stokes'
vegas.dm = 100
Note
The value of
vegas.dmis specific to each source. Here we use a value of 100 but you must change this for each source you are observing.This configuration will result in frequency channels that are approximately 1.5 MHz wide.
The recommended value of
tintdepends on the frequency resolution (i.e. the bandwidth, \(BW\), and number of channels, \(n_{chan}\)). The formula for calculating the recommended integration time \(t_{int}\) is \(t_{int} = \frac{16 \times n_{chan}}{BW}\).The recommended value of
vegas.scaledepends on the dedispersion mode, bandwidth, and number of channels. See the VPM Observing Reference for recommendations for valid combinations of dedispersion mode / bandwidth / number of channels.
Search Mode Without Coherent Dedispersion#
The following configuration string specifies keywords that will configure for a pulsar search observation that does not use coherent dedispersion. To minimize intra-channel dispersive smearing, we use narrow channel bandwidths and longer integration times compared to coherent dedispersion.
config_incoherent_search = """
vegas.obsmode = 'search'
tint = 81.92e-6
vegas.numchan = 2048
vegas.scale = 7495
vegas.polnmode = 'total_intensity'
Note
This configuration will result in frequency channels that are approximately 0.4 MHz wide.
-
The recommended value of
tintdepends on the frequency resolution (i.e. the bandwidth, \(BW\), and number of channels, \(n_{chan}\)). The formula for calculating the recommended integration time \(t_{int}\) is \(t_{int} = a * n_{chan} / BW\), where \(a\) is the accumulation length, which controls the amount of data that is being written out to disk. Here we use a value of \(a=32\). We recommend values of 32 or 64. The recommended value of
vegas.scaledepends on the dedispersion mode, bandwidth, and number of channels. See the VPM Observing Reference for recommendations for valid combinations of dedispersion mode / bandwidth / number of channels.
Observing Scripts#
Listing 4 is a complete observing script that will perform a coherent search.
1# Load a source catalog
2# pulsars_all_GBT is a built-in catalog
3psr_catalog = Catalog(pulsars_all_GBT)
4# Load in your catalog of globular clusters; update this to point to
5# your catalog
6gc_catalog = Catalog('valid/path/to/my_gc_catalog.cat')
7
8# flux cal source
9fluxcal_source = '3C348'
10# test scan source
11test_source = 'B1933+16'
12# Target of interest
13source = 'GlobClusterX'
14
15# Search for pulsars for 30 minutes or until a UTC stop time
16use_stop_time = True
17pulsar_scan_length = 60 * 30
18stop_time = '21:00:00'
19
20cal_scan_length = 65
21
22
23# Define config strings
24config_common = """
25obstype = 'Pulsar'
26backend = 'VEGAS'
27deltafreq = 0.0
28swtype = 'none'
29swper = 0.04
30swfreq = 0
31vdef = 'Radio'
32vframe = 'topo'
33vlow = 0.0
34vhigh = 0.0
35vegas.outbits = 8
36"""
37
38config_LBand = """
39receiver = 'Rcvr1_2'
40pol = 'Linear'
41notchfilter = 'In'
42nwin = 1
43restfreq = 1500.0
44dopplertrackfreq = 1500.0
45bandwidth = 800.0
46"""
47
48config_coherent_search = """
49swmode = 'tp_nocal'
50noisecal = 'off'
51vegas.obsmode = 'coherent_search'
52tint = 10.24e-6
53vegas.numchan = 512
54vegas.scale = 1585
55vegas.polnmode = 'full_stokes'
56vegas.dm = 100
57"""
58
59config_coherent_cal = """
60swmode = 'tp'
61noisecal = 'lo'
62vegas.obsmode = 'coherent_cal'
63tint = 10.24e-6
64vegas.numchan = 512
65vegas.scale = 1585
66vegas.fold_bins = 2048
67vegas.fold_dumptime = 10.0
68"""
69
70ResetConfig()
71
72# Pointing/focus corrections using the flux calibrator
73Slew(fluxcal_source)
74AutoPeakFocus(fluxcal_source)
75
76
77# Slew to the flux cal source
78Slew(fluxcal_source)
79# Configure for flux cal observations
80Configure(config_common + config_LBand + config_coherent_cal)
81# Balance the IF system
82Balance()
83Balance()
84# Take calibration data
85OnOff(source, Offset("AzEl",1.0,0.0), cal_scan_length)
86
87
88# Slew to the test source
89Slew(test_source)
90# Configure for a calibration scan
91Configure(config_common + config_LBand + config_coherent_cal)
92# Balance the IF system
93Balance()
94Balance()
95# Take a calibration scan
96Track(test_source, None, cal_scan_length)
97
98# Configure for a search-mode scan
99Configure(config_common + config_LBand + config_coherent_search)
100# Take test data
101Track(test_source, None, cal_scan_length)
102
103
104# Slew to the pulsar source
105Slew(source)
106# Configure for a calibration scan
107Configure(config_common + config_LBand + config_coherent_cal)
108# Balance the IF system
109Balance()
110Balance()
111# Take a calibration scan
112Track(source, None, cal_scan_length)
113
114# Configure for a search-mode scan
115Configure(config_common + config_LBand + config_coherent_search)
116# Take pulsar search data
117if use_stop_time:
118 Track(source, None, stopTime=stop_time)
119else:
120 Track(source, None, pulsar_scan_length)
Note
We perform the test observation with the same configuration as your search observation to ensure everything is working and nothing changes between the two. Data can be folded as soon as the test pulsar is observed using PRESTO.
-
It is highly recommended to perform an
AutoPeakFocus()at the beginning of your session - this will ensure the telescope is set up correctly in addition to checking the pointing solution.Note
The PF800 and PF342 receivers only require an
AutoPeak().
Tips and Tricks#
We strongly recommend that all observers check their test pulsar data when observing in incoherent search mode as soon as the scan is completed. This can be done using PRESTO:
prepfold -psr [pulsar name] <file_name>
Observing Multiple Sources#
Listing 5 will automatically observe multiple sources one after another. We highlight lines of the script that differ from Listing 4.
1# Load a source catalog
2# pulsars_all_GBT is a built-in catalog
3psr_catalog = Catalog(pulsars_all_GBT)
4
5# Specify several sources in a list
6sources = ['J1713+0747', 'B1937+21', 'B1929+10']
7DMs = [15.9918, 71.0, 3.18]
8
9# Observe each pulsar for 30 minutes
10pulsar_scan_length = 60 * 30
11
12cal_scan_length = 65
13
14
15# Define config strings
16config_common = """
17obstype = 'Pulsar'
18backend = 'VEGAS'
19deltafreq = 0.0
20swtype = 'none'
21swper = 0.04
22swfreq = 0
23vdef = 'Radio'
24vframe = 'topo'
25vlow = 0.0
26vhigh = 0.0
27vegas.outbits = 8
28"""
29
30config_LBand = """
31receiver = 'Rcvr1_2'
32pol = 'Linear'
33notchfilter = 'In'
34nwin = 1
35restfreq = 1500.0
36dopplertrackfreq = 1500.0
37bandwidth = 800.0
38"""
39
40# Note the use of string substitution to dynamically specify the DM
41# for each source
42config_coherent_search = """
43swmode = 'tp_nocal'
44noisecal = 'off'
45vegas.obsmode = 'coherent_search'
46tint = 10.24e-6
47vegas.numchan = 512
48vegas.scale = 1585
49vegas.polnmode = 'full_stokes'
50vegas.dm = %f
51"""
52
53config_coherent_cal = """
54swmode = 'tp'
55noisecal = 'lo'
56vegas.obsmode = 'coherent_cal'
57tint = 10.24e-6
58vegas.numchan = 512
59vegas.scale = 1585
60vegas.fold_bins = 2048
61vegas.fold_dumptime = 10.0
62"""
63
64ResetConfig()
65
66# Pointing/focus corrections using a source close to the first pulsar
67AutoPeakFocus(location = sources[0])
68
69# Loop over all sources defined above
70for source,DM in zip(sources,DMs):
71 Slew(source)
72
73 # Configure for calibration observation
74 Configure(config_common + config_LBand + config_coherent_cal)
75 # Balance the IF system
76 Balance()
77 Balance()
78 # Take calibration data
79 Track(source, None, cal_scan_length)
80
81 # Configure for pulsar observation
82 Configure(config_common + config_LBand + config_coherent_search%DM)
83 # Take pulsar data
84 Track(source, None, pulsar_scan_length)
Advanced Use of Catalogs#
Here we demonstrate an advanced use of catalogs in which we specify the DM for each source and access this in the script.
First, we define an example catalog:
format = spherical
coordmode = J2000
head = name ra dec dm
J1713+0747 17:13:49.5335615 +07:47:37.482501 15.9918
B1937+21 19:39:38.561224 +21:34:59.12570 71.0
B1929+10 19:32:13.9497 +10:59:32.420 3.18
Now we define the observing script. The dm column from our catalog is read in for each
source and substituted into the configuration string. The sources will be observed in the
order they appear in the catalog. We highlight the relevant lines for advanced use of the catalog.
1# Load a source catalog; update this to point to your catalog
2catalog = Catalog('valid/path/to/catalog.cat')
3
4# Define config strings
5config_common = """
6obstype = 'Pulsar'
7backend = 'VEGAS'
8deltafreq = 0.0
9swtype = 'none'
10swper = 0.04
11swfreq = 0
12vdef = 'Radio'
13vframe = 'topo'
14vlow = 0.0
15vhigh = 0.0
16vegas.outbits = 8
17"""
18
19config_LBand = """
20receiver = 'Rcvr1_2'
21pol = 'Linear'
22notchfilter = 'In'
23nwin = 1
24restfreq = 1500.0
25dopplertrackfreq = 1500.0
26bandwidth = 800.0
27"""
28
29config_coherent_search = """
30swmode = 'tp_nocal'
31noisecal = 'off'
32vegas.obsmode = 'coherent_search'
33tint = 10.24e-6
34vegas.numchan = 512
35vegas.scale = 1585
36vegas.polnmode = 'full_stokes'
37vegas.dm = %f
38"""
39
40config_coherent_cal = """
41swmode = 'tp'
42noisecal = 'lo'
43vegas.obsmode = 'coherent_cal'
44tint = 10.24e-6
45vegas.numchan = 512
46vegas.scale = 1585
47vegas.fold_bins = 2048
48vegas.fold_dumptime = 10.0
49"""
50
51
52ResetConfig()
53
54for i, source in enumerate(catalog.keys()):
55 # Only perform AutoPeakFocus() for first source
56 if i == 0:
57 AutoPeakFocus(location=source)
58 Slew(source)
59
60 # Configure for calibration observation
61 Configure(config_common + config_LBand + config_coherent_cal)
62 # Balance the IF system
63 Balance()
64 Balance()
65 # Take calibration data
66 Track(source, None, cal_scan_length)
67
68 # Configure for pulsar observation
69 DM = float(catalog[source]['dm'])
70 Configure(config_common + config_LBand + config_coherent_search%DM)
71 # Take pulsar data
72 Track(source, None, pulsar_scan_length)
Multiple Bank Configuration#
For some receivers a wider bandwidth is available, these receivers allow for observations with a bandwidth greater than 1250 MHz. The following example outlines a C-Band configuration that covers the full bandwidth available from this receiver.
# Load a source catalog
# pulsars_all_GBT is a built-in catalog
psr_catalog = Catalog(pulsars_all_GBT)
# Load in your catalog of globular clusters; update this to point to
# your catalog
gc_catalog = Catalog('valid/path/to/my_gc_catalog.cat')
# Test scan source
test_source = 'B1933+16'
# Target of interest
source = 'GlobClusterX'
# Search for pulsars for 30 minutes or until a UTC stop time
use_stop_time = True
pulsar_scan_length = 60 * 30
stop_time = '21:00:00'
cal_scan_length = 65
# Define config strings
config_common = """
obstype = 'Pulsar'
backend = 'VEGAS'
deltafreq = 0.0
swtype = 'none'
swper = 0.04
swfreq = 0
vdef = 'Radio'
vframe = 'topo'
vlow = 0.0
vhigh = 0.0
vegas.outbits = 8
"""
config_CBand = """
receiver = 'Rcvr4_6'
pol = 'Linear'
restfreq = 7687.5, 6562.5, 5437.5, 4312.5
dopplertrackfreq = 6000.0
bandwidth = 1500.0
"""
config_incoherent_search = """
vegas.obsmode = 'search'
swmode = 'tp_nocal'
noisecal = 'off'
tint = 40.96e-6
vegas.numchan = 2048
vegas.scale = 13035
vegas.polnmode = 'total_intensity'
"""
config_incoherent_cal = """
vegas.obsmode = 'cal'
swmode = 'tp'
noisecal = 'lo'
tint = 40.96e-6
vegas.numchan = 2048
vegas.scale = 13035
vegas.polnmode = 'total_intensity'
"""
ResetConfig()
# Pointing/focus corrections using a source close to the pulsar
AutoPeakFocus(location = test_source)
# Slew to the test source
Slew(test_source)
# Configure for a calibration scan
Configure(config_common + config_CBand + config_incoherent_cal)
# Balance the IF system
Balance()
Balance()
# Take a calibration scan
Track(test_source, None, cal_scan_length)
# Configure for a search-mode scan
Configure(config_common + config_CBand + config_incoherent_search)
# Take test data
Track(test_source, None, cal_scan_length)
# Slew to the pulsar source
Slew(source)
# Configure for a calibration scan
Configure(config_common + config_CBand + config_incoherent_cal)
# Balance the IF system
Balance()
Balance()
# Take a calibration scan
Track(source, None, cal_scan_length)
# Configure for a search-mode scan
Configure(config_common + config_CBand + config_incoherent_search)
# Take pulsar search data
if use_stop_time:
Track(source, None, stopTime=stop_time)
else:
Track(source, None, pulsar_scan_length)