source: nappy/trunk/naCore.py @ 349

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/nappy/trunk/naCore.py@349
Revision 349, 5.5 KB checked in by selatham, 15 years ago (diff)

Inserted license information.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1#   Copyright (C) 2004 CCLRC & NERC( Natural Environment Research Council ).
2#   This software may be distributed under the terms of the
3#   Q Public License, version 1.0 or later. http://ndg.nerc.ac.uk/public_docs/QPublic_license.txt
4
5"""
6naCore.py
7=========
8
9Holds the NACore class that holds the None type version
10of all the possible NASA Ames variables described in the Gaines
11and Hipkind documents. It also holds a number of useful methods
12for accessing metadata within the file.
13
14"""
15
16# Imports from standard python library
17import re
18
19class NACore:
20
21    pattnBrackets=re.compile("^\s*(.*)\((.+?)\)(.*)\s*$")
22
23    def __init__(self):
24
25        self.A=None
26        self.AMISS=None
27        self.ANAME=None
28        self.ASCAL=None
29        self.DATE=None
30        self.DX=None
31        self.FFI=None
32        self.IVOL=None
33        self.LENA=None
34        self.LENX=None
35        self.MNAME=None
36        self.NAUXC=None
37        self.NAUXV=None
38        self.NCOM=None
39        self.NIV=None
40        self.NLHEAD=None
41        self.NNCOML=None
42        self.NSCOML=None
43        self.NV=None
44        self.NVOL=None
45        self.NVPM=None
46        self.NX=None
47        self.NXDEF=None
48        self.ONAME=None
49        self.ORG=None
50        self.RDATE=None
51        self.SCOM=None
52        self.SNAME=None
53        self.V=None
54        self.VMISS=None
55        self.VNAME=None
56        self.VSCAL=None
57        self.X=None
58        self.XNAME=None       
59
60    def getNADict(self):
61        allNAVars={"A":self.A, "AMISS":self.AMISS, "ANAME":self.ANAME,
62                     "ASCAL":self.ASCAL, "DATE":self.DATE, "DX":self.DX,
63                     "FFI":self.FFI, "IVOL":self.IVOL, "LENA":self.LENA,
64                     "LENX":self.LENX, "MNAME":self.MNAME, "NAUXC":self.NAUXC,
65                     "NAUXV":self.NAUXV, "NCOM":self.NCOM, "NIV":self.NIV,
66                     "NLHEAD":self.NLHEAD, "NNCOML":self.NNCOML,
67                     "NSCOML":self.NSCOML, "NV":self.NV, "NVOL":self.NVOL,
68                     "NVPM":self.NVPM, "NX":self.NX, "NXDEF":self.NXDEF,
69                     "ONAME":self.ONAME, "ORG":self.ORG, "RDATE":self.RDATE,
70                     "SCOM":self.SCOM, "SNAME":self.SNAME, "V":self.V,
71                     "VMISS":self.VMISS, "VNAME":self.VNAME, "VSCAL":self.VSCAL,
72                     "X":self.X, "XNAME":self.XNAME}
73        self.naDict={}
74        for i in allNAVars.keys():
75            if allNAVars[i]!=None:
76                self.naDict[i]=allNAVars[i]
77        return self.naDict
78
79    def __getitem__(self, item):
80        """Need to return whatever user wants and to translate
81        NASA Ames variables such as 'NIV' to explanatory strings
82        such as 'number_of_independent_variables'. Need a map for
83        this defined at top of the nasaAmesData.py module"""
84        if hasattr(self, item):
85            return getattr(self, item)
86        else:
87            return "Item '%s' not found." % item
88
89    def getVariable(self, var_number):       
90        match=NACore.pattnBrackets.match(self.VNAME[var_number])
91        if match:
92            (v1, units, v2)=match.groups()
93            variable=v1+" "+v2
94        else:
95            (variable, units)=(self.VNAME[var_number], None)
96        miss=self.getMissingValue(var_number)
97        scale=self.getScaleFactor(var_number)
98        return (variable.strip(), units, miss, scale)
99
100    def getIndependentVariable(self, ivar_number):
101        match=NACore.pattnBrackets.match(self.XNAME[ivar_number])
102        if match:
103            (v1, units, v2)=match.groups()
104            variable=v1+" "+v2
105        else:
106            (variable, units)=(self.XNAME[ivar_number], None)
107        return (variable.strip(), units)
108
109    def getAuxVariable(self, avar_number):       
110        match=NACore.pattnBrackets.match(self.ANAME[avar_number])
111        if match:
112            (v1, units, v2)=match.groups()
113            variable=v1+" "+v2
114        else:
115            (variable, units)=(self.ANAME[avar_number], None)
116        miss=self.getAuxMissingValue(avar_number)
117        scale=self.getAuxScaleFactor(avar_number)
118        return (variable.strip(), units, miss, scale)   
119
120    def getVariables(self):
121        vars=[]
122        for i in range(self.NV):
123            vars.append(self.getVariable(i))
124        return vars
125
126    def getIndependentVariables(self):
127        ivars=[]
128        for i in range(self.NIV):
129            ivars.append(self.getIndependentVariable(i))
130        return ivars
131
132    def getAuxVariables(self):
133        avars=[]
134        if not hasattr(self, "NAUXV"):
135            for i in range(self.NAUXV):
136                avars.append(self.getAuxVariable(i))
137        else:
138            avars=[]
139        return avars
140
141    def getMissingValue(self, var_number):
142        return self.VMISS[var_number]
143
144    def getScaleFactor(self, var_number):
145        return self.VSCAL[var_number]
146
147    def getAuxMissingValue(self, avar_number):
148        return self.AMISS[avar_number]
149
150    def getAuxScaleFactor(self, avar_number):
151        return self.ASCAL[avar_number]
152
153    def getNumHeaderLines(self):
154        return self.NLHEAD
155
156    def getFFI(self):
157        return self.FFI
158
159    def getOriginator(self):
160        return self.ONAME
161
162    def getOrganisation(self):
163        return self.ORG
164
165    def getOrg(self):
166        return self.getOrganisation()
167
168    def getSource(self):
169        return self.SNAME
170
171    def getMission(self):
172        return self.MNAME
173
174    def getVolumes(self):
175        return (self.IVOL, self.NVOL)
176
177    def getFileDates(self):
178        return (self.DATE, self.RDATE)
179
180    def getNormalComments(self):
181        return self.NCOM
182
183    def getSpecialComments(self):
184        return self.SCOM
185
Note: See TracBrowser for help on using the repository browser.