source: branches/polybatch/python/linecatalog.py@ 2582

Last change on this file since 2582 was 1865, checked in by Malte Marquarding, 14 years ago

Fixed docstrings fro sphinx

  • Property svn:keywords set to Date Revision
File size: 3.9 KB
Line 
1"""\
2A representation of a spectral line catalog.
3"""
4__revision__ = "$Revision: 1865 $"
5from asap._asap import linecatalog as lcbase
6from asap.logging import asaplog
7import os
8
9class linecatalog(lcbase):
10 """\
11 This class is a warpper for line catalogs. These can be either ASCII tables
12 or the tables saved from this class.
13
14 ASCII tables have the following restrictions:
15
16 * Comments can be present through lines starting with '#'.
17
18 * The first column contains the name of the Molecule. This can't contain
19 spaces, if it does it has to be wrapped in double-quotes.
20
21 * The second column contains the frequency of the transition.
22
23 * The third column contains the error in frequency.
24
25 * The fourth column contains a value describing the intensity.
26
27 """
28
29 def __init__(self, name):
30 fpath = os.path.abspath(os.path.expandvars(os.path.expanduser(name)))
31 if os.path.exists(fpath):
32 lcbase.__init__(self, fpath)
33 else:
34 msg = "File '%s' not found" % fpath
35 raise IOError(msg)
36
37 def __repr__(self):
38 return lcbase.summary(self, -1)
39
40 def summary(self):
41 """
42 Print the contents of the table.
43 """
44 try:
45 from IPython.genutils import page as pager
46 except ImportError:
47 from pydoc import pager
48 pager(lcbase.summary(self, -1))
49
50 def set_name(self, name, mode="pattern"):
51 """\
52 Set a name restriction on the table. This can be a standard unix-style
53 pattern or a regular expression.
54
55 Parameters:
56
57 name: the name patterrn/regex
58
59 mode: the matching mode, i.e. "pattern" (default) or "regex"
60
61 """
62 validmodes = "pattern regex".split()
63 if not mode.lower() in validmodes:
64 return
65 lcbase.set_name(self, name, mode)
66
67 def set_frequency_limits(self, fmin=1.0, fmax=120.0, unit="GHz"):
68 """\
69 Set frequency limits on the table.
70
71 Parameters:
72
73 fmin: the lower bound
74
75 fmax: the upper bound
76
77 unit: the frequency unit (default "GHz")
78
79 .. note:: The underlying table contains frequency values in MHz
80 """
81 base = { "GHz": 1000.0, "MHz": 1.0 }
82 if not base.has_key(unit):
83 raise ValueError("%s is not a valid unit." % unit)
84 # the table conatins values in MHz
85 lcbase.set_frequency_limits(self, fmin*base[unit], fmax*base[unit])
86
87 def set_strength_limits(self, smin, smax):
88 """\
89 Set line strength limits on the table (arbitrary units)
90
91 Parameters:
92
93 smin: the lower bound
94
95 smax: the upper bound
96
97 """
98 lcbase.set_strength_limits(self, smin, smax)
99
100 def save(self, name, overwrite=False):
101 """\
102 Save the subset of the table to disk. This uses an internal data format
103 and can be read in again.
104 """
105 name = os.path.expanduser(os.path.expandvars(name))
106 if os.path.isfile(name) or os.path.isdir(name):
107 if not overwrite:
108 msg = "File %s exists." % name
109 raise IOError(msg)
110 lcbase.save(self, name)
111
112 def reset(self):
113 """\
114 Reset the table to its initial state, i.e. undo all calls to ``set_``.
115 """
116 lcbase.reset(self)
117
118 def get_row(self, row=0):
119 """\
120 Get the values in a specified row of the table.
121
122 Parameters:
123
124 row: the row to retrieve
125
126 """
127 if row < 0 or row > len(self)-1:
128 raise IndexError("Row index out of bounds.")
129 freq = lcbase.get_frequency(self, row)
130 name = lcbase.get_name(self, row)
131 return { 'name':name, 'value': freq }
132
133 def __len__(self):
134 return self.nrow()
135
136 def __getitem__(self, k):
137 if k < 0:
138 k = self.nrow()-k
139 return self.get_row(k)
Note: See TracBrowser for help on using the repository browser.