source: branches/hpc34/python/flagplotter.py

Last change on this file was 2453, checked in by Kana Sugimoto, 12 years ago

New Development: No

JIRA Issue: Yes (CAS-3749/Trac-266)

Ready for Test: Yes

Interface Changes: Yes

What Interface Changed: renamed a parameter of asapplotter._assert_plotter from mode to action

Test Programs:

Put in Release Notes: No

Module(s):

Description: renamed a parameter of asapplotter._assert_plotter from mode to action


File size: 5.3 KB
Line 
1from asap.asapplotter import asapplotter
2from asap.logging import asaplog, asaplog_post_dec
3
4from asap.parameters import rcParams
5from asap.selector import selector
6from asap.scantable import scantable
7import matplotlib.axes
8from matplotlib.font_manager import FontProperties
9from matplotlib.text import Text
10
11class flagplotter(asapplotter):
12    """
13    The flag plotter
14    Only row based panneling is allowed.
15
16    Example:
17       scan = asa p.scantable(filename='your_filename',average=False)
18       guiflagger = asap.flagplotter(visible=True)
19       guiflagger.plot(scan)
20       ### flag/Unflag data graphically.
21       guiflagger.save_data(name='flagged_file.asap',format='ASAP')
22   
23    NOTICE:
24       The flagged data is not saved until you explicitly run scantable.save
25    """
26    def __init__(self, visible=None, **kwargs):
27        self._scan = None
28        asapplotter.__init__(self,visible=visible, **kwargs)
29        self._assert_plotter(action='reload')
30        self._plotter._set_window_title('Flag Plotter')
31        self._panelling = 'r'
32        self.set_stacking('scan')
33        self._ismodified = False
34
35    def _new_custombar(self):
36        backend = matplotlib.get_backend()
37        # Flag plotter relys on supported GUI backends
38        if not self._visible:
39            asaplog.push("GUI backend is not available")
40            asaplog.post("ERROR")
41        elif backend == "TkAgg":
42            from asap.customgui_tkagg import CustomFlagToolbarTkAgg
43            return CustomFlagToolbarTkAgg(self)
44        elif backend == "Qt4Agg":
45            from asap.customgui_qt4agg import CustomFlagToolbarQT4Agg
46            return CustomFlagToolbarQT4Agg(self)
47        else:
48            asaplog.push("Unsupported backend for interactive flagging. Use either TkAgg or PyQt4Agg")
49            asaplog.post("ERROR")
50
51    @asaplog_post_dec
52    def _invalid_func(self, name):
53        msg = "Invalid function 'flagplotter."+name+"'"
54        #raise AttributeError(msg)
55        asaplog.push(msg)
56        asaplog.post('ERROR')
57
58    def set_panelling(self,which='r'):
59        """ This function is not available for the class flagplotter """
60        if which.lower().startswith('r'):
61            return
62        msg = "Pannel setting is fixed to row mode in 'flagplotter'"
63        asaplog.push(msg)
64        asaplog.post('ERROR')
65        self._panelling = 'r'
66
67    def plotazel(self,*args,**kwargs):
68        """ This function is not available for the class flagplotter """
69        self._invalid_func(name='plotazel')
70   
71    def plotpointing(self,*args,**kwargs):
72        """ This function is not available for the class flagplotter """
73        self._invalid_func(name='plotpointing')
74
75    def plottp(self,*args,**kwargs):
76        """ This function is not available for the class flagplotter """
77        self._invalid_func(name='plottp')
78
79    def save_data(self, name=None, format=None, overwrite=False):
80        """
81        Store the plotted scantable on disk.
82        This function simply redirects call to scantable.save()
83       
84        Parameters:
85   
86            name:        the name of the outputfile. For format "ASCII"
87                         this is the root file name (data in 'name'.txt
88                         and header in 'name'_header.txt)
89   
90            format:      an optional file format. Default is ASAP.
91                         Allowed are:
92                            * 'ASAP' (save as ASAP [aips++] Table),
93                            * 'SDFITS' (save as SDFITS file)
94                            * 'ASCII' (saves as ascii text file)
95                            * 'MS2' (saves as an casacore MeasurementSet V2)
96                            * 'FITS' (save as image FITS - not readable by class)
97                            * 'CLASS' (save as FITS readable by CLASS)
98   
99            overwrite:   If the file should be overwritten if it exists.
100                         The default False is to return with warning
101                         without writing the output. USE WITH CARE.
102        """
103        if not self._data:
104            raise RuntimeError("No scantable has been set yet.")
105        # simply calls scantable.save
106        self._data.save(name,format,overwrite)
107
108    def set_data(self, scan, refresh=True):
109        if self._is_new_scan(scan):
110            self._ismodified = False
111        asapplotter.set_data(self, scan, refresh)
112    set_data.__doc__ = asapplotter.set_data.__doc__
113
114    @asaplog_post_dec
115    def plot(self, scan=None):
116        if self._is_new_scan(scan):
117            self._ismodified = False
118        asapplotter.plot(self,scan)
119    plot.__doc__ = asapplotter.plot.__doc__
120
121    @asaplog_post_dec
122    def _plot(self, scan):
123        asapplotter._plot(self,scan)
124        # rescale x-range of subplots 5% margins
125        ganged = (self._plotter.axes._sharex != None)
126        if ganged:
127            np = 1
128        else:
129            np = len(self._plotter.subplots)
130        for ip in xrange(np):
131            ax = self._plotter.subplots[ip]['axes']
132            lim0 = ax.get_xlim()
133            offset = (lim0[1]-lim0[0])*0.05
134            ax.set_xlim(lim0[0]-offset,lim0[1]+offset)
135            del ax, lim0, offset
136    _plot.__doc__ = asapplotter._plot.__doc__
137
138    def _is_new_scan(self,scan):
139        if isinstance(scan, scantable):
140            if self._data is not None:
141                if scan != self._data:
142                    return True
143            else:
144                return True
145        return False
Note: See TracBrowser for help on using the repository browser.