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

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

Fixed a bug in line 77 writing to file instead of header attribute.

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