Coverage for subcell_pipeline/visualization/fiber_points.py: 0%
13 statements
« prev ^ index » next coverage.py v7.5.3, created at 2024-08-29 15:14 +0000
« prev ^ index » next coverage.py v7.5.3, created at 2024-08-29 15:14 +0000
1"""Methods for visualizing fiber points."""
3import numpy as np
4from simulariumio import (
5 AgentData,
6 DisplayData,
7 MetaData,
8 TrajectoryConverter,
9 TrajectoryData,
10 UnitData,
11)
14def generate_trajectory_converter_for_fiber_points(
15 fiber_points: list[np.ndarray],
16 type_names: list[str],
17 meta_data: MetaData,
18 display_data: dict[str, DisplayData],
19 time_units: UnitData,
20 spatial_units: UnitData,
21 fiber_radius: float = 0.5,
22) -> TrajectoryConverter:
23 """
24 Generate a TrajectoryConverter for the given fiber points.
26 Parameters
27 ----------
28 fiber_points
29 List of fibers, where each fiber has the shape (timesteps x points x 3).
30 type_names
31 List of type names.
32 meta_data
33 Simularium metadata object.
34 display_data
35 Map of type names to Simularium display data objects.
36 time_units
37 Time unit data.
38 spatial_units
39 Spatial unit data.
40 fiber_radius
41 Radius to render fiber.
43 Returns
44 -------
45 :
46 Simularium trajectory converter.
47 """
49 # build subpoints array with correct dimensions
50 n_fibers = len(fiber_points)
51 total_steps = fiber_points[0].shape[0]
52 n_points = fiber_points[0].shape[1]
53 subpoints = np.zeros((total_steps, n_fibers, n_points, 3))
54 for time_ix in range(total_steps):
55 for fiber_ix in range(n_fibers):
56 subpoints[time_ix][fiber_ix] = fiber_points[fiber_ix][time_ix]
57 subpoints = subpoints.reshape((total_steps, n_fibers, 3 * n_points))
59 # convert to simularium
60 traj_data = TrajectoryData(
61 meta_data=meta_data,
62 agent_data=AgentData(
63 times=np.arange(total_steps),
64 n_agents=n_fibers * np.ones(total_steps),
65 viz_types=1001 * np.ones((total_steps, n_fibers)), # fiber viz type = 1001
66 unique_ids=np.array(total_steps * [list(range(n_fibers))]),
67 types=total_steps * [type_names],
68 positions=np.zeros((total_steps, n_fibers, 3)),
69 radii=fiber_radius * np.ones((total_steps, n_fibers)),
70 n_subpoints=3 * n_points * np.ones((total_steps, n_fibers)),
71 subpoints=subpoints,
72 display_data=display_data,
73 ),
74 time_units=time_units,
75 spatial_units=spatial_units,
76 )
77 return TrajectoryConverter(traj_data)