Skip to content

Commit d44436f

Browse files
committed
Implemented dispersion measure guessing
1 parent 554a294 commit d44436f

File tree

4 files changed

+147
-30
lines changed

4 files changed

+147
-30
lines changed

dedisperse/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
"""
22
import file for dedisperse.py
33
"""
4-
from .dedisperse import dedisperse
4+
from .dedisperse import dedisperse, estimate_dm, find_initial_signal

dedisperse/dedisperse.py

Lines changed: 68 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,15 @@
44
# pylint: disable-msg=C0103
55
import numpy as np
66

7-
def dedisperse(samples, dm):
7+
def dedisperse(samples, dm=None):
88
'''
99
This method performs dedispersion on the filterbank data
1010
'''
11-
samples = np.asarray(samples)
11+
12+
if dm is None:
13+
print("Finding possible DM's")
14+
dm = estimate_dm(samples)
15+
1216
# Distribute the DM over the amount of samples
1317
delays_per_sample = np.round(np.linspace(dm, 0, samples.shape[1])).astype(int)
1418

@@ -25,3 +29,65 @@ def dedisperse(samples, dm):
2529
samples[:, i] = np.roll(temporary_samples, delays_per_sample[i])
2630

2731
return samples
32+
33+
34+
def estimate_dm(samples):
35+
'''
36+
This method attempts to find a dispersion measure
37+
'''
38+
39+
# Tuple of frequency index and sample index
40+
initial_signal_point = find_initial_signal(samples)
41+
last_sample = initial_signal_point
42+
43+
for i, frequency in enumerate(samples[1]):
44+
for j, data_point in enumerate(samples[:, i]):
45+
#print(samples[:, i][previous_time_sample:].shape[0])
46+
if(j > last_sample[1]):
47+
if(data_point > 10):
48+
last_sample = i, j
49+
#print("At Frequency ", i, " found on Time sample ", j, " - ", data_point)
50+
break
51+
52+
highest_difference = 0
53+
'''
54+
for s, samples in enumerate(samples):
55+
for i, data_point in enumerate(samples):
56+
if(i > highest_difference):
57+
if(data_point > 10):
58+
print(s, i, " - ", data_point)
59+
highest_difference = i
60+
break
61+
'''
62+
estimated_dm = last_sample[1] - initial_signal_point[1]
63+
print("Estimated DM is", estimated_dm)
64+
return estimated_dm
65+
66+
67+
def find_initial_signal(samples):
68+
'''
69+
This method attempts to find a viable data point to start estimating a dispersion measure from
70+
'''
71+
72+
# Tuple of frequency index and sample index
73+
lowest_sample = 0, samples.shape[0]
74+
75+
for i, frequency in enumerate(samples[1]):
76+
for j, data_point in enumerate(samples[:, i]):
77+
if(j < lowest_sample[1]):
78+
if(data_point > 1):
79+
print("Initial signal found on freq, sample", i, j)
80+
return i, j
81+
'''
82+
print(lowest_sample, " ", j)
83+
print("At Frequency ", i, " found on Time sample ", j, " - ", data_point)
84+
lowest_sample = i, j
85+
break
86+
if(lowest_sample[1] == 0):
87+
print("", lowest_sample)
88+
return i, j
89+
'''
90+
91+
print("NO INITIAL SIGNAL FOUND")
92+
return None
93+

examples/dedisperse_samples.py

Lines changed: 2 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -16,31 +16,6 @@
1616

1717
from timeseries.timeseries import Timeseries
1818

19-
def print_possible_dm(data):
20-
'''
21-
This method is for testing purposes and should probably be removed later on
22-
'''
23-
first_sample = 400
24-
25-
for i, data_point in enumerate(data[first_sample]):
26-
if(data_point > 10):
27-
print("first sample ", i, " - ", data_point)
28-
break
29-
30-
highest_difference = 0
31-
32-
for s, samples in enumerate(data):
33-
for i, data_point in enumerate(samples):
34-
if(i > highest_difference):
35-
36-
if(data_point > 10):
37-
print(s, i, " - ", data_point)
38-
highest_difference = i
39-
break
40-
41-
print(highest_difference)
42-
43-
4419
# Read filterbank data
4520
special_pspm = fb.Filterbank(filename = "../data/my_special_pspm.fil")
4621

@@ -49,10 +24,10 @@ def print_possible_dm(data):
4924
frequencies, samples = special_pspm.select_data()
5025

5126
# Use this if you have your own file with a clear pulsar signal, this method assumes all signals other than the pulsar are lower than 10
52-
#print_possible_dm(dispersed_samples)
27+
print_possible_dm(samples)
5328

5429
# Dispersion Measure
55-
DM = 230
30+
DM = 240
5631

5732
plt.subplot(2,1,1)
5833
data, extent = waterfall_plot(samples, frequencies)

examples/dedisperse_stream.py

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
'''
2+
Example that dedisperses filterbank data and plots it together with a timeseries plot
3+
'''
4+
# pylint: disable-all
5+
import os,sys,inspect
6+
currentdir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))
7+
parentdir = os.path.dirname(currentdir)
8+
sys.path.insert(0,parentdir)
9+
10+
import numpy as np
11+
import matplotlib.pyplot as plt
12+
13+
import filterbank.filterbank as fb
14+
import dedisperse as dedisperse
15+
from plot.static_waterfall import waterfall_plot
16+
17+
from timeseries.timeseries import Timeseries
18+
19+
from clipping import clipping
20+
21+
# Read filterbank data
22+
special_pspm = fb.Filterbank(filename = "../data/my_uber_pspm.fil")
23+
24+
special_pspm.read_filterbank()
25+
26+
frequencies, samples = special_pspm.select_data()
27+
28+
29+
plt.subplot(2,1,1)
30+
data, extent = waterfall_plot(samples, frequencies)
31+
32+
img = plt.imshow(data.T,
33+
aspect='auto',
34+
origin='lower',
35+
rasterized=True,
36+
interpolation='nearest',
37+
extent=extent,
38+
cmap='cubehelix')
39+
40+
time_series = []
41+
42+
for sample_set in samples:
43+
summed_sample = np.sum(sample_set)
44+
time_series.append(summed_sample)
45+
46+
plt.subplot(2,1,2)
47+
plt.plot(time_series)
48+
plt.show()
49+
50+
#clipped_samples = clipping(frequencies, samples)
51+
samples = dedisperse.dedisperse(samples)
52+
#samples = dedisperse.find_lowest_pulsar(samples)
53+
#samples = dedisperse.estimate_dm(samples)
54+
55+
56+
plt.subplot(2,1,1)
57+
data, extent = waterfall_plot(samples, frequencies)
58+
59+
img = plt.imshow(data.T,
60+
aspect='auto',
61+
origin='lower',
62+
rasterized=True,
63+
interpolation='nearest',
64+
extent=extent,
65+
cmap='cubehelix')
66+
plt.colorbar()
67+
68+
time_series = []
69+
70+
for sample_set in samples:
71+
summed_sample = np.sum(sample_set)
72+
time_series.append(summed_sample)
73+
74+
plt.subplot(2,1,2)
75+
plt.plot(time_series)
76+
plt.show()

0 commit comments

Comments
 (0)