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

1"""Methods for visualizing fiber points.""" 

2 

3import numpy as np 

4from simulariumio import ( 

5 AgentData, 

6 DisplayData, 

7 MetaData, 

8 TrajectoryConverter, 

9 TrajectoryData, 

10 UnitData, 

11) 

12 

13 

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. 

25 

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. 

42 

43 Returns 

44 ------- 

45 : 

46 Simularium trajectory converter. 

47 """ 

48 

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

58 

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)