source: trunk/python/flagplotter.py@ 2508

Last change on this file since 2508 was 2453, checked in by Kana Sugimoto, 13 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.