Skip to content

Commit 7de1879

Browse files
author
Adam Capparelli
committed
Added support for NDACC AMES 2160 file variant.
1 parent 93edfd4 commit 7de1879

File tree

7 files changed

+5079
-8
lines changed

7 files changed

+5079
-8
lines changed

example_files/2160_ndacc.na

+5,046
Large diffs are not rendered by default.

nappy/na_file/na_core.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ class is sub-classed by all NAFile classes.
3030
"NAUXV", "NCOM", "NIV", "NLHEAD", "NNCOML",
3131
"NSCOML", "NV", "NVOL", "NVPM", "NX", "NXDEF",
3232
"ONAME", "ORG", "RDATE", "SCOM", "SNAME", "V",
33-
"VMISS", "VNAME", "VSCAL", "X", "XNAME")
33+
"VMISS", "VNAME", "VSCAL", "X", "XNAME", "ignored_header_lines")
3434

3535
def __init__(self):
3636
"""

nappy/na_file/na_file.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ class NAFile(nappy.na_file.na_core.NACore):
5454
the user forgets to close it.
5555
"""
5656

57-
def __init__(self, filename, mode="r", na_dict={}):
57+
def __init__(self, filename, ignore_header_lines=0, mode="r", na_dict={}):
5858
"""
5959
Initialization of class, decides if user wishes to read or write
6060
NASA Ames file.
@@ -63,6 +63,8 @@ def __init__(self, filename, mode="r", na_dict={}):
6363
self.filename = filename
6464
self._open(mode)
6565
self.mode = mode
66+
self.ignore_header_lines = ignore_header_lines
67+
self.ignored_header_lines = []
6668
self.na_dict = na_dict
6769

6870
if self.mode == "r":

nappy/na_file/na_file_2160.py

+10-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,12 @@ def readHeader(self):
3030
Reads FFI-specifc header section.
3131
"""
3232
self._normalized_X = False
33+
34+
for i in range(self.ignore_header_lines):
35+
self.ignored_header_lines.append(nappy.utils.text_parser.readItemFromLine(self.file.readline()))
36+
3337
self._readCommonHeader()
38+
self.NLHEAD+=self.ignore_header_lines
3439
self.DX = nappy.utils.text_parser.readItemsFromLine(self.file.readline(), 1, float)
3540
self.LENX = nappy.utils.text_parser.readItemFromLine(self.file.readline(), float)
3641
self.XNAME = nappy.utils.text_parser.readItemsFromLines(self._readLines(self.NIV), self.NIV, str)
@@ -43,6 +48,10 @@ def writeHeader(self):
4348
"""
4449
Writes FFI-specific header section.
4550
"""
51+
if self.ignored_header_lines:
52+
self.file.write("\n".join(self.ignored_header_lines))
53+
self.file.write("\n")
54+
4655
self._writeCommonHeader()
4756
DX = self.DX
4857
DX.reverse()
@@ -101,7 +110,7 @@ def _readData1(self, datalines, ivar_count):
101110
self.X[ivar_count].append(x1[0])
102111
# Set up list to take second changing independent variable
103112
self.X[ivar_count].append([])
104-
113+
105114
# Get NX and Non-character AUX vars
106115
(aux, datalines) = nappy.utils.text_parser.readItemsFromUnknownLines(datalines, (self.NAUXV - self.NAUXC), float)
107116
self.NX.append(int(aux[0]))

nappy/nappy_api.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -153,15 +153,15 @@
153153
default_float_format = nappy.utils.common_utils.getDefault("default_float_format")
154154

155155

156-
def openNAFile(filename, mode="r", na_dict=None):
156+
def openNAFile(filename, mode="r", na_dict=None, ignore_header_lines=0):
157157
"""
158158
Function wrapper around the NASA Ames File classes. Any NASA Ames
159159
file can be opened through this function and the appropriate read or
160160
write NASA Ames File class instance is returned.
161161
"""
162162
if mode == "r":
163-
ffi = readFFI(filename)
164-
return apply(getNAFileClass(ffi), (filename, mode))
163+
ffi = readFFI(filename, ignore_header_lines)
164+
return apply(getNAFileClass(ffi), (filename, ignore_header_lines, mode))
165165

166166
elif mode == "w":
167167
if na_dict.has_key('FFI') and type(na_dict['FFI']) == type(3):

nappy/utils/common_utils.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,14 @@ def getNAFileClass(ffi):
3131
return eval("%s.%s" % (mod, cls))
3232

3333

34-
def readFFI(filename):
34+
def readFFI(filename, ignore_header_lines):
3535
"""
3636
Function to read the top line of a NASA Ames file to extract
3737
the File Format Index (FFI) and return it as an integer.
3838
"""
3939
with open(filename) as fin:
40+
for i in range(ignore_header_lines):
41+
fin.readline()
4042
topline = fin.readline()
4143
nextline = fin.readline()
4244

tests/test_na_file_2160.py

+13-1
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,18 @@ class NAFile2160_TestCase(unittest.TestCase):
2222

2323
def setUp(self):
2424
self.infile = os.path.join(data_files, "2160.na")
25+
self.ndacc_infile = os.path.join(data_files, "2160_ndacc.na")
2526
self.outfile = os.path.join(test_outputs, "test_2160.na")
27+
self.ndacc_outfile = os.path.join(test_outputs, "test_2160_ndacc.na")
2628
self.out_csv = os.path.join(test_outputs, "test_2160.csv")
2729
self.out_csv_annotated = os.path.join(test_outputs, "test_2160_annotated.csv")
2830
self.fin = nappy.openNAFile(self.infile)
2931
self.fin.readData()
30-
self.na_dict = self.fin.getNADict()
32+
self.na_dict = self.fin.getNADict()
33+
34+
self.ndacc_fin = nappy.openNAFile(self.ndacc_infile, ignore_header_lines=1)
35+
self.ndacc_fin.readData()
36+
self.ndacc_na_dict = self.ndacc_fin.getNADict()
3137

3238
def test_read2160(self):
3339
"Tests reading FFI 2160."
@@ -38,6 +44,12 @@ def test_write2160(self):
3844
fobj = nappy.openNAFile(self.outfile, mode="w", na_dict=self.na_dict)
3945
fobj.write()
4046
self.failUnless(isinstance(fobj, nappy.na_file.na_file.NAFile))
47+
48+
def test_write_ndacc(self):
49+
"Tests writing FFI 2160 NDACC format."
50+
fobj = nappy.openNAFile(self.ndacc_outfile, mode="w", na_dict=self.ndacc_na_dict)
51+
fobj.write()
52+
self.failUnless(isinstance(fobj, nappy.na_file.na_file.NAFile))
4153

4254
def test_writeCSV2160(self):
4355
"Tests conversion to CSV."

0 commit comments

Comments
 (0)