@@ -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