Skip to content

Commit accb977

Browse files
unidesignermatthew-brett
authored andcommitted
BF - binary gifti write. Add test
1 parent 12e00cc commit accb977

File tree

3 files changed

+95
-7
lines changed

3 files changed

+95
-7
lines changed

nibabel/gifti/gifti.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -204,10 +204,7 @@ def data_tag(dataarray, encoding, datatype, ordering):
204204
da = c.read()
205205

206206
elif encoding == "GIFTI_ENCODING_B64BIN":
207-
cout = StringIO()
208-
base64.encode(dataarray.tostring(ord), cout)
209-
cout.seek(0)
210-
da = cout.read()
207+
da = base64.encodestring(dataarray.tostring(ord))
211208

212209
elif encoding == "GIFTI_ENCODING_B64GZ":
213210
# first compress
@@ -221,7 +218,7 @@ def data_tag(dataarray, encoding, datatype, ordering):
221218
else:
222219
da = ''
223220

224-
return "<Data>\n"+da+"</Data>\n"
221+
return "<Data>"+da+"</Data>\n"
225222

226223
class GiftiDataArray(object):
227224

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!DOCTYPE GIFTI SYSTEM "http://www.nitrc.org/frs/download.php/115/gifti.dtd">
3+
<GIFTI Version="1.0" NumberOfDataArrays="2">
4+
<MetaData>
5+
<MD>
6+
<Name><![CDATA[gifticlib-version]]></Name>
7+
<Value><![CDATA[gifti library version 1.08, 8 March, 2010]]></Value>
8+
</MD>
9+
</MetaData>
10+
<LabelTable/>
11+
<DataArray Intent="NIFTI_INTENT_POINTSET"
12+
DataType="NIFTI_TYPE_FLOAT32"
13+
ArrayIndexingOrder="RowMajorOrder"
14+
Dimensionality="2"
15+
Dim0="10"
16+
Dim1="3"
17+
Encoding="GIFTI_ENCODING_B64BIN"
18+
Endian="GIFTI_ENDIAN_LITTLE"
19+
ExternalFileName=""
20+
ExternalFileOffset="">
21+
<MetaData/>
22+
<CoordinateSystemTransformMatrix>
23+
<DataSpace><![CDATA[NIFTI_XFORM_UNKNOWN]]></DataSpace>
24+
<TransformedSpace><![CDATA[NIFTI_XFORM_UNKNOWN]]></TransformedSpace>
25+
<MatrixData>
26+
1.000000 0.000000 0.000000 0.000000
27+
0.000000 1.000000 0.000000 0.000000
28+
0.000000 0.000000 1.000000 0.000000
29+
0.000000 0.000000 0.000000 1.000000
30+
</MatrixData>
31+
</CoordinateSystemTransformMatrix>
32+
<Data>5ywbQ7+UB0NDncRC+VYMQ5QMPkPbfpJCIlwdQ836REPyUKdCNXYrQ8ZvCUMh8ZxCwosUQ5MiwkJv
33+
7YNC/un2QtTv3kLYtoRCFk8HQ4ZJSkOkhhFCFEgyQz6YIkNSARdCYhwyQ4+T5kIvuGRC2tAOQ26k
34+
pUIqLfhB
35+
</Data>
36+
</DataArray>
37+
<DataArray Intent="NIFTI_INTENT_TRIANGLE"
38+
DataType="NIFTI_TYPE_INT32"
39+
ArrayIndexingOrder="RowMajorOrder"
40+
Dimensionality="2"
41+
Dim0="10"
42+
Dim1="3"
43+
Encoding="GIFTI_ENCODING_B64BIN"
44+
Endian="GIFTI_ENDIAN_LITTLE"
45+
ExternalFileName=""
46+
ExternalFileOffset="">
47+
<MetaData/>
48+
<CoordinateSystemTransformMatrix>
49+
<DataSpace><![CDATA[NIFTI_XFORM_UNKNOWN]]></DataSpace>
50+
<TransformedSpace><![CDATA[NIFTI_XFORM_UNKNOWN]]></TransformedSpace>
51+
<MatrixData>
52+
1.000000 0.000000 0.000000 0.000000
53+
0.000000 1.000000 0.000000 0.000000
54+
0.000000 0.000000 1.000000 0.000000
55+
0.000000 0.000000 0.000000 1.000000
56+
</MatrixData>
57+
</CoordinateSystemTransformMatrix>
58+
<Data>AhkAAANGAAACZAAABTcAAAJkAAADRgAAAmQAAAU3AACDEQAAA0YAAEIGAAAFNwAAgxEAAANkAAAC
59+
ZAAABGQAAAJkAAADZAAAAmQAAARkAAACGQAAA2QAAMUNAAAEZAAAYwQAAAJGAACILwAABGQAAIgv
60+
AAACRgAA
61+
</Data>
62+
</DataArray>
63+
</GIFTI>

