Skip to content

Commit 7281356

Browse files
authored
Cytosim Scaling Bug (#194)
* fix bug where we're erroneously repeatedly scaling all agent data * update test to calculate scale factor for multiple files * lint fixes
1 parent 3e83d3e commit 7281356

File tree

2 files changed

+134
-8
lines changed

2 files changed

+134
-8
lines changed

simulariumio/cytosim/cytosim_converter.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,6 @@ def _parse_objects(
191191
used_unique_IDs: List[int],
192192
overall_line: int,
193193
total_lines: int,
194-
scale_factor: float = None,
195194
) -> Tuple[Dict[str, Any], List[int], int]:
196195
"""
197196
Parse a Cytosim output file containing objects
@@ -274,12 +273,9 @@ def _parse_objects(
274273
)
275274
result.n_agents[time_index] += 1
276275
self.check_report_progress(overall_line / total_lines)
277-
result, scale_factor = TrajectoryConverter.scale_agent_data(
278-
result, scale_factor
279-
)
280276
result = TrajectoryConverter.center_fiber_positions(result)
281277
result.n_timesteps = time_index + 1
282-
return (result, used_unique_IDs, overall_line, scale_factor)
278+
return (result, used_unique_IDs, overall_line)
283279

284280
def _read(self, input_data: CytosimData) -> TrajectoryData:
285281
"""
@@ -310,18 +306,23 @@ def _read(self, input_data: CytosimData) -> TrajectoryData:
310306
uids = []
311307
for object_type in input_data.object_info:
312308
try:
313-
(agent_data, uids, overall_line, scale_factor) = self._parse_objects(
309+
(agent_data, uids, overall_line) = self._parse_objects(
314310
object_type,
315311
cytosim_data[object_type],
316312
input_data.object_info[object_type],
317313
agent_data,
318314
uids,
319315
overall_line,
320316
total_lines,
321-
input_data.meta_data.scale_factor,
322317
)
323318
except Exception as e:
324319
raise InputDataError(f"Error reading input cytosim data: {e}")
320+
321+
# scale agent data
322+
agent_data, scale_factor = TrajectoryConverter.scale_agent_data(
323+
agent_data, input_data.meta_data.scale_factor
324+
)
325+
325326
# get display data (geometry and color)
326327
for object_type in input_data.object_info:
327328
for tid in input_data.object_info[object_type].display_data:

simulariumio/tests/converters/test_cytosim_converter.py

Lines changed: 126 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ def test_box_size_provided(box_size, expected_box_size):
118118

119119
# value of automatically generated scale factor, so that position
120120
# data fits within VIEWER_DIMENSION_RANGE
121-
range = 0.400052 - -0.001
121+
range = 0.00808633 - -0.39575567
122122
auto_scale_factor = VIEWER_DIMENSION_RANGE.MIN / range
123123
name_0 = "fiber"
124124
radius_0 = 0.001
@@ -292,8 +292,12 @@ def test_agent_ids():
292292
assert JsonWriter._check_agent_ids_are_unique_per_frame(results_display_data)
293293

294294

295+
scale_factor_aster = 10
295296
# test data extraction from aster_pull3D example
296297
aster_pull3D_objects = CytosimData(
298+
meta_data=MetaData(
299+
scale_factor=scale_factor_aster
300+
),
297301
object_info={
298302
"fibers": CytosimObjectInfo(
299303
cytosim_file=InputFileData(
@@ -346,6 +350,127 @@ def test_parse_dimensions():
346350
assert dimension_data.max_subpoints == 18
347351

348352

353+
converter_aster = CytosimConverter(aster_pull3D_objects)
354+
results_aster = JsonWriter.format_trajectory_data(converter_aster._data)
355+
356+
357+
@pytest.mark.parametrize(
358+
"asterData, expected_asterData",
359+
[
360+
(
361+
results_aster["spatialData"]["bundleData"][0]["data"][0:49],
362+
[
363+
VIZ_TYPE.FIBER, # agent 1
364+
1.0, # id
365+
0.0, # type
366+
0.24166 * scale_factor_aster,
367+
0.50934 * scale_factor_aster,
368+
0.22896 * scale_factor_aster,
369+
0.0,
370+
0.0,
371+
0.0,
372+
1.0 * scale_factor_aster,
373+
15.0,
374+
0.12764 * scale_factor_aster,
375+
-0.14133999999999997 * scale_factor_aster,
376+
-0.061160000000000006 * scale_factor_aster,
377+
0.06384 * scale_factor_aster,
378+
-0.07064000000000001 * scale_factor_aster,
379+
-0.03056000000000001 * scale_factor_aster,
380+
4.000000000000669e-05 * scale_factor_aster,
381+
-4.000000000000114e-05 * scale_factor_aster,
382+
4.0000000000005316e-05 * scale_factor_aster,
383+
-0.06385999999999999 * scale_factor_aster,
384+
0.07065999999999997 * scale_factor_aster,
385+
0.030540000000000005 * scale_factor_aster,
386+
-0.12766000000000002 * scale_factor_aster,
387+
0.14135999999999999 * scale_factor_aster,
388+
0.061140000000000014 * scale_factor_aster,
389+
VIZ_TYPE.FIBER, # agent 2
390+
2.0,
391+
0.0,
392+
0.3733 * scale_factor_aster,
393+
0.2226 * scale_factor_aster,
394+
0.2044 * scale_factor_aster,
395+
0.0,
396+
0.0,
397+
0.0,
398+
1.0 * scale_factor_aster,
399+
12.0,
400+
-0.00399999999999999 * scale_factor_aster,
401+
0.1454 * scale_factor_aster,
402+
-0.036599999999999994 * scale_factor_aster,
403+
-0.0013000000000000095 * scale_factor_aster,
404+
0.048499999999999995 * scale_factor_aster,
405+
-0.012199999999999989 * scale_factor_aster,
406+
0.0012999999999999817 * scale_factor_aster,
407+
-0.04850000000000001 * scale_factor_aster,
408+
0.012199999999999989 * scale_factor_aster,
409+
0.004000000000000017 * scale_factor_aster,
410+
-0.1454 * scale_factor_aster,
411+
0.036599999999999994 * scale_factor_aster,
412+
],
413+
),
414+
(
415+
results_aster["spatialData"]["bundleData"][1]["data"][0:49],
416+
[
417+
VIZ_TYPE.FIBER,
418+
1.0,
419+
0.0,
420+
0.26803333333333335 * scale_factor_aster,
421+
0.48285 * scale_factor_aster,
422+
0.010500000000000002 * scale_factor_aster,
423+
0.0,
424+
0.0,
425+
0.0,
426+
1.0 * scale_factor_aster,
427+
18.0,
428+
0.17746666666666666 * scale_factor_aster,
429+
-0.14315 * scale_factor_aster,
430+
0.0781 * scale_factor_aster,
431+
0.09826666666666667 * scale_factor_aster,
432+
-0.10015000000000002 * scale_factor_aster,
433+
0.034600000000000006 * scale_factor_aster,
434+
0.02156666666666669 * scale_factor_aster,
435+
-0.05004999999999998 * scale_factor_aster,
436+
-0.005500000000000001 * scale_factor_aster,
437+
-0.04973333333333333 * scale_factor_aster,
438+
0.013249999999999984 * scale_factor_aster,
439+
-0.035699999999999996 * scale_factor_aster,
440+
-0.10803333333333334 * scale_factor_aster,
441+
0.09375 * scale_factor_aster,
442+
-0.046299999999999994 * scale_factor_aster,
443+
-0.13953333333333334 * scale_factor_aster,
444+
0.18635000000000002 * scale_factor_aster,
445+
-0.0252 * scale_factor_aster,
446+
VIZ_TYPE.FIBER,
447+
2.0,
448+
0.0,
449+
0.4225666666666667 * scale_factor_aster,
450+
0.23976666666666668 * scale_factor_aster,
451+
0.07003333333333334 * scale_factor_aster,
452+
0.0,
453+
0.0,
454+
0.0,
455+
1.0 * scale_factor_aster,
456+
9.0,
457+
0.019733333333333342 * scale_factor_aster,
458+
0.09583333333333334 * scale_factor_aster,
459+
0.02036666666666666 * scale_factor_aster,
460+
-0.0023666666666666636 * scale_factor_aster,
461+
0.0006333333333333236 * scale_factor_aster,
462+
-0.0008333333333333328 * scale_factor_aster,
463+
-0.01736666666666668 * scale_factor_aster,
464+
-0.09646666666666666 * scale_factor_aster,
465+
-0.01953333333333333 * scale_factor_aster,
466+
],
467+
),
468+
],
469+
)
470+
def test_aster_data(asterData, expected_asterData):
471+
assert np.isclose(expected_asterData, asterData).all()
472+
473+
349474
def test_input_file_error():
350475
# throws an error when the file is the right type, but is malformed
351476
malformed_data = CytosimData(

0 commit comments

Comments
 (0)