예제 #1
0
def test_change_components():

    # Regression test for a bug that caused table viewers to not update when
    # adding/removing components.

    app = get_qapp()  # noqa

    d = Data(a=[1, 2, 3, 4, 5],
             b=[3.2, 1.2, 4.5, 3.3, 2.2],
             c=['e', 'b', 'c', 'a', 'f'],
             label='test')

    dc = DataCollection([d])

    gapp = GlueApplication(dc)

    viewer = gapp.new_data_viewer(TableViewer)
    viewer.add_data(d)

    data_changed = MagicMock()
    viewer.model.dataChanged.connect(data_changed)

    # layoutChanged needs to be emitted for the new/removed columns to be
    # registered (dataChanged is not enough)
    layout_changed = MagicMock()
    viewer.model.layoutChanged.connect(layout_changed)

    assert data_changed.call_count == 0
    assert layout_changed.call_count == 0
    viewer.model.columnCount() == 2

    d.add_component([3, 4, 5, 6, 2], 'z')

    assert data_changed.call_count == 1
    assert layout_changed.call_count == 1
    viewer.model.columnCount() == 3

    d.remove_component(d.id['z'])

    assert data_changed.call_count == 2
    assert layout_changed.call_count == 2
    viewer.model.columnCount() == 2
예제 #2
0
def test_change_components():

    # Regression test for a bug that caused table viewers to not update when
    # adding/removing components. For now, this does not work with Qt 5.7.

    app = get_qapp()  # noqa

    d = Data(a=[1, 2, 3, 4, 5],
             b=[3.2, 1.2, 4.5, 3.3, 2.2],
             c=['e', 'b', 'c', 'a', 'f'], label='test')

    dc = DataCollection([d])

    gapp = GlueApplication(dc)

    viewer = gapp.new_data_viewer(TableViewer)
    viewer.add_data(d)

    data_changed = MagicMock()
    viewer.model.dataChanged.connect(data_changed)

    # layoutChanged needs to be emitted for the new/removed columns to be
    # registered (dataChanged is not enough)
    layout_changed = MagicMock()
    viewer.model.layoutChanged.connect(layout_changed)

    assert data_changed.call_count == 0
    assert layout_changed.call_count == 0
    viewer.model.columnCount() == 2

    d.add_component([3, 4, 5, 6, 2], 'z')

    assert data_changed.call_count == 1
    assert layout_changed.call_count == 1
    viewer.model.columnCount() == 3

    d.remove_component(d.id['z'])

    assert data_changed.call_count == 2
    assert layout_changed.call_count == 2
    viewer.model.columnCount() == 2
예제 #3
0
def herschel_data(filename):
    """
    Data loader customized for Herschel fits files

    This function extracts extension named 'image',
    'error', 'coverage', etc
    from a file. Each is returned as a glue Data object.
    To handle PACS cubes, if ImageIndex extension is present
    it is used to provide wavelengths

    astropy.wcs.WCS objects are used to parse wcs.

    Any other extensions are ignored
    """

    hdulist = fits.open(filename, memmap=True, ignore_missing_end=True)

    d = Data("data")
    # Fix for invalid CUNIT values in 12.1 PACS data
    for c in ['CUNIT1', 'CUNIT2']:
        if (c in hdulist['image'].header.keys()):
            hdulist['image'].header[c] = 'deg'
    if ('CUNIT3' in hdulist['image'].header.keys()):
        hdulist['image'].header['CUNIT3'] = 'um'
    d.coords = coordinates_from_wcs(WCS(hdulist['image'].header))
    wavelengths = None
    for h in hdulist:
        if (h.name in ['image', 'error', 'coverage']):
            d.add_component(hdulist[h.name].data, h.name)
        if (h.name == 'ImageIndex'):
            wavelengths = hdulist[h.name].data.field(0)

    # Fix up wavelengths if needed
    if ((wavelengths != None)
            and (d['Wavelength'].shape[0] == len(wavelengths))):
        warray = np.zeros(d['Wavelength'].shape, dtype=d['Wavelength'].dtype)
        warray += wavelengths[:, np.newaxis, np.newaxis]
        d.remove_component('Wavelength')
        d.add_component(warray, label='Wavelength')

    return d