Skip to content

Commit 28dc160

Browse files
committed
make x_ and y_kwargs private to avoid changing them in the echogramviewer
1 parent 56f89b3 commit 28dc160

File tree

2 files changed

+106
-94
lines changed

2 files changed

+106
-94
lines changed

python/themachinethatgoesping/pingprocessing/watercolumn/echograms/echogrambuilder.py

Lines changed: 36 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,12 @@ def get_ping_param(self, name, use_x_coordinates=False):
209209

210210
return x_coordinates, return_param
211211

212+
def get_x_kwargs(self):
213+
return deepcopy(self.__x_kwargs)
214+
215+
def get_y_kwargs(self):
216+
return deepcopy(self.__y_kwargs)
217+
212218
@classmethod
213219
def from_pings(
214220
cls,
@@ -284,7 +290,9 @@ def from_pings(
284290
# sel_bottom = pss.apply_selection(ping.bottom)
285291
# bd = np.nanmin(p.bottom.get_xyz(sel_bottom).z) + p.get_geolocation().z
286292
# this is incorrect
287-
br = np.nanquantile(ping.bottom.get_xyz(sel).z, 0.05)
293+
294+
# br = np.nanquantile(ping.bottom.get_xyz(sel).z, 0.05)
295+
br = ping.bottom.get_bottom_z(sel)
288296
# mr = np.nanquantile(ping.watercolumn.get_bottom_range_samples(), 0.05) * range_res * angle_factor
289297
mr = ping.watercolumn.get_minslant_sample_nr() * range_res * angle_factor
290298
bottom_d_times.append(times[nr])
@@ -371,8 +379,8 @@ def reinit(self):
371379
if self.initialized:
372380
return
373381

374-
self.y_axis_function(**self.y_kwargs)
375-
self.x_axis_function(**self.x_kwargs)
382+
self.y_axis_function(**self.__y_kwargs)
383+
self.x_axis_function(**self.__x_kwargs)
376384

377385
def set_y_coordinates(self, name, y_coordinates, y_resolution, vec_min_y, vec_max_y):
378386
assert (
@@ -552,23 +560,23 @@ def get_filtered_by_y_extent(self, vec_x_val, vec_min_y, vec_max_y):
552560
def copy_xy_axis(self, other):
553561
match self.x_axis_name:
554562
case "Date time":
555-
other.set_x_axis_date_time(**self.x_kwargs)
563+
other.set_x_axis_date_time(**self.__x_kwargs)
556564
case "Ping time":
557-
other.set_x_axis_ping_time(**self.x_kwargs)
565+
other.set_x_axis_ping_time(**self.__x_kwargs)
558566
case "Ping number":
559-
other.set_x_axis_ping_nr(**self.x_kwargs)
567+
other.set_x_axis_ping_nr(**self.__x_kwargs)
560568
case _:
561569
raise RuntimeError(f"ERROR: unknown x axis name '{self.x_axis_name}'")
562570

563571
match self.y_axis_name:
564572
case "Depth (m)":
565-
other.set_y_axis_depth(**self.y_kwargs)
573+
other.set_y_axis_depth(**self.__y_kwargs)
566574
case "Range (m)":
567-
other.set_y_axis_range(**self.y_kwargs)
575+
other.set_y_axis_range(**self.__y_kwargs)
568576
case "Sample number":
569-
other.set_y_axis_sample_nr(**self.y_kwargs)
577+
other.set_y_axis_sample_nr(**self.__y_kwargs)
570578
case "Y indice":
571-
other.set_y_axis_y_indice(**self.y_kwargs)
579+
other.set_y_axis_y_indice(**self.__y_kwargs)
572580
case _:
573581
raise RuntimeError(f"ERROR: unknown y axis name '{self.y_axis_name}'")
574582

@@ -602,9 +610,9 @@ def set_y_axis_y_indice(
602610

603611
y_kwargs = {"min_sample_nr": min_sample_nr, "max_sample_nr": max_sample_nr, "max_steps": max_steps}
604612
self.y_axis_function = self.set_y_axis_y_indice
605-
if self.y_axis_name == "Y indice" and self.y_kwargs == y_kwargs:
613+
if self.y_axis_name == "Y indice" and self.__y_kwargs == y_kwargs:
606614
return
607-
self.y_kwargs = y_kwargs
615+
self.__y_kwargs = y_kwargs
608616

609617
y_coordinates, y_res = self.sample_y_coordinates(
610618
vec_min_y=vec_min_y,
@@ -628,9 +636,9 @@ def set_y_axis_depth(
628636

629637
y_kwargs = {"min_depth": min_depth, "max_depth": max_depth, "max_steps": max_steps}
630638
self.y_axis_function = self.set_y_axis_depth
631-
if self.y_axis_name == "Depth (m)" and self.y_kwargs == y_kwargs:
639+
if self.y_axis_name == "Depth (m)" and self.__y_kwargs == y_kwargs:
632640
return
633-
self.y_kwargs = y_kwargs
641+
self.__y_kwargs = y_kwargs
634642

635643
y_coordinates, y_res = self.sample_y_coordinates(
636644
vec_min_y=self.min_depths,
@@ -654,9 +662,9 @@ def set_y_axis_range(
654662

655663
y_kwargs = {"min_range": min_range, "max_range": max_range, "max_steps": max_steps}
656664
self.y_axis_function = self.set_y_axis_range
657-
if self.y_axis_name == "Range (m)" and self.y_kwargs == y_kwargs:
665+
if self.y_axis_name == "Range (m)" and self.__y_kwargs == y_kwargs:
658666
return
659-
self.y_kwargs = y_kwargs
667+
self.__y_kwargs = y_kwargs
660668

661669
y_coordinates, y_res = self.sample_y_coordinates(
662670
vec_min_y=self.min_ranges,
@@ -682,9 +690,9 @@ def set_y_axis_sample_nr(
682690

683691
y_kwargs = {"min_sample_nr": min_sample_nr, "max_sample_nr": max_sample_nr, "max_steps": max_steps}
684692
self.y_axis_function = self.set_y_axis_sample_nr
685-
if self.y_axis_name == "Sample number" and self.y_kwargs == y_kwargs:
693+
if self.y_axis_name == "Sample number" and self.__y_kwargs == y_kwargs:
686694
return
687-
self.y_kwargs = y_kwargs
695+
self.__y_kwargs = y_kwargs
688696

689697
y_coordinates, y_res = self.sample_y_coordinates(
690698
vec_min_y=self.min_sample_nrs,
@@ -712,10 +720,10 @@ def set_x_axis_ping_nr(
712720
}
713721

714722
self.x_axis_function = self.set_x_axis_ping_nr
715-
if self.x_axis_name == "Ping number" and self.x_kwargs == x_kwargs:
723+
if self.x_axis_name == "Ping number" and self.__x_kwargs == x_kwargs:
716724
return
717725

718-
self.x_kwargs = x_kwargs
726+
self.__x_kwargs = x_kwargs
719727

720728
if not np.isfinite(max_ping_nr):
721729
max_ping_nr = np.max(self.ping_numbers)
@@ -758,10 +766,10 @@ def set_x_axis_ping_time(
758766
}
759767

760768
self.x_axis_function = self.set_x_axis_ping_time
761-
if self.x_axis_name == "Ping time" and self.x_kwargs == x_kwargs:
769+
if self.x_axis_name == "Ping time" and self.__x_kwargs == x_kwargs:
762770
return
763771

764-
self.x_kwargs = x_kwargs
772+
self.__x_kwargs = x_kwargs
765773

766774
if not np.isfinite(min_timestamp):
767775
min_timestamp = np.min(self.ping_times)
@@ -823,7 +831,7 @@ def set_x_axis_date_time(
823831
}
824832

825833
self.x_axis_function = self.set_x_axis_date_time
826-
if self.x_axis_name == "Date time" and self.x_kwargs == x_kwargs:
834+
if self.x_axis_name == "Date time" and self.__x_kwargs == x_kwargs:
827835
return
828836

829837
if isinstance(min_ping_time, dt.datetime):
@@ -849,7 +857,8 @@ def set_x_axis_date_time(
849857
self.x_extent[0] = dt.datetime.fromtimestamp(self.x_extent[0], self.time_zone)
850858
self.x_extent[1] = dt.datetime.fromtimestamp(self.x_extent[1], self.time_zone)
851859
self.x_axis_name = "Date time"
852-
self.x_kwargs = x_kwargs
860+
self.x_axis_function = self.set_x_axis_date_time
861+
self.__x_kwargs = x_kwargs
853862

854863
def get_y_indices(self, wci_nr):
855864
n_samples = self.beam_sample_selections[wci_nr].get_number_of_samples_ensemble()
@@ -885,7 +894,7 @@ def build_image(self, progress=None):
885894
y1, y2 = self.get_y_indices(wci_index)
886895
image[image_index, y1] = wci[y2]
887896

888-
extent = self.x_extent
897+
extent = deepcopy(self.x_extent)
889898
extent.extend(self.y_extent)
890899

891900
return image, extent
@@ -919,7 +928,7 @@ def build_image_and_layer_image(self, progress=None):
919928
if y1_layer is not None:
920929
layer_image[image_index, y1_layer] = wci[y2_layer]
921930

922-
extent = self.x_extent
931+
extent = deepcopy(self.x_extent)
923932
extent.extend(self.y_extent)
924933

925934
return image, layer_image, extent
@@ -955,7 +964,7 @@ def build_image_and_layer_images(self, progress=None):
955964
if y1_layer is not None:
956965
layer_images[key][image_index, y1_layer] = wci[y2_layer]
957966

958-
extent = self.x_extent
967+
extent = deepcopy(self.x_extent)
959968
extent.extend(self.y_extent)
960969

961970
return image, layer_images, extent

python/themachinethatgoesping/pingprocessing/widgets/echogramviewer.py

Lines changed: 70 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -240,12 +240,12 @@ def show_background_zoom(self, event = 0):
240240

241241
xmin,xmax = self.axes[i].get_xlim()
242242
ymin,ymax = sorted(self.axes[i].get_ylim())
243-
x_kwargs = echogram.x_kwargs
244-
y_kwargs = echogram.y_kwargs
243+
x_kwargs = echogram.get_x_kwargs()
244+
y_kwargs = echogram.get_y_kwargs()
245245

246246
match self.x_axis_name:
247247
case 'Date time':
248-
tmin,tmax = mdates.num2date(xmin).timestamp(),mdates.num2date(xmax).timestamp()
248+
tmin,tmax = mdates.num2date([xmin, xmax])
249249
x_kwargs['min_ping_time'] = tmin
250250
x_kwargs['max_ping_time'] = tmax
251251
echogram.set_x_axis_date_time(**x_kwargs)
@@ -286,6 +286,7 @@ def show_background_zoom(self, event = 0):
286286
self.high_res_extents.append(ex)
287287
else:
288288
im,im_layer,ex = echogram.build_image_and_layer_image(progress=self.progress)
289+
289290
self.high_res_images.append(im)
290291
self.high_res_extents.append(ex)
291292
self.layer_images.append(im_layer)
@@ -390,74 +391,76 @@ def callback_view(self):
390391
pass
391392

392393
def click_echogram(self, event):
393-
if self.pingviewer is None:
394-
return
395-
#global e
396-
#e = event
397394
with self.output:
398-
#print(event)
399-
if event.button == 1:
400-
match self.x_axis_name:
401-
case 'Date time':
402-
t = mdates.num2date(event.xdata).timestamp()
403-
for pn,ping in enumerate(self.pingviewer.imagebuilder.pings):
404-
if isinstance(ping,dict):
405-
ping = next(iter(ping.values()))
406-
407-
if ping.get_timestamp() > t:
408-
if pn > 0:
409-
pn -= 1
410-
break
411-
case 'Ping number':
412-
pn = event.xdata
413-
case 'Ping time':
414-
t = event.xdata
415-
for pn,ping in enumerate(self.pingviewer.imagebuilder.pings):
416-
if isinstance(ping,dict):
417-
ping = next(iter(ping.values()))
418-
419-
if ping.get_timestamp() > t:
420-
if pn > 0:
421-
pn -= 1
422-
break
423-
case _:
424-
raise RuntimeError(f"ERROR: unknown x axis name '{self.x_axis_name}'")
425-
426-
if pn < 0:
427-
pn = 0
428-
if pn >= len(self.pingviewer.imagebuilder.pings):
429-
pn = len(self.pingviewer.imagebuilder.pings)-1
395+
if self.pingviewer is None:
396+
return
397+
#global e
398+
#e = event
399+
with self.output:
400+
#print(event)
401+
if event.button == 2:
402+
match self.x_axis_name:
403+
case 'Date time':
404+
t = mdates.num2date(event.xdata).timestamp()
405+
for pn,ping in enumerate(self.pingviewer.imagebuilder.pings):
406+
if isinstance(ping,dict):
407+
ping = next(iter(ping.values()))
408+
409+
if ping.get_timestamp() > t:
410+
if pn > 0:
411+
pn -= 1
412+
break
413+
case 'Ping number':
414+
pn = event.xdata
415+
case 'Ping time':
416+
t = event.xdata
417+
for pn,ping in enumerate(self.pingviewer.imagebuilder.pings):
418+
if isinstance(ping,dict):
419+
ping = next(iter(ping.values()))
420+
421+
if ping.get_timestamp() > t:
422+
if pn > 0:
423+
pn -= 1
424+
break
425+
case _:
426+
raise RuntimeError(f"ERROR: unknown x axis name '{self.x_axis_name}'")
430427

431-
self.pingviewer.w_index.value = pn
432-
433-
self.update_ping_line()
428+
if pn < 0:
429+
pn = 0
430+
if pn >= len(self.pingviewer.imagebuilder.pings):
431+
pn = len(self.pingviewer.imagebuilder.pings)-1
432+
433+
self.pingviewer.w_index.value = pn
434+
435+
self.update_ping_line()
434436

435437
def update_ping_line(self, event = 0):
436-
if self.pingviewer is not None:
437-
with self.output:
438-
match self.x_axis_name:
439-
case 'Ping number':
440-
x = self.pingviewer.w_index.value
441-
case 'Date time':
442-
ping = self.pingviewer.imagebuilder.pings[self.pingviewer.w_index.value]
443-
if isinstance(ping,dict):
444-
ping = next(iter(ping.values()))
445-
x = ping.get_datetime()
446-
case 'Ping time':
447-
ping = self.pingviewer.imagebuilder.pings[self.pingviewer.w_index.value]
448-
if isinstance(ping,dict):
449-
ping = next(iter(ping.values()))
450-
x = ping.get_timestamp()
451-
case _:
452-
raise RuntimeError(f"ERROR: unknown x axis name '{self.x_axis_name}'")
453-
454-
for i,ax in enumerate(self.axes):
455-
try:
456-
if self.pingline[i] is not None:
457-
self.pingline[i].remove()
458-
except:
459-
pass
460-
self.pingline[i] = ax.axvline(x,c='black',linestyle='dashed')
438+
with self.output:
439+
if self.pingviewer is not None:
440+
with self.output:
441+
match self.x_axis_name:
442+
case 'Ping number':
443+
x = self.pingviewer.w_index.value
444+
case 'Date time':
445+
ping = self.pingviewer.imagebuilder.pings[self.pingviewer.w_index.value]
446+
if isinstance(ping,dict):
447+
ping = next(iter(ping.values()))
448+
x = ping.get_datetime()
449+
case 'Ping time':
450+
ping = self.pingviewer.imagebuilder.pings[self.pingviewer.w_index.value]
451+
if isinstance(ping,dict):
452+
ping = next(iter(ping.values()))
453+
x = ping.get_timestamp()
454+
case _:
455+
raise RuntimeError(f"ERROR: unknown x axis name '{self.x_axis_name}'")
456+
457+
for i,ax in enumerate(self.axes):
458+
try:
459+
if self.pingline[i] is not None:
460+
self.pingline[i].remove()
461+
except:
462+
pass
463+
self.pingline[i] = ax.axvline(x,c='black',linestyle='dashed')
461464

462465
def disconnect_pingviewer(self):
463466
with self.output:

0 commit comments

Comments
 (0)