示例#1
0
def test_time_init():
    t1 = SCETime(0, 0)
    t2 = SCETime.from_float(0*u.s)
    t3 = SCETime(t1)
    assert t1 == t2
    assert t2 == t3
    assert t1 == t3

    with pytest.raises(ValueError, match=r'Coarse time must be in range.*'):
        SCETime(-1, 0)

    with pytest.raises(ValueError, match=r'Fine time must be in range.*'):
        SCETime(0, -1)

    with pytest.raises(ValueError):
        _ = SCETime(2 ** 44-1, 0)

    with pytest.raises(ValueError):
        SCETime(0, 2**16+1)

    with pytest.raises(ValueError):
        SCETime(0.0, 0)
示例#2
0
def test_time_from_float():
    dt = SCETime.from_float(1 * u.s)
    assert dt == SCETime(coarse=1, fine=0)
示例#3
0
    def __call__(self, *args, **kwargs):
        if len(args) == 1 and len(kwargs) == 0:
            if isinstance(args[0], (str, Path)):
                file_path = Path(args[0])
                header = fits.getheader(file_path)

                service_type = int(
                    header.get('stype')) if 'stype' in header else 0
                service_subtype = int(
                    header.get('sstype')) if 'sstype' in header else 0
                parent = header.get('parent').split(
                    ';') if 'parent' in header else ''
                raw = header.get('raw_file').split(
                    ';') if 'raw_file' in header else ''
                try:
                    ssid = int(header.get('ssid'))
                except (ValueError, TypeError):
                    ssid = None
                level = header.get('Level')
                header.get('TIMESYS')

                hdul = fits.open(file_path)
                control = read_qtable(file_path, hdu='CONTROL', hdul=hdul)

                # Weird issue where time_stamp wasn't a proper table column?
                if 'time_stamp' in control.colnames:
                    ts = control['time_stamp'].value
                    control.remove_column('time_stamp')
                    control['time_stamp'] = ts * u.s

                data = read_qtable(file_path, hdu='DATA', hdul=hdul)

                if level == 'LL01':
                    # TODO remova that hack in favor for a proper header information after
                    # https://github.com/i4Ds/STIXCore/issues/224 is solved
                    if "lightcurve" in args[0]:
                        service_type = 21
                        service_subtype = 6
                        ssid = 30
                    if "flareflag" in args[0]:
                        service_type = 21
                        service_subtype = 6
                        ssid = 34

                if level not in ['LB', 'LL01']:
                    data['timedel'] = SCETimeDelta(data['timedel'])
                    offset = SCETime.from_float(header['OBT_BEG'] * u.s)

                    try:
                        control['time_stamp'] = SCETime.from_float(
                            control['time_stamp'])
                    except KeyError:
                        pass

                    data['time'] = offset + data['time']

                energies = None
                if level == 'L1':
                    try:
                        energies = read_qtable(file_path, hdu='ENERGIES')
                    except KeyError:
                        logger.info(
                            f"no ENERGIES data found in FITS: {file_path}")
                idb_versions = defaultdict(SCETimeRange)
                if level in ('L0', 'L1'):
                    try:
                        idbt = read_qtable(file_path, hdu='IDB_VERSIONS')
                        for row in idbt.iterrows():
                            idb_versions[row[0]] = SCETimeRange(
                                start=SCETime.from_float(row[1]),
                                end=SCETime.from_float(row[2]))
                    except KeyError:
                        logger.warn(f"no IDB data found in FITS: {file_path}")

                Product = self._check_registered_widget(
                    level=level,
                    service_type=service_type,
                    service_subtype=service_subtype,
                    ssid=ssid,
                    control=control,
                    data=data,
                    energies=energies)

                return Product(level=level,
                               service_type=service_type,
                               service_subtype=service_subtype,
                               ssid=ssid,
                               control=control,
                               data=data,
                               energies=energies,
                               idb_versions=idb_versions,
                               raw=raw,
                               parent=parent)
示例#4
0
def test_time_eq():
    t1 = SCETime(123, 456)
    t2 = SCETime.from_float((123 + 456/MAX_FINE)*u.s)
    t3 = SCETime(765, 432)
    assert t1 == t2
    assert t1 != t3
示例#5
0
文件: product.py 项目: i4Ds/STIXCore
    def __call__(self, *args, **kwargs):
        if len(args) == 1 and len(kwargs) == 0:
            if isinstance(args[0], (str, Path)):
                file_path = Path(args[0])
                header = fits.getheader(file_path)
                service_type = int(header.get('stype'))
                service_subtype = int(header.get('sstype'))
                parent = header.get('parent').split(';')
                raw = header.get('raw_file').split(';')
                try:
                    ssid = int(header.get('ssid'))
                except ValueError:
                    ssid = None
                level = header.get('Level')
                header.get('TIMESYS')

                hdul = fits.open(file_path)
                control = read_qtable(file_path, hdu='CONTROL', hdul=hdul)

                # Weird issue where time_stamp wasn't a proper table column?
                if 'time_stamp' in control.colnames:
                    ts = control['time_stamp'].value
                    control.remove_column('time_stamp')
                    control['time_stamp'] = ts * u.s

                data = read_qtable(file_path, hdu='DATA', hdul=hdul)

                if level != 'LB':
                    data['timedel'] = SCETimeDelta(data['timedel'])
                    offset = SCETime.from_float(header['OBT_BEG'] * u.s)

                    try:
                        control['time_stamp'] = SCETime.from_float(
                            control['time_stamp'])
                    except KeyError:
                        pass

                    data['time'] = offset + data['time']

                energies = None
                if level == 'L1':
                    try:
                        energies = read_qtable(file_path, hdu='ENERGIES')
                    except KeyError:
                        logger.info(
                            f"no ENERGIES data found in FITS: {file_path}")
                idb_versions = defaultdict(SCETimeRange)
                if level in ('L0', 'L1'):
                    try:
                        idbt = read_qtable(file_path, hdu='IDB_VERSIONS')
                        for row in idbt.iterrows():
                            idb_versions[row[0]] = SCETimeRange(
                                start=SCETime.from_float(row[1]),
                                end=SCETime.from_float(row[2]))
                    except KeyError:
                        logger.warn(f"no IDB data found in FITS: {file_path}")

                Product = self._check_registered_widget(
                    level=level,
                    service_type=service_type,
                    service_subtype=service_subtype,
                    ssid=ssid,
                    control=control,
                    data=data,
                    energies=energies)

                return Product(level=level,
                               service_type=service_type,
                               service_subtype=service_subtype,
                               ssid=ssid,
                               control=control,
                               data=data,
                               energies=energies,
                               idb_versions=idb_versions,
                               raw=raw,
                               parent=parent)