source: nappy/trunk/nappy/na_file/na_file_1020.py @ 3519

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/nappy/trunk/nappy/na_file/na_file_1020.py@3519
Revision 3519, 4.3 KB checked in by ckilburn, 12 years ago (diff)

Annotation

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"""
6naFile1020.py
7=============
8
9Container module for NAFile1020 class.
10
11"""
12
13# Imports from python standard library
14
15
16# Imports from local package
17import nappy.utils.text_parser
18import nappy.na_file.na_file_1010
19import nappy.utils.common_utils
20wrapLine = nappy.utils.common_utils.annotateLine
21wrapLines = nappy.utils.common_utils.annotateLines
22
23class NAFile1020(nappy.na_file.na_file_1010.NAFile1010):
24    """
25    Class to read, write and interact with NASA Ames files conforming to the
26    File Format Index (FFI) 1020.
27    """
28
29    def readHeader(self):
30        """
31        Reads FFI-specifc header section.
32        """   
33        self._normalized_X = False
34        self._readCommonHeader()
35        self.DX = nappy.utils.text_parser.readItemsFromLine(self.file.readline(), self.NIV, float)
36        if self.DX == 0:
37            raise "DX found to be zero (0). Not allowed for FFI 1020."
38
39        self.NVPM = nappy.utils.text_parser.readItemFromLine(self.file.readline(), int)
40        self.XNAME = nappy.utils.text_parser.readItemsFromLines(self._readLines(self.NIV), self.NIV, str)
41        self._readVariablesHeaderSection()
42        self._readAuxVariablesHeaderSection()
43        self._readComments()
44 
45    def writeHeader(self):                                                                             
46        """                                                                                                     
47        Writes FFI-specifc header section.                                             
48        """                                                                                             
49        self._writeCommonHeader()                                                               
50        self.header.write(wrapLine("DX", self.annotation, self.delimiter, ("%s " * self.NIV + "\n") % tuple(self.DX)))
51        self.header.write(wrapLine("NVPM", self.annotation, self.delimiter, ("%s\n") %self.NVPM))                                                       
52        self.header.write(wrapLine("XNAME", self.annotation, self.delimiter, ("%s\n") * self.NIV % tuple(self.XNAME)))
53        self._writeVariablesHeaderSection()                                             
54        self._writeAuxVariablesHeaderSection()                                                 
55        self._writeComments()                                                           
56        self._fixHeaderLength()
57        self.file.write(self.header.read())
58
59    def _readData2(self, datalines, ivar_count):
60        """
61        Reads second line/section (if used) of current block of data.
62        """
63        # Now get the dependent variables
64        (v, rtlines) = nappy.utils.text_parser.readItemsFromUnknownLines(datalines, self.NV * self.NVPM, float)             
65        count = 0
66        for n in range(self.NV):
67            for i in range(self.NVPM):   # Number of steps where independent variable is implied
68                self.V[n].append(v[count])                                             
69                count = count + 1                                                                               
70        return rtlines
71
72    def _normalizeIndVars(self):
73        """
74        Normalizes the values in the unbounded independent variable for FFIs
75        that store an abbreviated version of this axis.
76        """
77        if self._normalized_X == True: return
78        newX = []
79        for x in self.X[0]:
80            for i in range(self.NVPM):
81                newX.append(x + (i * self.DX))
82
83        self.X[0] = newX
84        self._normalized_X = True
85
86    def writeData(self):                                                                               
87         """                                                                                                   
88         Writes the data section of the file.                                                           
89         This method can be called directly by the user.                                       
90         """                                                                                                   
91         for m in range(len(self.X)):                                                                   
92            # Write Independent variable mark and auxiliary variables                           
93            var_string = self.format % self.X[m]       
94                                               
95            for a in range(self.NAUXV):                                                                 
96                var_string = var_string + (self.format % self.A[a][m])   
97                       
98            self.file.write(wrapLine("Data", self.annotation, self.delimiter, "%s\n" % var_string.rstrip(" ,")))
99                               
100            # Write dependant variables                                                                                                                                         
101            count = 0                                                                                   
102            for n in range(self.NV):                                                                   
103                var_string = "" 
104                                                                       
105                for p in range(self.NVPM):                                                             
106                    var_ind = (m * self.NVPM) + p                                                       
107                    var_string = var_string + (self.format % self.V[n][var_ind])               
108                    count = count + 1   
109                                                               
110                self.file.write(wrapLine("Data", self.annotation, self.delimiter, "%s\n" %var_string.rstrip(' ,')))
111
Note: See TracBrowser for help on using the repository browser.