@@ -143,20 +143,17 @@ def _phase_comp_lbl(self, component=None):
143
143
def phase_comp_lbl (self ):
144
144
return self ._phase_comp_lbl ()
145
145
146
- def _phase_viewer_id (self , component = None ):
146
+ def _generate_phase_viewer_id (self , component = None ):
147
147
if component is None :
148
148
component = self .component_selected
149
- return f'flux-vs-phase:{ component } '
149
+ return self . app . _jdaviz_helper . _get_clone_viewer_reference ( f'flux-vs-phase:{ component } ' )
150
150
151
- @property
152
- def phase_viewer_ids (self ):
153
- viewer_ids = self .app .get_viewer_ids ()
154
- return [self ._phase_viewer_id (component ) for component in self .component .choices
155
- if self ._phase_viewer_id (component ) in viewer_ids ]
156
-
157
- @property
158
- def phase_viewer_id (self ):
159
- return self ._phase_viewer_id ()
151
+ def _get_phase_viewers (self , lbl = None ):
152
+ if lbl is None :
153
+ lbl = self .component_selected
154
+ return [viewer for vid , viewer in self .app ._viewer_store .items ()
155
+ if isinstance (viewer , PhaseScatterView )
156
+ and viewer ._ephemeris_component == lbl ]
160
157
161
158
@property
162
159
def default_phase_viewer (self ):
@@ -166,13 +163,6 @@ def default_phase_viewer(self):
166
163
# ephemeris component
167
164
return self ._get_phase_viewers ()[0 ]
168
165
169
- def _get_phase_viewers (self , lbl = None ):
170
- if lbl is None :
171
- lbl = self .component_selected
172
- return [viewer for vid , viewer in self .app ._viewer_store .items ()
173
- if isinstance (viewer , PhaseScatterView )
174
- and viewer .ephemeris_component == lbl ]
175
-
176
166
@property
177
167
def ephemerides (self ):
178
168
return self ._ephemerides
@@ -290,7 +280,8 @@ def create_phase_viewer(self, ephem_component=None):
290
280
ephem_component : str, optional
291
281
label of the component. If not provided or ``None``, will default to plugin value.
292
282
"""
293
- phase_viewer_id = self ._phase_viewer_id (ephem_component )
283
+ if ephem_component is None :
284
+ ephem_component = self .component_selected
294
285
phase_comp_lbl = self ._phase_comp_lbl (ephem_component )
295
286
dc = self .app .data_collection
296
287
@@ -300,26 +291,37 @@ def create_phase_viewer(self, ephem_component=None):
300
291
if phase_comp_lbl not in [comp .label for comp in dc [0 ].components ]:
301
292
self .update_ephemeris () # calls _update_all_phase_arrays
302
293
303
- create_phase_viewer = len (self ._get_phase_viewers (ephem_component )) == 0
304
- if create_phase_viewer :
305
- # TODO: stack horizontally by default?
306
- self .app ._on_new_viewer (NewViewerMessage (PhaseScatterView , data = None , sender = self .app ),
307
- vid = phase_viewer_id , name = phase_viewer_id )
308
-
309
- time_viewer_item = self .app ._get_viewer_item (self .app ._jdaviz_helper ._default_time_viewer_reference_name ) # noqa
310
- for data in dc :
311
- data_id = self .app ._data_id_from_label (data .label )
312
- visible = time_viewer_item ['selected_data_items' ].get (data_id , 'hidden' )
313
- self .app .set_data_visibility (phase_viewer_id , data .label , visible == 'visible' )
294
+ phase_viewer_id = self ._generate_phase_viewer_id (ephem_component )
295
+ # TODO: stack horizontally by default?
296
+ self .app ._on_new_viewer (NewViewerMessage (PhaseScatterView , data = None , sender = self .app ),
297
+ vid = phase_viewer_id , name = phase_viewer_id )
314
298
299
+ # access new viewer, set bookkeeping for ephemeris component
315
300
pv = self .app .get_viewer (phase_viewer_id )
316
- if create_phase_viewer :
317
- pv .state .x_min , pv .state .x_max = (self .wrap_at - 1 , self .wrap_at )
318
- pv .state .x_att = self .app ._jdaviz_helper ._component_ids [phase_comp_lbl ]
301
+ pv ._ephemeris_component = ephem_component
302
+ # since we couldn't set ephemeris_component right away, _check_if_phase_viewer_exists
303
+ # might be out-of-date
304
+ self ._check_if_phase_viewer_exists ()
305
+
306
+ # set default data visibility
307
+ time_viewer_item = self .app ._get_viewer_item (self .app ._jdaviz_helper ._default_time_viewer_reference_name ) # noqa
308
+ for data in dc :
309
+ data_id = self .app ._data_id_from_label (data .label )
310
+ visible = time_viewer_item ['selected_data_items' ].get (data_id , 'hidden' )
311
+ self .app .set_data_visibility (phase_viewer_id , data .label , visible == 'visible' )
312
+
313
+ # set x_att
314
+ phase_comp = self .app ._jdaviz_helper ._component_ids [phase_comp_lbl ]
315
+ pv .state .x_att = phase_comp
316
+
317
+ # set viewer limits
318
+ pv .state .x_min , pv .state .x_max = (self .wrap_at - 1 , self .wrap_at )
319
+
319
320
return pv .user_api
320
321
321
322
def vue_create_phase_viewer (self , * args ):
322
- self .create_phase_viewer ()
323
+ if not self .phase_viewer_exists :
324
+ self .create_phase_viewer ()
323
325
324
326
def vue_period_halve (self , * args ):
325
327
self .period /= 2
@@ -350,6 +352,7 @@ def _on_component_rename(self, old_lbl, new_lbl):
350
352
viewer ._ref_or_id .replace (old_lbl , new_lbl ),
351
353
update_id = True
352
354
)
355
+ viewer ._ephemeris_component = new_lbl
353
356
354
357
# update metadata entries so that they can be used for filtering applicable entries in
355
358
# data menus
@@ -465,7 +468,8 @@ def round_to_1(x):
465
468
return round (x , - int (np .floor (np .log10 (abs (x )))))
466
469
467
470
# if phase-viewer doesn't yet exist in the app, create it now
468
- self .create_phase_viewer ()
471
+ if not self .phase_viewer_exists :
472
+ self .create_phase_viewer ()
469
473
470
474
# update value in the dictionary (to support multi-ephems)
471
475
if event :
@@ -478,9 +482,10 @@ def round_to_1(x):
478
482
if event .get ('name' ) == 'wrap_at' :
479
483
old = event .get ('old' ) if event .get ('old' ) != '' else self ._prev_wrap_at
480
484
if event .get ('new' ) != '' :
481
- pvs = self .default_phase_viewer .state
482
485
delta_phase = event .get ('new' ) - old
483
- pvs .x_min , pvs .x_max = pvs .x_min + delta_phase , pvs .x_max + delta_phase
486
+ for pv in self ._get_phase_viewers ():
487
+ pvs = pv .state
488
+ pvs .x_min , pvs .x_max = pvs .x_min + delta_phase , pvs .x_max + delta_phase
484
489
# we need to cache the old value since it could become a string
485
490
# if the widget is cleared
486
491
self ._prev_wrap_at = event .get ('new' )
0 commit comments