source: trunk/python/lagflagger.py @ 1583

Last change on this file since 1583 was 1583, checked in by Malte Marquarding, 15 years ago

Some instructions via print, change behaviour to also just keep flags without appplting them to the data

File size: 2.5 KB
Line 
1from asap import scantable
2from pylab import *
3from numpy import array, ma, logical_not
4from numpy.fft import fft, ifft
5
6class lagplotter(object):
7    def __init__(self, stable):
8        if not isinstance(stable, scantable):
9            raise TypeError("This works only on scantables")
10        self._scan = stable
11        self.figure = None
12        self.dataaxes = None
13        self.fftaxes = None
14        self.resultaxes = None
15        self.flags = []
16
17    def _init_plot(self):
18        if not self.figure:
19            self.figure = figure()
20            self.dataaxes = self.figure.add_subplot(3,1,1)
21            self.fftaxes = self.figure.add_subplot(3,1,2)
22            self.resultaxes = self.figure.add_subplot(3,1,3)
23        else:
24            self.dataaxes.cla()
25            self.fftaxes.cla()
26            self.resultaxes.cla()
27           
28
29    def flag(self):
30        self._init_plot()
31        for i in xrange(len(self._scan)):
32            self.dataaxes.cla()
33            self.fftaxes.cla()
34            self.resultaxes.cla()
35            x = array(self._scan.get_abcissa(i)[0])
36            y = array(self._scan.get_spectrum(i))
37            msk = self._scan.get_mask(i)
38            marr = ma.MaskedArray(y, logical_not(msk), fill_value=0.0)
39            self.dataaxes.plot(x, marr)
40            nfft = len(marr)/2+1
41            yfft = fft(marr.filled())
42            self.fftaxes.semilogy(abs(yfft)[0:nfft])
43            self.figure.show()
44            raw_input("Press any key to continue...")
45            print "Now select a start and end point by clicking on the middle plot"
46            print
47            flagstart = int(ginput(show_clicks=False)[0][0]+0.5)
48            flagend = int(ginput(show_clicks=False)[0][0]+0.5)
49            xfft = range(len(yfft))
50            self.fftaxes.axvspan(flagstart, flagend, alpha=0.3)
51            yfft[flagstart:flagend] = 0+0j
52            yfft[-flagend:-flagstart] = 0+0j
53            yi = ifft(yfft)
54            self.resultaxes.plot(x, yi)
55            self.figure.show()
56            inp = raw_input("Commit flags (c), keep (k) or ignore(i)? ").lower()
57            if inp.startswith("c")
58                self.flags.append([flagstart, flagend])
59                self._scan.set_spectrum(yi.real, i)
60            elif inp.startswith("k"):
61                self.flags.append([flagstart, flagend])
62            else:
63                del self.fftaxes.patches[-1]
64            cont = raw_input("Continue (c) or quit (q)? ")
65            if not cont == "c":
66                return self.flags
67        return self.flags
Note: See TracBrowser for help on using the repository browser.