def test_plugins(): # Make sure that glue plugins are correctly loaded, by checking that the # WCS autolinker works. from astropy.wcs import WCS app = gj.jglue() data1 = Data(label='test1') data1.coords = WCS(naxis=2) data1.coords.wcs.ctype = 'RA---TAN', 'DEC--TAN' data1.coords.wcs.set() data1['x'] = np.ones((2, 3)) data2 = Data(label='test1') data2.coords = WCS(naxis=2) data2.coords.wcs.ctype = 'GLON-CAR', 'GLAT-CAR' data2.coords.wcs.set() data2['y'] = np.ones((2, 3)) app.add_data(data1=data1) app.add_data(data2=data2) links = find_possible_links(app.data_collection) assert 'Astronomy WCS' in links
def __init__(self): self._glue_app = gj.jglue() self._history = [] self._3d_data = {} self._2d_data = {} self._1d_data = {} self._3d_processing = {} self.add_3d_processing("Median Collapse over Wavelenths", np.nanmedian, 'a', (('axis', 0), )) self.add_3d_processing("Mean Collapse over Wavelenths", np.nanmean, 'a', (('axis', 0), )) self.add_3d_processing("Median Collapse over Space", np.nanmedian, 'a', (('axis', (1, 2)), )) self.add_3d_processing("Mean Collapse over Space", np.nanmean, 'a', (('axis', (1, 2)), )) self._2d_processing = {} self._1d_processing = {} self.add_1d_processing("Median Smoothing", scipy.signal.medfilt, 'volume', (('kernel_size', 3), )) self.add_1d_processing("Hanning Smoothing", np.convolve, 'a', (('mode', 'valid'), ('w', np.hanning(3)))) self.add_1d_processing("Hamming Smoothing", np.convolve, 'a', (('mode', 'valid'), ('w', np.hamming(3)))) self.add_1d_processing("Bartlett Smoothing", np.convolve, 'a', (('mode', 'valid'), ('w', np.bartlett(3)))) self.add_1d_processing("Blackman Smoothing", np.convolve, 'a', (('mode', 'valid'), ('w', np.blackman(3))))
def __init__(self, spec, rest_lines): spec_data = gcore.Data(wl=spec.wavelength, flux=spec.flux, unc=spec.uncertainty.array) self.app = app = gj.jglue(spec_data) self.regions = {} # populated with spectral regions by frecord line_selection = ipywidgets.Dropdown(options=rest_lines.keys(), description='Line:') record_button = ipywidgets.Button(description='Record line') result_text = ipywidgets.Text(disabled=True, value='No line recorded') record_box = ipywidgets.HBox( [line_selection, record_button, result_text]) z_text = ipywidgets.FloatText(description='z guess:', value=0) jump_button = ipywidgets.Button(description='Jump to line') line_width_text = ipywidgets.FloatText(description='width(Ang):', value=100) jump_box = ipywidgets.HBox([z_text, jump_button, line_width_text]) def frecord(widget): wls_selected = spec_data['wl'][ spec_data.subsets[0].to_index_list()] reg = specutils.SpectralRegion( np.min(wls_selected) * spec.wavelength.unit, np.max(wls_selected) * spec.wavelength.unit) result_text.value = 'Recorded {}: {} to {}'.format( line_selection.value, reg.lower, reg.upper) self.regions[line_selection.value] = reg z_text.value = specutils.analysis.centroid( spec, reg) / rest_lines[line_selection.value] - 1 record_button.on_click(frecord) self.plot_to_jump = None def fjump(widget): if self.plot_to_jump is None: return rest_linecen = rest_lines[line_selection.value] linecen = rest_linecen * (1 + z_text.value) self.plot_to_jump.state.x_min = linecen.value + line_width_text.value / 2 self.plot_to_jump.state.x_max = linecen.value - line_width_text.value / 2 jump_button.on_click(fjump) self.action_vbox = ipywidgets.VBox([record_box, jump_box])
def app(dataxyz, datax, dataxz, data_volume, data_image): app = gj.jglue(dataxyz=dataxyz, dataxz=dataxz, datax=datax) app.add_link(dataxyz, 'x', dataxz, 'x') app.add_link(dataxyz, 'y', dataxz, 'z') app.add_link(dataxyz, 'x', datax, 'x') app.add_data(data_volume=data_volume) app.add_data(data_image=data_image) app.add_link(data_image, 'Pixel Axis 0 [y]', dataxyz, 'y') app.add_link(data_image, 'Pixel Axis 1 [x]', dataxyz, 'x') app.add_link(data_volume, 'Pixel Axis 0 [z]', dataxyz, 'z') app.add_link(data_volume, 'Pixel Axis 1 [y]', dataxyz, 'y') app.add_link(data_volume, 'Pixel Axis 2 [x]', dataxyz, 'x') return app
def test_double_load_data(tmpdir): # Regression test for a bug that caused a crash when adding two datasets # with the same shape. filename = tmpdir.join('data1.csv').strpath with open(filename, 'w') as f: f.write('a,b\n1,2\n3,4\n5.6\n') app = gj.jglue() app.load_data(filename) app.load_data(filename)
def test_no_data(dataxz, dataxyz): app = gj.jglue() with pytest.raises(ValueError, match='No dataset is present'): app.scatter2d() app.add_data(dataxz) app.scatter2d() app.add_data(dataxyz) with pytest.raises(ValueError, match='There is more than one dataset'): app.scatter2d()
def app(dataxyz, datax, dataxz, data_volume, data_image): link1 = ['dataxyz.x'], ['dataxz.x'], lambda x: x link2 = ['dataxyz.y'], ['dataxz.z'], lambda y: y + 1, lambda z: z - 1 link3 = ['dataxyz.x'], ['datax.x'], lambda x: x app = gj.jglue(dataxyz=dataxyz, dataxz=dataxz, datax=datax, links=[link1, link2, link3]) app.add_data(data_volume=data_volume) app.add_data(data_image=data_image) app.add_link(data_image, 'Pixel Axis 0 [y]', dataxyz, 'y') app.add_link(data_image, 'Pixel Axis 1 [x]', dataxyz, 'x') app.add_link(data_volume, 'Pixel Axis 0 [z]', dataxyz, 'z') app.add_link(data_volume, 'Pixel Axis 1 [y]', dataxyz, 'y') app.add_link(data_volume, 'Pixel Axis 2 [x]', dataxyz, 'x') return app
def app(dataxyz, dataxz, data_volume, data_image): link1 = ['dataxyz.x'], ['dataxz.x'], lambda x: x link2 = ['dataxyz.y'], ['dataxz.z'], lambda y: y + 1, lambda z: z - 1 app = gj.jglue(dataxyz=dataxyz, dataxz=dataxz, links=[link1, link2]) app.add_data(data_volume=data_volume) app.add_data(data_image=data_image) link1 = ComponentLink([data_image.id['Pixel Axis 0 [y]']], dataxyz.id['y']) link2 = ComponentLink([data_image.id['Pixel Axis 1 [x]']], dataxyz.id['x']) app.data_collection.add_link([link1, link2]) link1 = ComponentLink([data_volume.id['Pixel Axis 0 [z]']], dataxyz.id['z']) link2 = ComponentLink([data_volume.id['Pixel Axis 1 [y]']], dataxyz.id['y']) link3 = ComponentLink([data_volume.id['Pixel Axis 2 [x]']], dataxyz.id['x']) app.data_collection.add_link([link1, link2, link3]) return app
def __init__(self, vizapp): self._app = gj.jglue()