nibabel/gifti/tests/test_giftiio.py

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,10 @@
3131
DATA_FILE2 = pjoin(IO_DATA_PATH, 'gzipbase64.gii')
3232
DATA_FILE3 = pjoin(IO_DATA_PATH, 'label.gii')
3333
DATA_FILE4 = pjoin(IO_DATA_PATH, 'rh.shape.curv.gii')
34+
DATA_FILE5 = pjoin(IO_DATA_PATH, 'base64bin.gii')
3435

35-
datafiles = [DATA_FILE1, DATA_FILE2, DATA_FILE3, DATA_FILE4]
36-
numda = [2, 1, 1, 1]
36+
datafiles = [DATA_FILE1, DATA_FILE2, DATA_FILE3, DATA_FILE4, DATA_FILE5]
37+
numda = [2, 1, 1, 1, 2]
3738

3839
DATA_FILE1_darr1 = np.array(
3940
[[-16.07201 , -66.187515, 21.266994],
@@ -65,6 +66,28 @@
6566
[-0.45624232],
6667
[-0.31101292]], dtype=np.float32)
6768

69+
DATA_FILE5_darr1 = np.array([[ 155.17539978, 135.58103943, 98.30715179],
70+
[ 140.33973694, 190.0491333 , 73.24776459],
71+
[ 157.3598938 , 196.97969055, 83.65809631],
72+
[ 171.46174622, 137.43661499, 78.4709549 ],
73+
[ 148.54592896, 97.06752777, 65.96373749],
74+
[ 123.45701599, 111.46841431, 66.3571167 ],
75+
[ 135.30892944, 202.28720093, 36.38148499],
76+
[ 178.28155518, 162.59469604, 37.75128937],
77+
[ 178.11087036, 115.28820038, 57.17986679],
78+
[ 142.81582642, 82.82115173, 31.02205276]], dtype=np.float32)
79+
80+
81+
DATA_FILE5_darr2 = np.array([[ 6402, 17923, 25602],
82+
[14085, 25602, 17923],
83+
[25602, 14085, 4483],
84+
[17923, 1602, 14085],
85+
[ 4483, 25603, 25602],
86+
[25604, 25602, 25603],
87+
[25602, 25604, 6402],
88+
[25603, 3525, 25604],
89+
[ 1123, 17922, 12168],
90+
[25604, 12168, 17922]], dtype=np.int32)
6891

6992
def test_read_ordering():
7093
# DATA_FILE1 has an expected darray[0].data shape of (3,3). However if we
@@ -116,6 +139,11 @@ def test_dataarray3():
116139
def test_dataarray4():
117140
img4 = gi.read(DATA_FILE4)
118141
assert_array_almost_equal(img4.darrays[0].data[:10], DATA_FILE4_darr1)
142+
143+
def test_dataarray5():
144+
img3 = gi.read(DATA_FILE5)
145+
assert_array_almost_equal(img3.darrays[0].data, DATA_FILE5_darr1)
146+
assert_array_almost_equal(img3.darrays[1].data, DATA_FILE5_darr2)
119147

120148
def test_readwritedata():
121149
img = gi.read(DATA_FILE2)

0 commit comments

Comments
 (0)