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)
def test_time_from_float(): dt = SCETime.from_float(1 * u.s) assert dt == SCETime(coarse=1, fine=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)
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
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)