Skip to content

Commit eafb92e

Browse files
authored
Merge pull request #138 from simularium/feature/binary-reader-leaves-binary-spatial-data
Feature/binary reader leaves binary spatial data
2 parents 1c48331 + c86d115 commit eafb92e

File tree

1 file changed

+28
-8
lines changed

1 file changed

+28
-8
lines changed

simulariumio/readers/simularium_binary_reader.py

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -124,8 +124,10 @@ def _binary_block_json(
124124
def _binary_block_spatial_data(
125125
block_index: int,
126126
block_info: BinaryBlockInfo,
127+
data_as_bytes: np.ndarray,
127128
data_as_ints: np.ndarray,
128129
data_as_floats: np.ndarray,
130+
parse_data_as_binary: bool,
129131
) -> Dict[str, Any]:
130132
"""
131133
Parse spatial data binary block from a .simularium binary file
@@ -151,26 +153,42 @@ def _binary_block_spatial_data(
151153
if index == 0:
152154
result["bundleStart"] = frame_index
153155
frame_n_values = int(frame_lengths[index] / BINARY_SETTINGS.BYTES_PER_VALUE)
156+
if parse_data_as_binary:
157+
data = data_as_bytes[
158+
4 * (current_frame_offset + 3) :
159+
4 * (current_frame_offset + frame_n_values)
160+
]
161+
else:
162+
data = list(
163+
data_as_floats[
164+
current_frame_offset + 3 : current_frame_offset + frame_n_values
165+
]
166+
)
154167
result["bundleData"].append(
155168
{
156169
"frameNumber": frame_index,
157170
"time": data_as_floats[current_frame_offset + 1],
158-
"data": list(
159-
data_as_floats[
160-
current_frame_offset
161-
+ 3 : current_frame_offset
162-
+ frame_n_values
163-
]
164-
),
171+
"nAgents": data_as_ints[current_frame_offset + 2],
172+
"data": data,
165173
}
166174
)
167175
current_frame_offset += frame_n_values
168176
return result
169177

170178
@staticmethod
171-
def load_binary(input_file: InputFileData) -> Dict[str, Any]:
179+
def load_binary(
180+
input_file: InputFileData, parse_spatial_data_as_binary: bool = False
181+
) -> Dict[str, Any]:
172182
"""
173183
Load data from the input file in .simularium binary format and update it.
184+
185+
Parameters
186+
----------
187+
input_file: InputFileData
188+
A InputFileData object containing binary .simularium data to load
189+
parse_spatial_data_as_binary: bool (optional)
190+
Leave spatial data binary encoded in returned dict?
191+
Default = False
174192
"""
175193
result = {}
176194
binary_data = SimulariumBinaryReader._binary_data_from_source(input_file)
@@ -209,8 +227,10 @@ def load_binary(input_file: InputFileData) -> Dict[str, Any]:
209227
result[block_type] = SimulariumBinaryReader._binary_block_spatial_data(
210228
block_index,
211229
block_info,
230+
binary_data.byte_view,
212231
binary_data.int_view,
213232
binary_data.float_view,
233+
parse_spatial_data_as_binary,
214234
)
215235
else:
216236
raise DataError(

0 commit comments

Comments
 (0)