|
23 | 23 | ) |
24 | 24 |
|
25 | 25 |
|
| 26 | +def _tracking_param_value(tpar, name: str): |
| 27 | + """Read a tracking parameter from either attribute or getter access.""" |
| 28 | + value = getattr(tpar, name, None) |
| 29 | + if value is not None: |
| 30 | + return value |
| 31 | + |
| 32 | + getter = getattr(tpar, f"get_{name}", None) |
| 33 | + if callable(getter): |
| 34 | + return getter() |
| 35 | + |
| 36 | + raise AttributeError(f"TrackingParams object does not expose {name}") |
| 37 | + |
| 38 | + |
| 39 | +def _volume_param_value(vpar, name: str): |
| 40 | + """Read a volume parameter from either attribute or legacy getter access.""" |
| 41 | + value = getattr(vpar, name, None) |
| 42 | + if value is not None: |
| 43 | + return value |
| 44 | + |
| 45 | + getter_name = { |
| 46 | + "x_lay": "get_X_lay", |
| 47 | + "z_min_lay": "get_Zmin_lay", |
| 48 | + "z_max_lay": "get_Zmax_lay", |
| 49 | + }.get(name, f"get_{name}") |
| 50 | + getter = getattr(vpar, getter_name, None) |
| 51 | + if callable(getter): |
| 52 | + return getter() |
| 53 | + |
| 54 | + raise AttributeError(f"VolumeParams object does not expose {name}") |
| 55 | + |
| 56 | + |
| 57 | +def _set_volume_param_value(vpar, name: str, value) -> None: |
| 58 | + """Write a volume parameter through either a setter or direct attribute.""" |
| 59 | + setter_name = { |
| 60 | + "x_lay": "set_X_lay", |
| 61 | + "z_min_lay": "set_Zmin_lay", |
| 62 | + "z_max_lay": "set_Zmax_lay", |
| 63 | + }.get(name, f"set_{name}") |
| 64 | + setter = getattr(vpar, setter_name, None) |
| 65 | + if callable(setter): |
| 66 | + setter(value) |
| 67 | + return |
| 68 | + |
| 69 | + setattr(vpar, name, value) |
| 70 | + |
| 71 | + |
26 | 72 | @dataclass |
27 | 73 | class TrackingRun: |
28 | 74 | """A tracking run.""" |
@@ -61,41 +107,57 @@ def __init__( |
61 | 107 | self.cal = cal |
62 | 108 | self.flatten_tol = flatten_tol |
63 | 109 |
|
| 110 | + if hasattr(seq_par, "img_base_name"): |
| 111 | + img_base_names = seq_par.img_base_name |
| 112 | + else: |
| 113 | + img_base_names = [ |
| 114 | + seq_par.get_img_base_name(cam_index) |
| 115 | + for cam_index in range(get_num_cams(cpar)) |
| 116 | + ] |
| 117 | + |
64 | 118 | self.fb = FrameBuf( |
65 | 119 | buf_len, |
66 | 120 | get_num_cams(cpar), |
67 | 121 | max_targets, |
68 | 122 | corres_file_base, |
69 | 123 | linkage_file_base, |
70 | 124 | prio_file_base, |
71 | | - seq_par.img_base_name, |
| 125 | + img_base_names, |
72 | 126 | ) |
73 | 127 |
|
74 | 128 | self.lmax = math.sqrt( |
75 | | - (tpar.dvxmin - tpar.dvxmax) ** 2 |
76 | | - + (tpar.dvymin - tpar.dvymax) ** 2 |
77 | | - + (tpar.dvzmin - tpar.dvzmax) ** 2 |
| 129 | + (_tracking_param_value(tpar, "dvxmin") - _tracking_param_value(tpar, "dvxmax")) ** 2 |
| 130 | + + (_tracking_param_value(tpar, "dvymin") - _tracking_param_value(tpar, "dvymax")) ** 2 |
| 131 | + + (_tracking_param_value(tpar, "dvzmin") - _tracking_param_value(tpar, "dvzmax")) ** 2 |
78 | 132 | ) |
79 | 133 |
|
| 134 | + x_lay = list(_volume_param_value(vpar, "x_lay")) |
| 135 | + z_min_lay = list(_volume_param_value(vpar, "z_min_lay")) |
| 136 | + z_max_lay = list(_volume_param_value(vpar, "z_max_lay")) |
| 137 | + |
80 | 138 | ( |
81 | | - vpar.x_lay[1], |
82 | | - vpar.x_lay[0], |
| 139 | + x_lay[1], |
| 140 | + x_lay[0], |
83 | 141 | self.ymax, |
84 | 142 | self.ymin, |
85 | | - vpar.z_max_lay[1], |
86 | | - vpar.z_min_lay[0], |
| 143 | + z_max_lay[1], |
| 144 | + z_min_lay[0], |
87 | 145 | ) = volumedimension( |
88 | | - vpar.x_lay[1], |
89 | | - vpar.x_lay[0], |
| 146 | + x_lay[1], |
| 147 | + x_lay[0], |
90 | 148 | self.ymax, |
91 | 149 | self.ymin, |
92 | | - vpar.z_max_lay[1], |
93 | | - vpar.z_min_lay[0], |
| 150 | + z_max_lay[1], |
| 151 | + z_min_lay[0], |
94 | 152 | vpar, |
95 | 153 | cpar, |
96 | 154 | cal, |
97 | 155 | ) |
98 | 156 |
|
| 157 | + _set_volume_param_value(vpar, "x_lay", x_lay) |
| 158 | + _set_volume_param_value(vpar, "z_min_lay", z_min_lay) |
| 159 | + _set_volume_param_value(vpar, "z_max_lay", z_max_lay) |
| 160 | + |
99 | 161 | self.npart = 0 |
100 | 162 | self.nlinks = 0 |
101 | 163 |
|
|
0 commit comments