source: nappy/trunk/nappy/na_file/na_file_1010.py @ 3515

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

Annotation column

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"""
6naFile1010.py
7=============
8
9Container module for NAFile1010 class.
10
11"""
12
13# 08/05/04 updated by selatham for bug fixes and new write methods
14
15# Imports from python standard library
16
17# Imports from local package
18import nappy.utils.text_parser
19import nappy.na_file.na_file_1001
20import nappy.utils.common_utils
21getAnnotation = nappy.utils.common_utils.getAnnotation
22
23class NAFile1010(nappy.na_file.na_file.NAFile):
24    """
25    Class to read, write and interact with NASA Ames files conforming to the
26    File Format Index (FFI) 1010.
27    """
28
29    def readHeader(self):
30        """
31        Reads FFI-specifc header section.
32        """       
33        self._readCommonHeader()
34        self.DX = nappy.utils.text_parser.readItemsFromLine(self.file.readline(), self.NIV, float)
35        self.XNAME = nappy.utils.text_parser.readItemsFromLines(self._readLines(self.NIV), self.NIV, str)
36        self._readVariablesHeaderSection()
37        self._readAuxVariablesHeaderSection()
38        self._readComments()
39
40    def writeHeader(self):                                                             
41        """                                                                                     
42        Writes FFI-specifc header section.                                     
43        """                                                                                     
44        self._writeCommonHeader()                                               
45        annotation = getAnnotation("DX", self.annotation, delimiter = self.delimiter)
46        self.header.write((annotation + "%s " * self.NIV + "\n") % tuple(self.DX))             
47        annotation = getAnnotation("XNAME", self.annotation, delimiter = self.delimiter)
48        self.header.write((annotation + "%s\n") * self.NIV % tuple(self.XNAME))                 
49        self._writeVariablesHeaderSection()                                     
50        self._writeAuxVariablesHeaderSection()                                 
51        self._writeComments()                                                   
52        self._fixHeaderLength()
53        self.file.write(self.header.read())
54
55    def _setupArrays(self):
56        """
57        Sets up FFI-specific arrays to fill with data (lists of lists).
58        """       
59        self.X = []
60        self.V = []
61        self.A = []
62
63        for n in range(self.NV):
64            self.V.append([])
65        for a in range(self.NAUXV):
66            self.A.append([])
67
68    def _readData1(self, datalines, ivar_count): 
69        """
70        Reads first line/section of current block of data.
71        """
72        # Start with independent and Auxilliary vars
73        (x2_and_a, rtlines) = nappy.utils.text_parser.readItemsFromUnknownLines(datalines, 1 + self.NAUXV, float)
74        (x, aux) = (x2_and_a[0], x2_and_a[1:])
75        self.X.append(x)
76
77        count = 0
78        for a in range(self.NAUXV):
79            self.A[a].append(aux[count])
80            count = count + 1
81        return rtlines
82   
83    def _readData2(self, datalines, ivar_count):
84        """
85        Reads second line/section (if used) of current block of data.
86        """       
87        # Now get the dependent variables
88        (v, rtlines) = nappy.utils.text_parser.readItemsFromUnknownLines(datalines, self.NV, float)             
89                                       
90        count = 0
91        for n in range(self.NV):                               
92            self.V[n].append(v[count])                                                 
93            count = count + 1
94
95        return rtlines
96
97    def writeData(self):                                                                       
98         """                                                                                   
99         Writes the data section of the file.                                           
100         This method can be called directly by the user.                       
101         """                                                                                   
102         for m in range(len(self.X)):                                                   
103             # Write Independent variable mark and auxiliary variables         
104             var_string = self.format % self.X[m]   
105                                       
106             for a in range(self.NAUXV):                                               
107                 var_string = var_string + (self.format % self.A[a][m])
108       
109             self.file.write("%s\n" % var_string.rstrip(" ,")) 
110                       
111             # Write dependant variables                                               
112             var_string = ""                                                           
113             for n in range(self.NV):                                                   
114                  var_string = var_string + (self.format % self.V[n][m])       
115       
116             self.file.write("%s\n" % var_string.rstrip(' ,'))                                 
Note: See TracBrowser for help on using the repository browser.