From 4d4a8d8f9b68a1c6adc115e7e96de8102a7dbd18 Mon Sep 17 00:00:00 2001 From: Sharon Goliath Date: Fri, 29 Nov 2024 12:10:21 -0800 Subject: [PATCH 1/5] CADC_13844 - interim commit. --- gem2caom2/builder.py | 10 +- gem2caom2/composable.py | 35 +- gem2caom2/data_source.py | 26 +- gem2caom2/fits2caom2_augmentation.py | 10 +- gem2caom2/gem_name.py | 15 +- gem2caom2/gemini_metadata.py | 191 +- gem2caom2/main_app.py | 461 +- gem2caom2/obs_file_relationship.py | 1 - gem2caom2/pull_augmentation.py | 14 +- .../data/diskfiles_mock/query_limit.html | 8855 +++++++++++++++++ .../tests/data/programs/GS-2021A-Q-777.xml | 27 + gem2caom2/tests/gem_mocks.py | 186 +- gem2caom2/tests/test_builder.py | 3 +- gem2caom2/tests/test_caom_gen_visit.py | 94 +- gem2caom2/tests/test_composable.py | 85 +- gem2caom2/tests/test_data_source.py | 44 +- gem2caom2/tests/test_gemini_metadata.py | 14 +- gem2caom2/tests/test_meta_visit_edge_cases.py | 53 +- gem2caom2/tests/test_multi_plane.py | 94 +- gem2caom2/tests/test_visitors.py | 20 +- gem2caom2/util.py | 1 - 21 files changed, 9917 insertions(+), 322 deletions(-) create mode 100644 gem2caom2/tests/data/diskfiles_mock/query_limit.html create mode 100644 gem2caom2/tests/data/programs/GS-2021A-Q-777.xml diff --git a/gem2caom2/builder.py b/gem2caom2/builder.py index 0f69cbf..cc0166e 100644 --- a/gem2caom2/builder.py +++ b/gem2caom2/builder.py @@ -111,11 +111,11 @@ def build(self, entry): or self._config.use_local_files ): self._logger.debug(f'Using entry for source.') - result = gem_name.GemName(file_name=f_name) + result = gem_name.GemName(file_name=f_name, filter_cache=self._metadata_reader.filter_cache) result.source_names = [entry] elif '.fits' in entry or '.jpg' in entry: self._logger.debug('Using file_id for source.') - result = gem_name.GemName(file_name=f_name) + result = gem_name.GemName(file_name=f_name, filter_cache=self._metadata_reader.filter_cache) result.source_names = [result.file_id] elif '.fits' not in entry and '.jpg' not in entry: # this case exists so that retries.txt entries are @@ -129,7 +129,9 @@ def build(self, entry): 'entry might be file_id, try a made-up name.' ) made_up_file_name = f'{entry}.fits' - result = gem_name.GemName(file_name=made_up_file_name) + result = gem_name.GemName( + file_name=made_up_file_name, filter_cache=self._metadata_reader.filter_cache + ) result.source_names = [result.file_id] self._metadata_reader.set(result) # StorageName instance is only partially constructed at this @@ -139,5 +141,5 @@ def build(self, entry): return result except Exception as e: self._logger.error(e) - self._logger.debug(traceback.format_exc()) + self._logger.error(traceback.format_exc()) raise mc.CadcException(e) diff --git a/gem2caom2/composable.py b/gem2caom2/composable.py index 908159a..0f49203 100644 --- a/gem2caom2/composable.py +++ b/gem2caom2/composable.py @@ -79,6 +79,8 @@ from gem2caom2 import pull_augmentation, data_source, builder from gem2caom2 import cleanup_augmentation, fits2caom2_augmentation from gem2caom2 import gemini_metadata, svofps +from gem2caom2.gem_name import GemName + DATA_VISITORS = [ghost_preview_augmentation] META_VISITORS = [fits2caom2_augmentation, pull_augmentation, preview_augmentation, cleanup_augmentation] @@ -148,13 +150,11 @@ def _common_init(): clients = GemClientCollection(config) meta_visitors = META_VISITORS gemini_session = mc.get_endpoint_session() - provenance_finder = gemini_metadata.ProvenanceFinder( - config, clients.query_client, gemini_session - ) svofps_session = mc.get_endpoint_session() filter_cache = svofps.FilterMetadataCache(svofps_session) clients.gemini_session = gemini_session clients.svo_session = svofps_session + provenance_finder = gemini_metadata.ProvenanceFinder(clients, config) if config.use_local_files or mc.TaskType.SCRAPE in config.task_types: metadata_reader = gemini_metadata.GeminiFileMetadataReader( gemini_session, provenance_finder, filter_cache @@ -331,40 +331,21 @@ def _run_incremental_diskfiles(): clients = GemClientCollection(config) meta_visitors = META_VISITORS gemini_session = mc.get_endpoint_session() - provenance_finder = gemini_metadata.ProvenanceFinder(config, clients.query_client, gemini_session) svofps_session = mc.get_endpoint_session() filter_cache = svofps.FilterMetadataCache(svofps_session) clients.gemini_session = gemini_session clients.svo_session = svofps_session - metadata_reader = gemini_metadata.FileInfoBeforeJsonReader( - clients.data_client, gemini_session, provenance_finder, filter_cache - ) - reader_lookup = gemini_metadata.GeminiMetadataLookup(metadata_reader) - reader_lookup.reader = metadata_reader - name_builder = builder.GemObsIDBuilder(config, metadata_reader, reader_lookup) - incremental_source = data_source.IncrementalSourceDiskfiles(config, metadata_reader) - result = rc.run_by_state( + incremental_source = data_source.IncrementalSourceDiskfiles(config, gemini_session, GemName, filter_cache) + return rc.run_by_state_runner_meta( config=config, - name_builder=name_builder, meta_visitors=meta_visitors, data_visitors=DATA_VISITORS, sources=[incremental_source], clients=clients, - metadata_reader=metadata_reader, - organizer_module_name='gem2caom2.composable', - organizer_class_name='GemOrganizeExecutes', + organizer_module_name='gem2caom2.gemini_metadata', + organizer_class_name='GeminiOrganizeExecutesRunnerMeta', + storage_name_ctor=GemName, ) - if incremental_source.max_records_encountered: - # There's a currently 10k limit on the number of records returned from the archive.gemini.edu endpoints. - # As of this writing, if that limit is encountered, the ingestion requires manual intervention to recover. - # As opposed to stopping the incremental ingestion with a time-box where it will just continually fail - # with this same error, which is what raising the exception would do, the app notifies Ops via the log - # message, and then carries on, so as to more efficiently process large numbers of inputs. - logging.warning('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!') - logging.warning('Encountered maximum records!!') - logging.warning('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!') - result |= -1 - return result def run_incremental_diskfiles(): diff --git a/gem2caom2/data_source.py b/gem2caom2/data_source.py index e61270a..d572aae 100644 --- a/gem2caom2/data_source.py +++ b/gem2caom2/data_source.py @@ -230,13 +230,14 @@ class IncrementalSourceDiskfiles(dsc.IncrementalDataSource): entrytime is when the DB record behind the JSON being displayed was created. """ - def __init__(self, config, reader): + def __init__(self, config, gemini_session, storage_name_ctor, filter_cache): super().__init__(config, start_key=GEM_BOOKMARK) self._max_records_encountered = False self._encounter_start = None self._encounter_end = None - self._session = reader._session - self._metadata_reader = reader + self._session = gemini_session + self._storage_name_ctor = storage_name_ctor + self._filter_cache = filter_cache def _initialize_end_dt(self): self._end_dt = datetime.now() @@ -250,10 +251,14 @@ def get_time_box_work(self, prev_exec_dt, exec_dt): """ self._logger.debug(f'Begin get_time_box_work from {prev_exec_dt} to {exec_dt}.') + self._max_records_encountered = False # datetime format 2019-12-01T00:00:00 => no microseconds in the url prev_exec_dt_iso = prev_exec_dt.replace(microsecond=0) exec_dt_iso = exec_dt.replace(microsecond=0) - url = f'https://archive.gemini.edu/diskfiles/entrytimedaterange={prev_exec_dt_iso.isoformat()}--{exec_dt_iso.isoformat()}' + url = ( + f'https://archive.gemini.edu/diskfiles/entrytimedaterange=' + f'{prev_exec_dt_iso.isoformat()}--{exec_dt_iso.isoformat()}' + ) # needs to be ordered by timestamps when processed self._logger.info(f'Querying {url}') @@ -277,13 +282,14 @@ def get_time_box_work(self, prev_exec_dt, exec_dt): for entry_dt, values in metadata.items(): for value in values: file_name = value.get('filename') - entries.append(dsc.StateRunnerMeta(file_name, entry_dt)) - uri = build_uri(StorageName.collection, file_name, StorageName.scheme) - self._metadata_reader.add_file_info_html_record(uri, value) + storage_name = self._storage_name_ctor(file_name, self._filter_cache) + storage_name.file_info[storage_name.destination_uris[0]] = value + entries.append(dsc.RunnerMeta(storage_name, entry_dt)) finally: if response is not None: response.close() if len(entries) == MAX_ENTRIES: + self._logger.error(f'Max records window {self._encounter_start} to {self._encounter_end}.') self._max_records_encountered = True self._encounter_start = prev_exec_dt self._encounter_end = exec_dt @@ -310,11 +316,5 @@ def _parse_diskfiles_response(self, html_string): result = OrderedDict(sorted(temp.items())) return result - @property def max_records_encountered(self): - if self._max_records_encountered: - self._logger.error( - f'Max records window {self._encounter_start} to ' - f'{self._encounter_end}.' - ) return self._max_records_encountered diff --git a/gem2caom2/fits2caom2_augmentation.py b/gem2caom2/fits2caom2_augmentation.py index 1fad01b..a216a0a 100644 --- a/gem2caom2/fits2caom2_augmentation.py +++ b/gem2caom2/fits2caom2_augmentation.py @@ -71,17 +71,17 @@ from gem2caom2 import main_app -class GeminiFits2caom2Visitor(cc.Fits2caom2Visitor): +class GeminiFits2caom2Visitor(cc.Fits2caom2VisitorRunnerMeta): def __init__(self, observation, **kwargs): super().__init__(observation, **kwargs) - def _get_mapping(self, headers, _): + def _get_mapping(self, dest_uri): return main_app.mapping_factory( self._storage_name, - headers, - self._metadata_reader, + self._storage_name.metadata.get(dest_uri), + None, # metadata reader self._clients, - self._observable, + self._reporter._observable, self._observation, self._config, ) diff --git a/gem2caom2/gem_name.py b/gem2caom2/gem_name.py index e2a0cbf..edc14fc 100644 --- a/gem2caom2/gem_name.py +++ b/gem2caom2/gem_name.py @@ -66,6 +66,8 @@ # *********************************************************************** # +from os.path import basename + from caom2pipe import manage_composable as mc from gem2caom2.obs_file_relationship import remove_extensions @@ -145,10 +147,21 @@ class GemName(mc.StorageName): def __init__( self, file_name=None, + filter_cache=None, ): - super().__init__(file_name=file_name.replace('.header', '')) + super().__init__(file_name=basename(file_name.replace('.header', ''))) # use the file id because the extension doesn't help much in the archive.gemini.edu URL self._source_names = [self._file_id] + self._json_metadata = {} + self._filter_cache = filter_cache + + @property + def json_metadata(self): + return self._json_metadata + + @property + def name(self): + return self._file_id @property def prev(self): diff --git a/gem2caom2/gemini_metadata.py b/gem2caom2/gemini_metadata.py index 86b6ea7..24aa846 100644 --- a/gem2caom2/gemini_metadata.py +++ b/gem2caom2/gemini_metadata.py @@ -86,6 +86,7 @@ from caom2utils import data_util from caom2pipe.astro_composable import get_datetime_mjd from caom2pipe import client_composable as clc +from caom2pipe.execute_composable import MetaVisitRunnerMeta, OrganizeExecutesRunnerMeta from caom2pipe import manage_composable as mc from caom2pipe import reader_composable as rdc from gem2caom2.util import Inst @@ -201,7 +202,7 @@ def _retrieve_file_info(self, key, source_name): pass def _retrieve_headers(self, key, source_name): - self._headers[key] = retrieve_headers(source_name, self._logger, self._session) + self._headers[key] = retrieve_gemini_headers(source_name, self._logger, self._session) def set(self, storage_name): self._logger.debug(f'Begin set for {storage_name.file_name}') @@ -244,7 +245,7 @@ def set_headers(self, storage_name): self._logger.info(f'{storage_name.source_names[0]} not at CADC. Checking archive.gemini.edu.') for idx, entry in enumerate(storage_name.source_names): if '.jpg' not in entry: - self._headers[storage_name.destination_uris[idx]] = retrieve_headers( + self._headers[storage_name.destination_uris[idx]] = retrieve_gemini_headers( path.basename(entry), self._logger, self._session ) self._logger.debug(f'Found {entry} at archive.gemini.edu.') @@ -278,6 +279,7 @@ def add_file_info_html_record(self, uri, html_record): ) self._logger.debug(f'Adding FileInfo for {uri}') + class GeminiMetadataLookup: def __init__(self, metadata_reader): self._reader = metadata_reader @@ -411,13 +413,45 @@ def _search_fits(self, uri, lookup_key): temp = headers[1].get(lookup_key) return temp - @property - def reader(self): - return self._reader - @reader.setter - def reader(self, value): - self._reader = value +class GeminiMetadataLookupStorageName(GeminiMetadataLookup): + def __init__(self, storage_name): + super().__init__(None) + self._storage_name = storage_name + + def max_exputend(self, uri): + if self._max_exputend.get(uri) is None: + headers = self._storage_name.metadata.get(uri) + if headers is not None and len(headers) > 0: + exputend_values = deque() + for header in headers: + if header.get('EXPUTEND') is not None: + date_obs = header.get('DATE-OBS') + temp = header.get('EXPUTEND') + exputend_values.append(f'{date_obs} {temp}') + + if len(exputend_values) >= 2: + start = get_datetime_mjd(mc.make_datetime(exputend_values.popleft())) + end = get_datetime_mjd(mc.make_datetime(exputend_values.pop())) + if end < start: + # in case the observation crosses midnight + end = end + TimeDelta(1.0 * units.day) + self._max_exputend[uri] = end.value + return self._max_exputend.get(uri) + + def _search_json(self, uri, lookup_key): + return self._storage_name.json_metadata.get(uri).get(lookup_key) + + def _search_fits(self, uri, lookup_key): + temp = None + headers = self._storage_name.metadata.get(uri) + if headers is not None and len(headers) > 0: + # if headers are None, the file is proprietary at + # archive.gemini.edu, and cannot be retrieved + temp = headers[0].get(lookup_key) + if temp is None and len(headers) > 1: + temp = headers[1].get(lookup_key) + return temp class ProvenanceFinder: @@ -447,11 +481,12 @@ class ProvenanceFinder: for provenance T/F case. """ - def __init__(self, config, tap_client, gemini_session): + # def __init__(self, config, tap_client, gemini_session): + def __init__(self, clients, config): self._use_local_files = config.use_local_files self._connected = mc.TaskType.SCRAPE not in config.task_types - self._tap_client = tap_client - self._gemini_session = gemini_session + self._tap_client = clients.query_client + self._gemini_session = clients.gemini_session self._data_sources = config.data_sources self._logger = logging.getLogger(self.__class__.__name__) @@ -540,6 +575,126 @@ def get(self, uri): return repaired_data_label +class GeminiMetaVisitRunnerMeta(MetaVisitRunnerMeta): + """ + Defines the pipeline step for Collection creation or augmentation by a visitor of metadata into CAOM. + """ + + def __init__( + self, + clients, + config, + meta_visitors, + reporter, + ): + super().__init__( + clients=clients, + config=config, + meta_visitors=meta_visitors, + reporter=reporter, + ) + + def _set_preconditions(self): + """This is probably not the best approach, but I want to think about where the optimal location for the + retrieve_file_info and retrieve_headers methods will be long-term. So, for the moment, use them here.""" + self._logger.debug(f'Begin _set_preconditions for {self._storage_name.file_uri}') + # ask archive.gemini.edu for the information + for index, source_name in enumerate(self._storage_name.source_names): + uri = self._storage_name.destination_uris[index] + if uri not in self._storage_name.metadata: + self._storage_name.metadata[uri] = [] + if '.fits' in uri: + self._storage_name._metadata[uri] = retrieve_headers( + source_name, self._logger, self._clients, self._config + ) + # TODO - is there a time when not needing archive.gemini.edu is possible? + if uri not in self._storage_name.json_metadata: + json_record = retrieve_json(source_name, self._logger, self._clients.gemini_session) + # json is an array of dicts, one dict per file, find the right dict + for jj in json_record: + # choose this key, and the comparison, because the lhs can be + # a file id + f_name = uri.split('/')[-1] + if f_name in jj.get('filename'): + self._storage_name._json_metadata[uri] = jj + self._logger.debug(f'Adding JSON metadata for {uri}') + break + + if uri not in self._storage_name.file_info: + self._storage_name._file_info[uri] = FileInfo( + id=uri, + size=self._storage_name._json_metadata[uri].get('data_size'), + name=self._storage_name._json_metadata[uri].get('filename'), + md5sum=self._storage_name._json_metadata[uri].get('data_md5'), + lastmod=mc.make_datetime(self._storage_name._json_metadata[uri].get('lastmod')), + file_type=data_util.get_file_type(self._storage_name._json_metadata[uri].get('filename')), + encoding=data_util.get_file_encoding(self._storage_name._json_metadata[uri].get('filename')), + ) + if uri not in self._storage_name.file_info: + if self._config.use_local_files: + self._storage_name._file_info[uri] = data_util.get_local_file_info(source_name) + else: + self._storage_name._file_info[uri] = self._clients.data_client.info(uri) + + file_name = self._storage_name._json_metadata[uri].get('filename') + data_label = self._storage_name._json_metadata[uri].get('data_label') + repaired_data_label = obs_file_relationship.repair_data_label(file_name, data_label) + self._storage_name.obs_id = repaired_data_label + self._logger.debug('End _set_preconditions') + + +class GeminiOrganizeExecutesRunnerMeta(OrganizeExecutesRunnerMeta): + """A class that extends OrganizeExecutes to handle the choosing of the correct executors based on the config.yml. + Attributes: + _needs_delete (bool): if True, the CAOM repo action is delete/create instead of update. + _reporter: An instance responsible for reporting the execution status. + Methods: + _choose(): + Determines which descendants of CaomExecute to instantiate based on the content of the config.yml + file for an application. + """ + + def __init__( + self, + config, + meta_visitors, + data_visitors, + needs_delete=False, + store_transfer=None, + modify_transfer=None, + clients=None, + reporter=None, + ): + super().__init__( + config, + meta_visitors, + data_visitors, + store_transfer=store_transfer, + modify_transfer=modify_transfer, + clients=clients, + reporter=reporter, + needs_delete=needs_delete, + ) + + def _choose(self): + """The logic that decides which descendants of CaomExecute to instantiate. This is based on the content of + the config.yml file for an application. + """ + super()._choose() + for task_type in self.task_types: + if task_type == mc.TaskType.INGEST: + if self._needs_delete: + raise mc.CadcException('No need identified for this yet.') + else: + self._logger.debug(f'Choosing executor GeminiMetaVisit for {task_type}.') + self._executors = [] # over-ride the default choice. + self._executors.append( + GeminiMetaVisitRunnerMeta( + self._clients, self.config, self._meta_visitors, self._reporter + ) + ) + + def repair_instrument(in_name): if in_name == 'ALOPEKE': # because the value in JSON is a different case than the value in @@ -563,7 +718,19 @@ def repair_instrument(in_name): return Inst(in_name) -def retrieve_headers(source_name, logger, session): +def retrieve_headers(source_name, logger, clients, config): + result = None + if config.use_local_files: + result = data_util.get_local_file_headers(source_name) + else: + result = clients.data_client.get_head(f'{config.scheme}:{config.collection}/{path.basename(source_name)}') + if not result: + # if the header is not at CADC, retrieve it from archive.gemini.edu + result = retrieve_gemini_headers(source_name, logger, clients.gemini_session) + return result + + +def retrieve_gemini_headers(source_name, logger, session): logger.debug(f'Begin retrieve_headers for {source_name}') header_url = f'{HEADER_URL}{source_name}.fits' # Open the URL and fetch the JSON document for the observation diff --git a/gem2caom2/main_app.py b/gem2caom2/main_app.py index 7025216..fbd70f3 100644 --- a/gem2caom2/main_app.py +++ b/gem2caom2/main_app.py @@ -112,7 +112,7 @@ import gem2caom2.obs_file_relationship as ofr from gem2caom2.gem_name import GemName from gem2caom2 import program_metadata, svofps -from gem2caom2.gemini_metadata import GeminiMetadataLookup +from gem2caom2.gemini_metadata import GeminiMetadataLookup, GeminiMetadataLookupStorageName, ProvenanceFinder from gem2caom2.util import Inst @@ -206,12 +206,23 @@ class GeminiMapping(cc.TelescopeMapping): # value repair cache value_repair = GeminiValueRepair() - def __init__(self, storage_name, headers, lookup, instrument, clients, observable, observation, config): + def __init__( + self, + storage_name, + headers, + lookup, + instrument, + clients, + observable, + observation, + config, + provenance_finder, + ): super().__init__(storage_name, headers, clients, observable, observation, config) - self._metadata_reader = lookup.reader self._instrument = instrument self._lookup = lookup - self._filter_cache = self._metadata_reader.filter_cache + self._filter_cache = self._storage_name._filter_cache + self._provenance_finder = provenance_finder self.fm = None def get_art_content_checksum(self, ext): @@ -326,11 +337,7 @@ def get_meta_release(self, ext): :return: The Observation/Plane release date, or None if not found. """ # TODO - this is a bit different ROTFL - if self._headers is None: - # GenericParser, so no headers retrieved from archive.gemini.edu, - # probably a 403 being returned by the site, assume proprietary - meta_release = self._lookup.release(self._storage_name.file_uri) - else: + if self._headers: # DB 21-08-19 # If PROP_MD is T, use JSON ‘release’ value for metadata release # date. If no PROP_MD present or value is F use the JSON @@ -342,6 +349,11 @@ def get_meta_release(self, ext): if meta_release is None or prop_md and prop_md == 'T' or prop_md: # a late value is better than None, since that makes the Observation unfindable meta_release = self._lookup.release(self._storage_name.file_uri) + else: + # GenericParser, so no headers retrieved from archive.gemini.edu, + # probably a 403 being returned by the site, assume proprietary + meta_release = self._lookup.release(self._storage_name.file_uri) + return mc.make_datetime(meta_release) def get_obs_intent(self, ext): @@ -635,7 +647,7 @@ def accumulate_blueprint(self, bp): self._accumulate_chunk_time_axis_blueprint(bp, 3) self._logger.debug('Done accumulate_blueprint.') - def update(self, file_info): + def update(self): if self._headers is None: # proprietary header metadata at archive.gemini.edu, so do nothing @@ -680,7 +692,7 @@ def update(self, file_info): continue if GemName.is_preview(artifact.uri): continue - update_artifact_meta(artifact, file_info) + update_artifact_meta(artifact, self._storage_name.file_info.get(artifact.uri)) self._update_artifact(artifact) processed = ofr.is_processed(self._storage_name.file_name) if self._instrument in [ @@ -934,7 +946,8 @@ def _repair_provenance_value(self, value, obs_id): # TODO - what to do about the data label search here? there's no # file metadata, it would be _most_ efficient to do this from CADC # so need to re-use this code somehow :( - prov_obs_id = self._metadata_reader.provenance_finder.get(uri) + prov_obs_id = self._provenance_finder.get(uri) + self._logger.error(f'{prov_obs_id} uri {uri} {self._provenance_finder.get}') except mc.CadcException as e: # the file id probably does not exist at on disk, at CADC, or at # Gemini, ignore, because it's provenance @@ -1224,8 +1237,21 @@ def _remove_processing_detritus(values, obs_id): class Bhros(GeminiMapping): - def __init__(self, storage_name, headers, lookup, instrument, clients, observable, observation, config): - super().__init__(storage_name, headers, lookup, instrument, clients, observable, observation, config) + def __init__( + self, + storage_name, + headers, + lookup, + instrument, + clients, + observable, + observation, + config, + provenance_finder, + ): + super().__init__( + storage_name, headers, lookup, instrument, clients, observable, observation, config, provenance_finder + ) def accumulate_blueprint(self, bp): super().accumulate_blueprint(bp) @@ -1322,8 +1348,21 @@ def _update_position(self, part, chunk, ext): class Cirpass(GeminiMapping): - def __init__(self, storage_name, headers, lookup, instrument, clients, observable, observation, config): - super().__init__(storage_name, headers, lookup, instrument, clients, observable, observation, config) + def __init__( + self, + storage_name, + headers, + lookup, + instrument, + clients, + observable, + observation, + config, + provenance_finder, + ): + super().__init__( + storage_name, headers, lookup, instrument, clients, observable, observation, config, provenance_finder + ) def accumulate_blueprint(self, bp): super().accumulate_blueprint(bp) @@ -1471,8 +1510,21 @@ def _update_position(self, part, chunk, ext): class F2(GeminiMapping): - def __init__(self, storage_name, headers, lookup, instrument, clients, observable, observation, config): - super().__init__(storage_name, headers, lookup, instrument, clients, observable, observation, config) + def __init__( + self, + storage_name, + headers, + lookup, + instrument, + clients, + observable, + observation, + config, + provenance_finder, + ): + super().__init__( + storage_name, headers, lookup, instrument, clients, observable, observation, config, provenance_finder + ) def accumulate_blueprint(self, bp): """Configure the telescope-specific ObsBlueprint at the CAOM model @@ -1661,8 +1713,21 @@ def _update_time(self, chunk): class Flamingos(GeminiMapping): - def __init__(self, storage_name, headers, lookup, instrument, clients, observable, observation, config): - super().__init__(storage_name, headers, lookup, instrument, clients, observable, observation, config) + def __init__( + self, + storage_name, + headers, + lookup, + instrument, + clients, + observable, + observation, + config, + provenance_finder, + ): + super().__init__( + storage_name, headers, lookup, instrument, clients, observable, observation, config, provenance_finder + ) def accumulate_blueprint(self, bp): super().accumulate_blueprint(bp) @@ -1947,8 +2012,21 @@ def _update_position(self, part, chunk, ext): class Fox(GeminiMapping): - def __init__(self, storage_name, headers, lookup, instrument, clients, observable, observation, config): - super().__init__(storage_name, headers, lookup, instrument, clients, observable, observation, config) + def __init__( + self, + storage_name, + headers, + lookup, + instrument, + clients, + observable, + observation, + config, + provenance_finder, + ): + super().__init__( + storage_name, headers, lookup, instrument, clients, observable, observation, config, provenance_finder + ) def accumulate_blueprint(self, bp): """Configure the telescope-specific ObsBlueprint at the CAOM model @@ -2035,8 +2113,21 @@ def _update_time(self, chunk): class GHOSTSpectralTemporal(GeminiMapping): """Fibre-fed spectrograph""" - def __init__(self, storage_name, headers, lookup, instrument, clients, observable, observation, config): - super().__init__(storage_name, headers, lookup, instrument, clients, observable, observation, config) + def __init__( + self, + storage_name, + headers, + lookup, + instrument, + clients, + observable, + observation, + config, + provenance_finder, + ): + super().__init__( + storage_name, headers, lookup, instrument, clients, observable, observation, config, provenance_finder + ) def accumulate_blueprint(self, bp): """Configure the telescope-specific ObsBlueprint at the CAOM model Observation level.""" @@ -2164,8 +2255,21 @@ def _update_time(self, chunk): class GHOSTSpatialSpectralTemporal(GHOSTSpectralTemporal): - def __init__(self, storage_name, headers, lookup, instrument, clients, observable, observation, config): - super().__init__(storage_name, headers, lookup, instrument, clients, observable, observation, config) + def __init__( + self, + storage_name, + headers, + lookup, + instrument, + clients, + observable, + observation, + config, + provenance_finder, + ): + super().__init__( + storage_name, headers, lookup, instrument, clients, observable, observation, config, provenance_finder + ) def accumulate_blueprint(self, bp): """Configure the telescope-specific ObsBlueprint at the CAOM model Observation level.""" @@ -2180,8 +2284,21 @@ def accumulate_blueprint(self, bp): class Gmos(GeminiMapping): - def __init__(self, storage_name, headers, lookup, instrument, clients, observable, observation, config): - super().__init__(storage_name, headers, lookup, instrument, clients, observable, observation, config) + def __init__( + self, + storage_name, + headers, + lookup, + instrument, + clients, + observable, + observation, + config, + provenance_finder, + ): + super().__init__( + storage_name, headers, lookup, instrument, clients, observable, observation, config, provenance_finder + ) def accumulate_blueprint(self, bp): super().accumulate_blueprint(bp) @@ -2411,8 +2528,21 @@ def _update_energy(self, chunk, data_product_type, filter_name): class Gnirs(GeminiMapping): - def __init__(self, storage_name, headers, lookup, instrument, clients, observable, observation, config): - super().__init__(storage_name, headers, lookup, instrument, clients, observable, observation, config) + def __init__( + self, + storage_name, + headers, + lookup, + instrument, + clients, + observable, + observation, + config, + provenance_finder, + ): + super().__init__( + storage_name, headers, lookup, instrument, clients, observable, observation, config, provenance_finder + ) def accumulate_blueprint(self, bp): """Configure the telescope-specific ObsBlueprint at the CAOM model @@ -2916,8 +3046,21 @@ def _update_energy(self, chunk, data_product_type, filter_name): class Gpi(GeminiMapping): - def __init__(self, storage_name, headers, lookup, instrument, clients, observable, observation, config): - super().__init__(storage_name, headers, lookup, instrument, clients, observable, observation, config) + def __init__( + self, + storage_name, + headers, + lookup, + instrument, + clients, + observable, + observation, + config, + provenance_finder, + ): + super().__init__( + storage_name, headers, lookup, instrument, clients, observable, observation, config, provenance_finder + ) def accumulate_blueprint(self, bp): super().accumulate_blueprint(bp) @@ -3063,8 +3206,21 @@ def _update_position(self, part, chunk, extension): class GracesSpectralTemporal(GeminiMapping): """Fibre-fed spectrograph""" - def __init__(self, storage_name, headers, lookup, instrument, clients, observable, observation, config): - super().__init__(storage_name, headers, lookup, instrument, clients, observable, observation, config) + def __init__( + self, + storage_name, + headers, + lookup, + instrument, + clients, + observable, + observation, + config, + provenance_finder, + ): + super().__init__( + storage_name, headers, lookup, instrument, clients, observable, observation, config, provenance_finder + ) def accumulate_blueprint(self, bp): """Configure the telescope-specific ObsBlueprint at the CAOM model Observation level.""" @@ -3126,8 +3282,21 @@ def _update_time(self, chunk): class GracesSpatialSpectralTemporal(GracesSpectralTemporal): """Fibre-fed spectrograph""" - def __init__(self, storage_name, headers, lookup, instrument, clients, observable, observation, config): - super().__init__(storage_name, headers, lookup, instrument, clients, observable, observation, config) + def __init__( + self, + storage_name, + headers, + lookup, + instrument, + clients, + observable, + observation, + config, + provenance_finder, + ): + super().__init__( + storage_name, headers, lookup, instrument, clients, observable, observation, config, provenance_finder + ) def accumulate_blueprint(self, bp): """Configure the telescope-specific ObsBlueprint at the CAOM model Observation level.""" @@ -3137,8 +3306,21 @@ def accumulate_blueprint(self, bp): class Gsaoi(GeminiMapping): - def __init__(self, storage_name, headers, lookup, instrument, clients, observable, observation, config): - super().__init__(storage_name, headers, lookup, instrument, clients, observable, observation, config) + def __init__( + self, + storage_name, + headers, + lookup, + instrument, + clients, + observable, + observation, + config, + provenance_finder, + ): + super().__init__( + storage_name, headers, lookup, instrument, clients, observable, observation, config, provenance_finder + ) def accumulate_blueprint(self, bp): """Configure the telescope-specific ObsBlueprint at the CAOM model @@ -3185,8 +3367,21 @@ def _update_energy(self, chunk, data_product_type, filter_name): class Hokupaa(GeminiMapping): - def __init__(self, storage_name, headers, lookup, instrument, clients, observable, observation, config): - super().__init__(storage_name, headers, lookup, instrument, clients, observable, observation, config) + def __init__( + self, + storage_name, + headers, + lookup, + instrument, + clients, + observable, + observation, + config, + provenance_finder, + ): + super().__init__( + storage_name, headers, lookup, instrument, clients, observable, observation, config, provenance_finder + ) def accumulate_blueprint(self, bp): super().accumulate_blueprint(bp) @@ -3390,8 +3585,21 @@ def _update_position(self, part, chunk, ext): class Hrwfs(GeminiMapping): - def __init__(self, storage_name, headers, lookup, instrument, clients, observable, observation, config): - super().__init__(storage_name, headers, lookup, instrument, clients, observable, observation, config) + def __init__( + self, + storage_name, + headers, + lookup, + instrument, + clients, + observable, + observation, + config, + provenance_finder, + ): + super().__init__( + storage_name, headers, lookup, instrument, clients, observable, observation, config, provenance_finder + ) def accumulate_blueprint(self, bp): super().accumulate_blueprint(bp) @@ -3453,8 +3661,21 @@ def _update_energy(self, chunk, data_product_type, filter_name): class Igrins(GeminiMapping): - def __init__(self, storage_name, headers, lookup, instrument, clients, observable, observation, config): - super().__init__(storage_name, headers, lookup, instrument, clients, observable, observation, config) + def __init__( + self, + storage_name, + headers, + lookup, + instrument, + clients, + observable, + observation, + config, + provenance_finder, + ): + super().__init__( + storage_name, headers, lookup, instrument, clients, observable, observation, config, provenance_finder + ) def accumulate_blueprint(self, bp): """Configure the telescope-specific ObsBlueprint at the CAOM model @@ -3535,8 +3756,21 @@ def _update_position(self, part, chunk, ext): class Michelle(GeminiMapping): - def __init__(self, storage_name, headers, lookup, instrument, clients, observable, observation, config): - super().__init__(storage_name, headers, lookup, instrument, clients, observable, observation, config) + def __init__( + self, + storage_name, + headers, + lookup, + instrument, + clients, + observable, + observation, + config, + provenance_finder, + ): + super().__init__( + storage_name, headers, lookup, instrument, clients, observable, observation, config, provenance_finder + ) def accumulate_blueprint(self, bp): super().accumulate_blueprint(bp) @@ -3700,8 +3934,21 @@ def _update_energy(self, chunk, data_product_type, filter_name): class Nici(GeminiMapping): - def __init__(self, storage_name, headers, lookup, instrument, clients, observable, observation, config): - super().__init__(storage_name, headers, lookup, instrument, clients, observable, observation, config) + def __init__( + self, + storage_name, + headers, + lookup, + instrument, + clients, + observable, + observation, + config, + provenance_finder, + ): + super().__init__( + storage_name, headers, lookup, instrument, clients, observable, observation, config, provenance_finder + ) def accumulate_blueprint(self, bp): """Configure the telescope-specific ObsBlueprint at the CAOM model @@ -3799,8 +4046,21 @@ def _update_energy(self, chunk, data_product_type, filter_name): class Nifs(GeminiMapping): - def __init__(self, storage_name, headers, lookup, instrument, clients, observable, observation, config): - super().__init__(storage_name, headers, lookup, instrument, clients, observable, observation, config) + def __init__( + self, + storage_name, + headers, + lookup, + instrument, + clients, + observable, + observation, + config, + provenance_finder, + ): + super().__init__( + storage_name, headers, lookup, instrument, clients, observable, observation, config, provenance_finder + ) def accumulate_blueprint(self, bp): super().accumulate_blueprint(bp) @@ -4075,8 +4335,21 @@ def _update_position(self, part, chunk, ext): class Niri(GeminiMapping): - def __init__(self, storage_name, headers, lookup, instrument, clients, observable, observation, config): - super().__init__(storage_name, headers, lookup, instrument, clients, observable, observation, config) + def __init__( + self, + storage_name, + headers, + lookup, + instrument, + clients, + observable, + observation, + config, + provenance_finder, + ): + super().__init__( + storage_name, headers, lookup, instrument, clients, observable, observation, config, provenance_finder + ) def accumulate_blueprint(self, bp): super().accumulate_blueprint(bp) @@ -4363,8 +4636,21 @@ def _update_position(self, part, chunk, extension): class Oscir(GeminiMapping): - def __init__(self, storage_name, headers, lookup, instrument, clients, observable, observation, config): - super().__init__(storage_name, headers, lookup, instrument, clients, observable, observation, config) + def __init__( + self, + storage_name, + headers, + lookup, + instrument, + clients, + observable, + observation, + config, + provenance_finder, + ): + super().__init__( + storage_name, headers, lookup, instrument, clients, observable, observation, config, provenance_finder + ) def accumulate_blueprint(self, bp): super().accumulate_blueprint(bp) @@ -4532,8 +4818,21 @@ def _update_position(self, part, chunk, ext): class Phoenix(GeminiMapping): - def __init__(self, storage_name, headers, lookup, instrument, clients, observable, observation, config): - super().__init__(storage_name, headers, lookup, instrument, clients, observable, observation, config) + def __init__( + self, + storage_name, + headers, + lookup, + instrument, + clients, + observable, + observation, + config, + provenance_finder, + ): + super().__init__( + storage_name, headers, lookup, instrument, clients, observable, observation, config, provenance_finder + ) def accumulate_blueprint(self, bp): """Configure the telescope-specific ObsBlueprint at the CAOM model @@ -4804,8 +5103,21 @@ def _update_position(self, part, chunk, ext): class Texes(GeminiMapping): - def __init__(self, storage_name, headers, lookup, instrument, clients, observable, observation, config): - super().__init__(storage_name, headers, lookup, instrument, clients, observable, observation, config) + def __init__( + self, + storage_name, + headers, + lookup, + instrument, + clients, + observable, + observation, + config, + provenance_finder, + ): + super().__init__( + storage_name, headers, lookup, instrument, clients, observable, observation, config, provenance_finder + ) def accumulate_blueprint(self, bp): """Configure the telescope-specific ObsBlueprint at the CAOM model @@ -4927,8 +5239,21 @@ def _update_position(self, part, chunk, ext): class Trecs(GeminiMapping): - def __init__(self, storage_name, headers, lookup, instrument, clients, observable, observation, config): - super().__init__(storage_name, headers, lookup, instrument, clients, observable, observation, config) + def __init__( + self, + storage_name, + headers, + lookup, + instrument, + clients, + observable, + observation, + config, + provenance_finder, + ): + super().__init__( + storage_name, headers, lookup, instrument, clients, observable, observation, config, provenance_finder + ) def accumulate_blueprint(self, bp): """Configure the telescope-specific ObsBlueprint at the CAOM model @@ -5083,7 +5408,11 @@ def get_obs_type(lookup, storage_name): def mapping_factory(storage_name, headers, metadata_reader, clients, observable, observation, config): - metadata_lookup = GeminiMetadataLookup(metadata_reader) + if metadata_reader: + metadata_lookup = GeminiMetadataLookup(metadata_reader) + else: + metadata_lookup = GeminiMetadataLookupStorageName(storage_name) + provenance_finder = ProvenanceFinder(clients, config) inst = metadata_lookup.instrument(storage_name.file_uri) lookup = { Inst.BHROS: Bhros, @@ -5114,17 +5443,17 @@ def mapping_factory(storage_name, headers, metadata_reader, clients, observable, result = None if inst in lookup: result = lookup.get(inst)( - storage_name, headers, metadata_lookup, inst, clients, observable, observation, config + storage_name, headers, metadata_lookup, inst, clients, observable, observation, config, provenance_finder ) elif inst is Inst.GHOST: obs_type = get_obs_type(metadata_lookup, storage_name) if obs_type in ['ARC', 'BIAS', 'FLAT']: result = GHOSTSpectralTemporal( - storage_name, headers, metadata_lookup, inst, clients, observable, observation, config + storage_name, headers, metadata_lookup, inst, clients, observable, observation, config, provenance_finder ) else: result = GHOSTSpatialSpectralTemporal( - storage_name, headers, metadata_lookup, inst, clients, observable, observation, config + storage_name, headers, metadata_lookup, inst, clients, observable, observation, config, provenance_finder ) elif inst is Inst.GRACES: obs_type = get_obs_type(metadata_lookup, storage_name) @@ -5138,11 +5467,11 @@ def mapping_factory(storage_name, headers, metadata_reader, clients, observable, # Ignore spatial WCS for the GRACES dataset with EPOCH=0.0. Not important for a bias. For GMOS we skip # spatial WCS for biases (and maybe for some other instruments). result = GracesSpectralTemporal( - storage_name, headers, metadata_lookup, inst, clients, observable, observation, config + storage_name, headers, metadata_lookup, inst, clients, observable, observation, config, provenance_finder ) else: result = GracesSpatialSpectralTemporal( - storage_name, headers, metadata_lookup, inst, clients, observable, observation, config + storage_name, headers, metadata_lookup, inst, clients, observable, observation, config, provenance_finder ) else: observable.rejected.record(mc.Rejected.MYSTERY_VALUE, storage_name.file_name) diff --git a/gem2caom2/obs_file_relationship.py b/gem2caom2/obs_file_relationship.py index 514b165..696600f 100644 --- a/gem2caom2/obs_file_relationship.py +++ b/gem2caom2/obs_file_relationship.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # *********************************************************************** # ****************** CANADIAN ASTRONOMY DATA CENTRE ******************* # ************* CENTRE CANADIEN DE DONNÉES ASTRONOMIQUES ************** diff --git a/gem2caom2/pull_augmentation.py b/gem2caom2/pull_augmentation.py index ef4344f..a38c321 100644 --- a/gem2caom2/pull_augmentation.py +++ b/gem2caom2/pull_augmentation.py @@ -88,12 +88,10 @@ def visit(observation, **kwargs): if clients is None: logging.warning('Need clients to update. Stopping pull visitor.') return - observable = kwargs.get('observable') - if observable is None: - raise mc.CadcException('Visitor needs a observable parameter.') - metadata_reader = kwargs.get('metadata_reader') - if metadata_reader is None: - raise mc.CadcException('Visitor needs a metadata_reader parameter.') + reporter = kwargs.get('reporter') + if reporter is None: + raise mc.CadcException('Visitor needs a reporter parameter.') + observable = reporter._observable storage_name = kwargs.get('storage_name') if storage_name is None: raise mc.CadcException('Visitor needs a storage_name parameter.') @@ -135,9 +133,7 @@ def visit(observation, **kwargs): # want to compare the checksum from the JSON, and the # checksum at CADC storage - if they are not the same, # retrieve the file from archive.gemini.edu again - json_md5sum = metadata_reader.file_info.get( - artifact.uri - ).md5sum + json_md5sum = storage_name.file_info.get(artifact.uri).md5sum look_pull_and_put( artifact.uri, fqn, file_url, clients, json_md5sum ) diff --git a/gem2caom2/tests/data/diskfiles_mock/query_limit.html b/gem2caom2/tests/data/diskfiles_mock/query_limit.html new file mode 100644 index 0000000..1a78db1 --- /dev/null +++ b/gem2caom2/tests/data/diskfiles_mock/query_limit.html @@ -0,0 +1,8855 @@ + + + + + + + + +FITS header diskfiles table + + + + + + + + + + +

WARNING: Your search does not constrain the number of results - ie you did not specify a date, + date range, program ID etc. Searches like this are limited to 500 results, and + this search hit that limit. Calibration association will not be available. You may want to + constrain your search. Constrained searches have a higher result limit. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Filename + Data Label + UT Date Time + Inst + Present + Entry Time + LastMod + File Size + File MD5 + Compressed + Data Size + Data MD5 +
S20190619Z0121b.fits + +[A] +GS-2019A-Q-311-0-0 + 2019-06-20 07:47:33 + ZORRO + True + 2024-08-28 17:05:00.127507+00:00 + 2024-08-28 17:04:59.939489+00:00 + 73235981 + aeaa0c0551f84911a713ec18a772364b + True + 131094720 + 4cf2df567f52a17fafe5b492fd87eafe +
S20190619Z0120b.fits + +[A] +GS-2019A-Q-311-0-0 + 2019-06-20 07:46:29 + ZORRO + True + 2024-08-28 17:05:01.165228+00:00 + 2024-08-28 17:05:00.989512+00:00 + 73617487 + b8278bb4d9319f454bf69c8157eef9f9 + True + 131094720 + 7cf2b3ce07af61628b9325277cae6586 +
S20190619Z0120r.fits + +[A] +GS-2019A-Q-311-0-0 + 2019-06-20 07:46:29 + ZORRO + True + 2024-08-28 17:05:01.242985+00:00 + 2024-08-28 17:05:01.039513+00:00 + 69897322 + 5c4db5999753e2f9766e3c1a4830c52a + True + 131094720 + 30d834bdbc5959c7040f8264dd5f4f77 +
S20190619Z0119r.fits + +[A] +GS-2019A-Q-311-0-0 + 2019-06-20 07:45:26 + ZORRO + True + 2024-08-28 17:05:01.601810+00:00 + 2024-08-28 17:05:01.389521+00:00 + 70264191 + d86acf405f4889cfb0302071a905bbb1 + True + 131094720 + 5be339ab717ac6a711e41c2fb7b8fa3a +
S20190619Z0119b.fits + +[A] +GS-2019A-Q-311-0-0 + 2019-06-20 07:45:26 + ZORRO + True + 2024-08-28 17:05:02.635706+00:00 + 2024-08-28 17:05:02.339541+00:00 + 74127649 + 9fe478f106ce36a0fb2f6e14589c376f + True + 131094720 + e1f75db404b4ec9bb6b2618136e24925 +
S20190619Z0118b.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 07:37:08 + ZORRO + True + 2024-08-28 17:05:04.310995+00:00 + 2024-08-28 17:05:03.979577+00:00 + 75793336 + 41300dabb334fd6d16a2f0b55f01d87b + True + 131094720 + 710e2cbe3324e879961339d21c317285 +
S20190619Z0118r.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 07:37:08 + ZORRO + True + 2024-08-28 17:05:04.125652+00:00 + 2024-08-28 17:05:03.889575+00:00 + 70166515 + 4275b0b419ffef09259534aa6d02c164 + True + 131094720 + 23a34bf931e6763e78b669225ab0463d +
S20190619Z0117b.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 07:32:28 + ZORRO + True + 2024-08-28 17:05:06.483106+00:00 + 2024-08-28 17:05:06.319627+00:00 + 65363177 + e70d7369444fa9b82ea4d71da7e0f3e0 + True + 131094720 + 4143b9565a032ec7770173945b50207f +
S20190619Z0117r.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 07:32:28 + ZORRO + True + 2024-08-28 17:05:05.831781+00:00 + 2024-08-28 17:05:05.559611+00:00 + 75680726 + a606a40e4568fabc2380eda703a3b206 + True + 131094720 + bb0756cf76477e98743a4cb9f25c3d24 +
S20190619Z0116r.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 07:31:25 + ZORRO + True + 2024-08-28 17:05:06.703115+00:00 + 2024-08-28 17:05:06.519632+00:00 + 74611342 + 0f10b74e7e294f6be591f9a3200ce4bc + True + 131094720 + 29da1e72c2c4dd03f2ea22259dcaa29b +
S20190619Z0116b.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 07:31:25 + ZORRO + True + 2024-08-28 17:05:06.803657+00:00 + 2024-08-28 17:05:06.639634+00:00 + 64592526 + 573127c4c6ac58c220f592ebfd19962c + True + 131094720 + 1e4f379889ae787130e792187794ab1f +
S20190619Z0115r.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 07:30:22 + ZORRO + True + 2024-08-28 17:05:07.367280+00:00 + 2024-08-28 17:05:07.169646+00:00 + 75145087 + fbe4ee23213d3dbba8ac77cb8bddb9bb + True + 131094720 + e898a3c03de5f91cb530c89945562c2e +
S20190619Z0115b.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 07:30:22 + ZORRO + True + 2024-08-28 17:05:07.497955+00:00 + 2024-08-28 17:05:07.339649+00:00 + 64703123 + 49fdd43a72ab3b3ff019876d87e7e5c1 + True + 131094720 + d77f0308a3f67670da9e3e37b5008924 +
S20190619Z0114b.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 07:29:18 + ZORRO + True + 2024-08-28 17:05:08.475073+00:00 + 2024-08-28 17:05:08.209668+00:00 + 63971622 + 58ed2b150401a08cf29e55ee4a17e2ce + True + 131094720 + 5075982258aaaf48cdd6b92c8c0fb9b0 +
S20190619Z0114r.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 07:29:18 + ZORRO + True + 2024-08-28 17:05:08.157880+00:00 + 2024-08-28 17:05:07.949663+00:00 + 73574929 + 9840e3e320e1ef7c818843a84ec85ad8 + True + 131094720 + 375f065c14e4b03aff1cb633b91132a0 +
S20190619Z0113r.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 07:28:15 + ZORRO + True + 2024-08-28 17:05:09.287766+00:00 + 2024-08-28 17:05:09.029686+00:00 + 72305997 + 037dff5b77a79a4234a7816f890d5f94 + True + 131094720 + d4e57dc5b3436bbeeba4441d2306c389 +
S20190619Z0113b.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 07:28:15 + ZORRO + True + 2024-08-28 17:05:09.384454+00:00 + 2024-08-28 17:05:09.219690+00:00 + 63511233 + f91c1858f3c41492d0989a6bb9ee0851 + True + 131094720 + c11807ef00995e53e2f55d0ad87c9222 +
S20190619Z0112b.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 07:27:12 + ZORRO + True + 2024-08-28 17:05:10.231732+00:00 + 2024-08-28 17:05:10.059708+00:00 + 64235790 + 41512112c554a94c62c15fbf9e124b82 + True + 131094720 + 31f5591b2fedbff75a26f7b5a69e759e +
S20190619Z0112r.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 07:27:12 + ZORRO + True + 2024-08-28 17:05:10.231717+00:00 + 2024-08-28 17:05:09.999707+00:00 + 73667669 + 35c349f73d38ca271b9f345ba7f1d5da + True + 131094720 + a1a3b8f24679abbcaa7362b48d222926 +
S20190619Z0111r.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 07:26:10 + ZORRO + True + 2024-08-28 17:05:11.134879+00:00 + 2024-08-28 17:05:10.839725+00:00 + 75372721 + 7c9a6af9fdbf733f8303f80fe9858f0e + True + 131094720 + 40ec6ef7ab2f8ebcbc4821dea1d1c802 +
S20190619Z0111b.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 07:26:10 + ZORRO + True + 2024-08-28 17:05:11.958312+00:00 + 2024-08-28 17:05:11.799746+00:00 + 65328557 + ffb0ba07a37dbca953335ee77d5d214b + True + 131094720 + a9344800d86d876dd03c8a9e03587e97 +
S20190619Z0110r.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 07:25:07 + ZORRO + True + 2024-08-28 17:05:13.118301+00:00 + 2024-08-28 17:05:12.769767+00:00 + 78407944 + 5487b23e555da09d37aa79a7e6ab5a0b + True + 131094720 + c80020d540436c1494d797898d7fda67 +
S20190619Z0110b.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 07:25:07 + ZORRO + True + 2024-08-28 17:05:12.998500+00:00 + 2024-08-28 17:05:12.839769+00:00 + 66600784 + 9c1a28ce232b77da32a48117f7396755 + True + 131094720 + 9cdc563866b16ff85715dc8aa7d787e7 +
S20190619Z0109b.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 07:14:17 + ZORRO + True + 2024-08-28 17:05:15.088497+00:00 + 2024-08-28 17:05:14.819812+00:00 + 73342652 + dfb57c92bc85f4d9005b5748b61a5f3d + True + 131094720 + 41cd5e43c252547a4dd76a6059a9bf9d +
S20190619Z0109r.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 07:14:17 + ZORRO + True + 2024-08-28 17:05:14.639311+00:00 + 2024-08-28 17:05:14.459804+00:00 + 77673982 + 5f819d511c3b1007e63f368afdb8b5b2 + True + 131094720 + d1a92fe4752e5afe32bb4a449a73425a +
S20190619Z0108b.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 07:13:13 + ZORRO + True + 2024-08-28 17:05:16.930501+00:00 + 2024-08-28 17:05:16.739853+00:00 + 74173497 + 74fef63c72bed039851d7a96a77592e1 + True + 131094720 + 3094bb4b46d366b576ba622d8b8b5045 +
S20190619Z0108r.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 07:13:13 + ZORRO + True + 2024-08-28 17:05:17.215861+00:00 + 2024-08-28 17:05:17.009859+00:00 + 78972530 + 2f7f83fc4f562555f7b70fff466f7923 + True + 131094720 + 13047754b42c2b6dcf2eb85c2de68a76 +
S20190619Z0107r.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 07:12:10 + ZORRO + True + 2024-08-28 17:05:17.649132+00:00 + 2024-08-28 17:05:17.469869+00:00 + 76308089 + cfb8fb7893f320020a1a3c3388153025 + True + 131094720 + 46cd98b6b9093719bd4ea27fbb45db7f +
S20190619Z0107b.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 07:12:10 + ZORRO + True + 2024-08-28 17:05:17.504414+00:00 + 2024-08-28 17:05:17.289865+00:00 + 72593886 + 52cbdc3fb6a3a8814ef2f6d4c4a4d322 + True + 131094720 + 49c813e527128467b949c307cc73c777 +
S20190619Z0106r.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 07:11:07 + ZORRO + True + 2024-08-28 17:05:17.782108+00:00 + 2024-08-28 17:05:17.589871+00:00 + 77887094 + 0d726e783548c57a1890061666049c44 + True + 131094720 + 3151b6c3559147160820e8aa0047e24a +
S20190619Z0106b.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 07:11:07 + ZORRO + True + 2024-08-28 17:05:18.549291+00:00 + 2024-08-28 17:05:18.359888+00:00 + 73654518 + 1ecb16e0719a6cdf63085e255134380b + True + 131094720 + c58ee3fd6760820e1ac15bdb76dffa3d +
S20190619Z0105b.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 07:10:05 + ZORRO + True + 2024-08-28 17:05:19.993201+00:00 + 2024-08-28 17:05:19.809920+00:00 + 75416638 + af81000f6cde65d01313bdae54b2610e + True + 131094720 + f15d5a014c739872a26d24f09c4d106f +
S20190619Z0105r.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 07:10:05 + ZORRO + True + 2024-08-28 17:05:19.529655+00:00 + 2024-08-28 17:05:19.319909+00:00 + 80031174 + 92571f88e79811dfa7e413173e0d8181 + True + 131094720 + d39f5e1a2fae84e467f10bee25769fb4 +
S20190619Z0104b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 07:03:57 + ZORRO + True + 2024-08-28 17:05:20.406186+00:00 + 2024-08-28 17:05:20.129926+00:00 + 80860754 + 2a8b36f09e98452b454f8f0a0ddc6d67 + True + 131094720 + 55a430cf9e98482a5fd0dea7e4cdf4f2 +
S20190619Z0104r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 07:03:57 + ZORRO + True + 2024-08-28 17:05:19.822359+00:00 + 2024-08-28 17:05:19.629916+00:00 + 75944659 + 5f9325ee2b58d80b5d78733fca905256 + True + 131094720 + fd46a9c64ee8a15305e576e20987cd34 +
S20190619Z0103b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 06:58:09 + ZORRO + True + 2024-08-28 17:05:22.038823+00:00 + 2024-08-28 17:05:21.749962+00:00 + 90148301 + ac1f917a840aa49a408e328753a99b2d + True + 131094720 + 84455b4e85728beb1d52896759404f4c +
S20190619Z0103r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 06:58:09 + ZORRO + True + 2024-08-28 17:05:21.135943+00:00 + 2024-08-28 17:05:20.869942+00:00 + 83050226 + f43cdebcbc7c8167904d2b622263cdbe + True + 131094720 + 83e7dfa3c1e9e4705215d124b93f07b3 +
S20190619Z0102b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 06:57:06 + ZORRO + True + 2024-08-28 17:05:23.323050+00:00 + 2024-08-28 17:05:23.069990+00:00 + 91659999 + f0c042a33db4dace875593ca52be8aed + True + 131094720 + 8cc476ecfbf8d50e336818baf40cd66d +
S20190619Z0102r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 06:57:06 + ZORRO + True + 2024-08-28 17:05:23.183251+00:00 + 2024-08-28 17:05:22.889986+00:00 + 84696022 + 083f60f403701b30c12143a22eaee268 + True + 131094720 + ef8d4b2d286b6c59de88732d1c678b58 +
S20190619Z0101b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 06:56:03 + ZORRO + True + 2024-08-28 17:05:24.814092+00:00 + 2024-08-28 17:05:24.550022+00:00 + 90661737 + 111fb5af642a19ca3037e11d11d7d2ad + True + 131094720 + e0282cf5bb405b40a75c3e15302510d8 +
S20190619Z0101r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 06:56:03 + ZORRO + True + 2024-08-28 17:05:24.129993+00:00 + 2024-08-28 17:05:23.900008+00:00 + 83956083 + 76559ca6b0debc35a0a5a3a9311089d9 + True + 131094720 + a1fc673906ab67bf52fa2a960d1a6ec6 +
S20190619Z0100b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 06:54:59 + ZORRO + True + 2024-08-28 17:05:26.956163+00:00 + 2024-08-28 17:05:26.700069+00:00 + 91773647 + 849ca2b7ceb515eb08da8d9d6ab3479f + True + 131094720 + 528178f61f4a861f89f838655c03e007 +
S20190619Z0100r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 06:54:59 + ZORRO + True + 2024-08-28 17:05:25.785649+00:00 + 2024-08-28 17:05:25.440041+00:00 + 84923480 + f84e20f6a744ae8dada9e7235f10940d + True + 131094720 + dfbbdb2aa0a9b662bee5a644bffc9c36 +
S20190619Z0099b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 06:53:56 + ZORRO + True + 2024-08-28 17:05:27.515837+00:00 + 2024-08-28 17:05:27.300082+00:00 + 91558518 + d59035f86864a0c894f32123108dcd22 + True + 131094720 + 513586be3e55a66b81202224fe3b95b4 +
S20190619Z0099r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 06:53:56 + ZORRO + True + 2024-08-28 17:05:27.256671+00:00 + 2024-08-28 17:05:27.040076+00:00 + 84575333 + 6de9ebdb8631d896747e4bcaf5accaa1 + True + 131094720 + 1f88f03bd63bd9373695b36ac8e3a2a2 +
S20190619Z0098b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 06:49:00 + ZORRO + True + 2024-08-28 17:05:28.289004+00:00 + 2024-08-28 17:05:28.080099+00:00 + 67028743 + 06d21a1455da03dbf4bceea40ad0c889 + True + 131094720 + ecb0d5388e360c7ae5f4e320d88bc53b +
S20190619Z0098r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 06:49:00 + ZORRO + True + 2024-08-28 17:05:27.693253+00:00 + 2024-08-28 17:05:27.530087+00:00 + 70352479 + 0c496e55d7a483a8a4b252a772945b0b + True + 131094720 + 51ec4e81e84a7c10618fbf4f897b92e0 +
S20190619Z0097r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 06:45:40 + ZORRO + True + 2024-08-28 17:05:29.128019+00:00 + 2024-08-28 17:05:28.930117+00:00 + 83273405 + bb9655acc2192dc2deab43bd75c1d074 + True + 131094720 + b4faf6ce5a76a70ac34d203d758906ff +
S20190619Z0097b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 06:45:40 + ZORRO + True + 2024-08-28 17:05:30.116554+00:00 + 2024-08-28 17:05:29.890138+00:00 + 89053051 + f34eed8e1d16b4458041d79b8b578a95 + True + 131094720 + 2b2d99afab81739d4f286f3c69bdf293 +
S20190619Z0096r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 06:44:37 + ZORRO + True + 2024-08-28 17:05:30.162244+00:00 + 2024-08-28 17:05:29.920138+00:00 + 82699888 + 3d67b4c6522b99653c9fc060deab3d8e + True + 131094720 + 7dddd5da98ff40d5bbb4f10592ec32a8 +
S20190619Z0096b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 06:44:37 + ZORRO + True + 2024-08-28 17:05:30.754370+00:00 + 2024-08-28 17:05:30.450150+00:00 + 88500668 + 8331a406bffd091fd3e04a2b2662a068 + True + 131094720 + 9ec214a1264c2b8a4779e5baba61f57f +
S20190619Z0095r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 06:43:34 + ZORRO + True + 2024-08-28 17:05:32.093918+00:00 + 2024-08-28 17:05:31.870181+00:00 + 80861538 + da466e995b866695f79b26641055c2a1 + True + 131094720 + 302f638fcefdbd19f7a95bd7306448fe +
S20190619Z0095b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 06:43:34 + ZORRO + True + 2024-08-28 17:05:32.485516+00:00 + 2024-08-28 17:05:32.260189+00:00 + 86704653 + 48fcc818e3f9af1538d45ad42eb03fd8 + True + 131094720 + ae2aa1f6fd223cb2cba93fb189b93e10 +
S20190619Z0094b.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 06:35:25 + ZORRO + True + 2024-08-28 17:05:33.992640+00:00 + 2024-08-28 17:05:33.770222+00:00 + 71611841 + 6911ee8641ad06a736ad5b1748b87d9b + True + 131094720 + e2c24242781328ce7e7bf6636c565e37 +
S20190619Z0094r.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 06:35:25 + ZORRO + True + 2024-08-28 17:05:33.316766+00:00 + 2024-08-28 17:05:33.130208+00:00 + 75065915 + ee8239b4af8f832b39246a754a1f4ec4 + True + 131094720 + eaa5eaddf0458453b39815ebc3e7b977 +
S20190619Z0093b.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 06:31:56 + ZORRO + True + 2024-08-28 17:05:35.032966+00:00 + 2024-08-28 17:05:34.850245+00:00 + 81326847 + a13f571e45ac626949f5c8d3ff42d21b + True + 131094720 + 06fb2bd62001058a24fb424d12ff3450 +
S20190619Z0093r.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 06:31:56 + ZORRO + True + 2024-08-28 17:05:34.508859+00:00 + 2024-08-28 17:05:34.160230+00:00 + 78204605 + 2ba09a233196d2297e69a7127364a2fc + True + 131094720 + 9bd23f0816b5c64a73c3bb35a5108bd6 +
S20190619Z0092r.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 06:30:53 + ZORRO + True + 2024-08-28 17:05:36.185198+00:00 + 2024-08-28 17:05:36.000270+00:00 + 78879223 + f3cf7f300194db38707014edd10d5603 + True + 131094720 + e8a7d817b5667ffd8a5b282f2e2b5cdb +
S20190619Z0092b.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 06:30:53 + ZORRO + True + 2024-08-28 17:05:36.667165+00:00 + 2024-08-28 17:05:36.460280+00:00 + 82126147 + f2dba03989e1940c3e6019750e35596d + True + 131094720 + 51981ce09795ce91cf1a1eb554ad057d +
S20190619Z0091b.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 06:29:50 + ZORRO + True + 2024-08-28 17:05:37.570556+00:00 + 2024-08-28 17:05:37.330299+00:00 + 82186970 + ca073f9519715f6bf22c2c21882c5a99 + True + 131094720 + 8a9ba38ff1066d860cca80cb0a917eba +
S20190619Z0091r.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 06:29:50 + ZORRO + True + 2024-08-28 17:05:36.981798+00:00 + 2024-08-28 17:05:36.780287+00:00 + 78937191 + a69c606efb024b8de557fe916a25fad4 + True + 131094720 + f41f89b72d7dfdc451393722ef6637f8 +
S20190619Z0090b.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 06:28:46 + ZORRO + True + 2024-08-28 17:05:38.676733+00:00 + 2024-08-28 17:05:38.430323+00:00 + 80775765 + e29fda96ce0cebb079f471ebed0ffeeb + True + 131094720 + 2e1efa8e1beeab08fd08869255c07937 +
S20190619Z0090r.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 06:28:46 + ZORRO + True + 2024-08-28 17:05:37.960899+00:00 + 2024-08-28 17:05:37.770308+00:00 + 77530797 + f4ee35d09280b8ddbad35b6908dbcf1e + True + 131094720 + 84957042ce79f0071112b448d01c918b +
S20190619Z0089r.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 06:27:43 + ZORRO + True + 2024-08-28 17:05:39.175706+00:00 + 2024-08-28 17:05:38.950334+00:00 + 77797515 + 945cd44e87c320f08c142c86c0de471d + True + 131094720 + 470beecdfb1fdcd37a5b05b8078c52ed +
S20190619Z0089b.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 06:27:43 + ZORRO + True + 2024-08-28 17:05:39.838855+00:00 + 2024-08-28 17:05:39.640349+00:00 + 81066342 + 0bcf3a4c9869e464dc3c2c5ec7b6f7c6 + True + 131094720 + a7fdad1b0c9227c47ed087a4ea27534d +
S20190619Z0088r.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 06:22:21 + ZORRO + True + 2024-08-28 17:05:40.885094+00:00 + 2024-08-28 17:05:40.660371+00:00 + 62947898 + 50f18872973152efc1f51ac7d67c125a + True + 131094720 + fbb37100c4fab198c93ac085e4352482 +
S20190619Z0088b.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 06:22:21 + ZORRO + True + 2024-08-28 17:05:41.213810+00:00 + 2024-08-28 17:05:40.910376+00:00 + 70217344 + 97a867a59eaf9ad6fc68c578325e2c13 + True + 131094720 + 25b090ad2f3aafd708ad2b8b1e28fde2 +
S20190619Z0087b.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 06:17:37 + ZORRO + True + 2024-08-28 17:05:42.659076+00:00 + 2024-08-28 17:05:42.490411+00:00 + 68601276 + e1a9d0c8b67f7ab8d097a5fc336926ff + True + 131094720 + 3b9a1169f9242428815fcae766359ad1 +
S20190619Z0087r.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 06:17:37 + ZORRO + True + 2024-08-28 17:05:41.945024+00:00 + 2024-08-28 17:05:41.760395+00:00 + 80839321 + e4524f94457d7e17eb1aa5da4e6519de + True + 131094720 + 4a1b1cd860158367fac51cda526ef5d3 +
S20190619Z0086b.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 06:16:34 + ZORRO + True + 2024-08-28 17:05:43.411425+00:00 + 2024-08-28 17:05:43.110424+00:00 + 68526744 + 3738f01e461bda7967b0424903599469 + True + 131094720 + a0c6ddd92fdd31fa157eec284bb3d182 +
S20190619Z0086r.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 06:16:34 + ZORRO + True + 2024-08-28 17:05:42.696061+00:00 + 2024-08-28 17:05:42.500411+00:00 + 80990535 + e611f0fcc3425a25bdca3c8fe3e92916 + True + 131094720 + ab3ba1f91b33967683d422c4b76fc4bc +
S20190619Z0085r.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 06:15:33 + ZORRO + True + 2024-08-28 17:05:44.592389+00:00 + 2024-08-28 17:05:44.310450+00:00 + 81298607 + 199999143cfc33d9362b2d14330f3e4b + True + 131094720 + 1e0bac28c12f44e9995062dc73710b59 +
S20190619Z0085b.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 06:15:33 + ZORRO + True + 2024-08-28 17:05:44.615398+00:00 + 2024-08-28 17:05:44.440453+00:00 + 68879791 + bcdf7230cda80051d16ab0823b40bbcc + True + 131094720 + 7fe4a87a476fe9d98b0722cd3f6d5a03 +
S20190619Z0084b.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 06:14:29 + ZORRO + True + 2024-08-28 17:05:46.407094+00:00 + 2024-08-28 17:05:46.250492+00:00 + 69826089 + 6d1af33dcdb93d15073d5deef835cad3 + True + 131094720 + 37e955b0faeca4c27bca51d366f67f8c +
S20190619Z0084r.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 06:14:29 + ZORRO + True + 2024-08-28 17:05:45.913933+00:00 + 2024-08-28 17:05:45.560477+00:00 + 83004032 + 20ac189dd8f6278abf988fef8cbdf067 + True + 131094720 + 7c3bca3651bc30a2bb7ed8ea6591938a +
S20190619Z0083r.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 06:13:26 + ZORRO + True + 2024-08-28 17:05:47.072523+00:00 + 2024-08-28 17:05:46.860505+00:00 + 84416776 + bdee27f5542a03cf5978dd95621d2c58 + True + 131094720 + 223e8283e498d8047875ebd64f9ed2c1 +
S20190619Z0083b.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 06:13:26 + ZORRO + True + 2024-08-28 17:05:47.484260+00:00 + 2024-08-28 17:05:47.210513+00:00 + 70475702 + 93bf507a23ab947b23a18f9273f6b310 + True + 131094720 + ab7ed21f173ebc13e982e93d1ba6e320 +
S20190619Z0082r.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 06:12:23 + ZORRO + True + 2024-08-28 17:05:48.263615+00:00 + 2024-08-28 17:05:48.050531+00:00 + 83377045 + 083897c246e9a4c9b65935d378a1071a + True + 131094720 + 68e7db61bf52889b26d6ffd77dbc687f +
S20190619Z0082b.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 06:12:23 + ZORRO + True + 2024-08-28 17:05:48.818236+00:00 + 2024-08-28 17:05:48.650544+00:00 + 69965791 + 07722e3204baf1d66c414cb66a5710ca + True + 131094720 + 197e893cb6f9ccd2b099e0c0ae4eb106 +
S20190619Z0081b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 06:06:38 + ZORRO + True + 2024-08-28 17:05:49.880173+00:00 + 2024-08-28 17:05:49.710567+00:00 + 68281096 + 7b9e862a217b39f300096415c246d3d4 + True + 131094720 + 97eab6125e1013c6f833b8c110580605 +
S20190619Z0081r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 06:06:38 + ZORRO + True + 2024-08-28 17:05:49.028632+00:00 + 2024-08-28 17:05:48.790547+00:00 + 65779005 + 4bc9cfcf94d2a7e425e726f760c089de + True + 131094720 + 1c095e47728ad457604ccdcf9d2c724a +
S20190619Z0080r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 06:02:15 + ZORRO + True + 2024-08-28 17:05:50.085628+00:00 + 2024-08-28 17:05:49.820569+00:00 + 70222947 + 1115cacafedf778029a0ac0c5099bab2 + True + 131094720 + 7ce763f900e07b38a35618b21142ec7f +
S20190619Z0080b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 06:02:15 + ZORRO + True + 2024-08-28 17:05:50.354651+00:00 + 2024-08-28 17:05:50.120576+00:00 + 71768060 + f706144b41a403a643bb70ba5e7899cf + True + 131094720 + e4fb42884a242401552d7eafd2ff9e37 +
S20190619Z0079b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 06:01:13 + ZORRO + True + 2024-08-28 17:05:51.938277+00:00 + 2024-08-28 17:05:51.690610+00:00 + 72317219 + 9569cfd9752eb2ba113ba3d3a362081c + True + 131094720 + b521fea71f9b946d10393d0609d9ba1a +
S20190619Z0079r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 06:01:13 + ZORRO + True + 2024-08-28 17:05:51.436378+00:00 + 2024-08-28 17:05:51.260600+00:00 + 70311322 + 60fe18bcec731cf3e1b09b662ab267bb + True + 131094720 + 3c1cf0d7140a60caf46fc762b112e6a3 +
S20190619Z0078r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 06:00:10 + ZORRO + True + 2024-08-28 17:05:53.475637+00:00 + 2024-08-28 17:05:53.180642+00:00 + 70488231 + 4b8ee2fe84cccd43059e036a5537aa9e + True + 131094720 + 5b30a6b3bb32157c6c3a487e2ddd99d8 +
S20190619Z0078b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 06:00:10 + ZORRO + True + 2024-08-28 17:05:53.325404+00:00 + 2024-08-28 17:05:53.160641+00:00 + 72681413 + 8baeb97183ff1227ebc8b264c1856522 + True + 131094720 + 45c44f80827f08cded00a7d6475914b3 +
S20190619Z0077r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 05:59:07 + ZORRO + True + 2024-08-28 17:05:53.914903+00:00 + 2024-08-28 17:05:53.740654+00:00 + 70457809 + 7614b327e9322503c28f1373546a9a09 + True + 131094720 + 34483d56d7b3307a10e698f99d46c9a8 +
S20190619Z0077b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 05:59:07 + ZORRO + True + 2024-08-28 17:05:54.825691+00:00 + 2024-08-28 17:05:54.500670+00:00 + 72753735 + 8638f6e21b819257d2ef06ff7ae97f21 + True + 131094720 + 409db5c7fe93b29ba1deabd0e750f4c0 +
S20190619Z0076b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 05:58:03 + ZORRO + True + 2024-08-28 17:05:56.848888+00:00 + 2024-08-28 17:05:56.670717+00:00 + 73553097 + 03c6dc622963a2950a3b2465b85555e9 + True + 131094720 + 2565c4e9132003d61abddd737abe7344 +
S20190619Z0076r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 05:58:03 + ZORRO + True + 2024-08-28 17:05:54.990550+00:00 + 2024-08-28 17:05:54.760676+00:00 + 70850069 + 3511b7394d9de5b16f77ecbfcff002cd + True + 131094720 + edb63f209d068d056a34a3d1870439dd +
S20190619Z0075r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 05:57:00 + ZORRO + True + 2024-08-28 17:05:56.683557+00:00 + 2024-08-28 17:05:56.520714+00:00 + 70849127 + 2a56d99e8d2c9588e468eb59edd9a281 + True + 131094720 + bb2e81dfa4dd10ee1cc818ae4812cf89 +
S20190619Z0075b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 05:57:00 + ZORRO + True + 2024-08-28 17:05:57.280916+00:00 + 2024-08-28 17:05:57.090727+00:00 + 73570460 + f06a1db5a4cb98646374ff1561618b1a + True + 131094720 + 680fbeb80f6ee8055176bdfe495af05a +
S20190619Z0074r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 05:55:57 + ZORRO + True + 2024-08-28 17:05:58.047869+00:00 + 2024-08-28 17:05:57.870743+00:00 + 70784429 + 17456e7c28770da2dd79c21afa0de3e2 + True + 131094720 + 57e1ad8cef98d38c4bd0c68e160ceda1 +
S20190619Z0074b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 05:55:57 + ZORRO + True + 2024-08-28 17:05:58.425337+00:00 + 2024-08-28 17:05:58.210751+00:00 + 73435825 + 2bd4328b058df6632fca7c8cbad7f0d6 + True + 131094720 + cbaf70bd73de12cf021cc69a5a794a6c +
S20190619Z0073r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 05:54:55 + ZORRO + True + 2024-08-28 17:05:58.892967+00:00 + 2024-08-28 17:05:58.630760+00:00 + 70605934 + 6c5d9faf61603b4b266a18ed44a4ede0 + True + 131094720 + f9a9ccfd23707cd380ecfce9345996b3 +
S20190619Z0073b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 05:54:55 + ZORRO + True + 2024-08-28 17:05:59.233545+00:00 + 2024-08-28 17:05:58.940767+00:00 + 72973394 + 0c05d94db49c54afe18398da3a7ff0f4 + True + 131094720 + 73e14c16db98033e8fd08182dea08f58 +
S20190619Z0072r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 05:53:52 + ZORRO + True + 2024-08-28 17:06:00.267694+00:00 + 2024-08-28 17:06:00.100792+00:00 + 70560995 + 8b2f859800661e5d6dbe66ec5e44e4e1 + True + 131094720 + 043cf8c023658e4000f1129720ffdcbf +
S20190619Z0072b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 05:53:52 + ZORRO + True + 2024-08-28 17:06:00.523064+00:00 + 2024-08-28 17:06:00.320796+00:00 + 72618523 + 0fe50d9385bc6f556431c3f4e612ea8c + True + 131094720 + 337140aaf8d497e21b7830a0e855cdb5 +
S20190619Z0071b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 05:47:37 + ZORRO + True + 2024-08-28 17:06:01.210084+00:00 + 2024-08-28 17:06:00.950810+00:00 + 66301218 + 4c6f5a95e1073511008fb33cf559fb71 + True + 131094720 + 23c518ce6d17b071b48fdb210c6653d6 +
S20190619Z0071r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 05:47:37 + ZORRO + True + 2024-08-28 17:06:01.027614+00:00 + 2024-08-28 17:06:00.870808+00:00 + 64172955 + 57d20936c209e95884c17f1944862a28 + True + 131094720 + b01f2db91a9008f6496c5c82793bb27d +
S20190619Z0070r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 05:43:39 + ZORRO + True + 2024-08-28 17:06:02.265667+00:00 + 2024-08-28 17:06:02.090835+00:00 + 69005733 + 894b80ff91fa1a476977ebde74bbad04 + True + 131094720 + bffb35b160e9f67fc9f4c994962fae13 +
S20190619Z0070b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 05:43:39 + ZORRO + True + 2024-08-28 17:06:02.969692+00:00 + 2024-08-28 17:06:02.780850+00:00 + 72175971 + 339975648ce1f01b6a994c0c9d17b60e + True + 131094720 + 2dc4dc48203703f1033782e4ecbab8e8 +
S20190619Z0069r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 05:42:31 + ZORRO + True + 2024-08-28 17:06:03.673312+00:00 + 2024-08-28 17:06:03.500865+00:00 + 68725837 + f8bcd9dcd27798a581ecee071bd5a58f + True + 131094720 + 8bcc92c033861cb7d23036aedcf49718 +
S20190619Z0069b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 05:42:31 + ZORRO + True + 2024-08-28 17:06:04.497587+00:00 + 2024-08-28 17:06:04.320883+00:00 + 71750992 + 8478c4d2e6424a836dcf5f32316dcfb3 + True + 131094720 + 1482ecd02f040793d92d51758375f086 +
S20190619Z0068r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 05:41:23 + ZORRO + True + 2024-08-28 17:06:04.826484+00:00 + 2024-08-28 17:06:04.650890+00:00 + 69248432 + 211423e403db6faa05de0a2703d89b95 + True + 131094720 + 0b9d0edec3c70fc5f06946757a86d38d +
S20190619Z0068b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 05:41:23 + ZORRO + True + 2024-08-28 17:06:05.802331+00:00 + 2024-08-28 17:06:05.580910+00:00 + 72820003 + 4949963f697f61e421e0eee598b119cb + True + 131094720 + 08fa8beb7193cf9711c691a142c46a6c +
S20190619Z0067b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 05:40:15 + ZORRO + True + 2024-08-28 17:06:07.533012+00:00 + 2024-08-28 17:06:07.320948+00:00 + 73368043 + 3ffcf4bf245c2c76ececb7278587ac47 + True + 131094720 + 42f59717cb05cdf6246e4f3c2e80e3a5 +
S20190619Z0067r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 05:40:15 + ZORRO + True + 2024-08-28 17:06:07.020686+00:00 + 2024-08-28 17:06:06.760936+00:00 + 69504804 + c4daf616fda7ae35b221483935091884 + True + 131094720 + 222b9c55a7c07dd2d4f90c4ca4d39b1a +
S20190619Z0066b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 05:39:07 + ZORRO + True + 2024-08-28 17:06:08.246769+00:00 + 2024-08-28 17:06:08.060964+00:00 + 73206435 + e8478b926741dec820df0630d4e233e8 + True + 131094720 + 63f63ecb0a741434e09ca938912339ab +
S20190619Z0066r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 05:39:07 + ZORRO + True + 2024-08-28 17:06:07.794089+00:00 + 2024-08-28 17:06:07.630955+00:00 + 69433254 + 2b383013e7bfc931e24477a24d13a7d9 + True + 131094720 + 3b53693be284f6e22d506b45b31f67d8 +
S20190619Z0065b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 05:37:59 + ZORRO + True + 2024-08-28 17:06:09.074623+00:00 + 2024-08-28 17:06:08.890981+00:00 + 72644212 + d16c50779134cd13aa2455a667e21446 + True + 131094720 + cf60b66032cf5cfee8db3c92e9260f57 +
S20190619Z0065r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 05:37:59 + ZORRO + True + 2024-08-28 17:06:09.084721+00:00 + 2024-08-28 17:06:08.910982+00:00 + 69078303 + c135bbb7a585b013fcae6315e78082f2 + True + 131094720 + b484a4eb51c28a763b1cce543f822c2d +
S20190619Z0064b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 05:36:53 + ZORRO + True + 2024-08-28 17:06:10.273542+00:00 + 2024-08-28 17:06:10.101006+00:00 + 72171703 + 4ee0de597f05934bc69d09d5d1cdc4da + True + 131094720 + 898f210d4e59bc9749651fc8b7a1b7ef +
S20190619Z0064r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 05:36:53 + ZORRO + True + 2024-08-28 17:06:09.640120+00:00 + 2024-08-28 17:06:09.470993+00:00 + 68834718 + ae1ac7d8ff122a97ce10cbfe59926311 + True + 131094720 + f521474d7903191482b30233c185e8a3 +
S20190619Z0063r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 05:35:45 + ZORRO + True + 2024-08-28 17:06:10.344493+00:00 + 2024-08-28 17:06:10.101006+00:00 + 69370294 + b3ba947b500a9a926a887b0afd896653 + True + 131094720 + 63e0d8ff060776bfe89e8f79c4c2aad3 +
S20190619Z0063b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 05:35:45 + ZORRO + True + 2024-08-28 17:06:10.835674+00:00 + 2024-08-28 17:06:10.521015+00:00 + 73177505 + 566fae43157c6d45b05c7b71cc59c67d + True + 131094720 + dbfa583a754ef3deb2b0c32ff722ba4e +
S20190619Z0062r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 05:34:37 + ZORRO + True + 2024-08-28 17:06:12.265645+00:00 + 2024-08-28 17:06:11.961044+00:00 + 70069667 + 775542e9dc801c52e7a1f8d66b6ca5a8 + True + 131094720 + 88992171e1f905c1690a0469cd2a594f +
S20190619Z0062b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 05:34:37 + ZORRO + True + 2024-08-28 17:06:12.256825+00:00 + 2024-08-28 17:06:11.991045+00:00 + 74466402 + cf36be30261a4c4be1079817d0f42d8e + True + 131094720 + 1eda730efdb43d797738544125986edb +
S20190619Z0061r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 05:30:16 + ZORRO + True + 2024-08-28 17:06:13.937567+00:00 + 2024-08-28 17:06:13.771081+00:00 + 69045383 + 3a0a28f0d0f9a81047105b0690946b0d + True + 131094720 + ad68feb0f50714d80f04a906ebd9089f +
S20190619Z0061b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 05:30:16 + ZORRO + True + 2024-08-28 17:06:14.182431+00:00 + 2024-08-28 17:06:14.001086+00:00 + 64932894 + 6952266274f5a455bbf83f2b2c2d25db + True + 131094720 + b257610449f7c048bdca768bd4702036 +
S20190619Z0060b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 05:24:40 + ZORRO + True + 2024-08-28 17:06:15.402651+00:00 + 2024-08-28 17:06:15.191110+00:00 + 72448068 + b7352c2c6cc5ee384ce6343c61da7199 + True + 131094720 + 5bbede15edbe62840e12b1317dd54ee5 +
S20190619Z0060r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 05:24:40 + ZORRO + True + 2024-08-28 17:06:14.967118+00:00 + 2024-08-28 17:06:14.801102+00:00 + 71911085 + e65fac856b11da5e28606548e4e22981 + True + 131094720 + 0451a43fd40c4e74dc4d01e0327435a1 +
S20190619Z0059r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 05:23:37 + ZORRO + True + 2024-08-28 17:06:16.613844+00:00 + 2024-08-28 17:06:16.421137+00:00 + 72212940 + 9774509107624b2b0c229081e3a6e0f3 + True + 131094720 + 57d46b6fd6c81c24979da3f233589eaa +
S20190619Z0059b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 05:23:37 + ZORRO + True + 2024-08-28 17:06:16.670644+00:00 + 2024-08-28 17:06:16.491138+00:00 + 72860906 + f8c198e530c0ded0ac4207952fe0caa6 + True + 131094720 + 083ae5ec0bcc7fccebaffc0edf2d48cc +
S20190619Z0058b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 05:22:34 + ZORRO + True + 2024-08-28 17:06:18.253688+00:00 + 2024-08-28 17:06:18.071173+00:00 + 71602051 + 9544de1ba2abd7132d2b4e31174584a8 + True + 131094720 + 513b6ded29202afb799f039f348dca32 +
S20190619Z0058r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 05:22:34 + ZORRO + True + 2024-08-28 17:06:17.614787+00:00 + 2024-08-28 17:06:17.441159+00:00 + 71345242 + f24f349d6668ebdbc821f3df16d42306 + True + 131094720 + 91b69eb6de988b1695274364e085e352 +
S20190619Z0057r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 05:21:30 + ZORRO + True + 2024-08-28 17:06:18.530303+00:00 + 2024-08-28 17:06:18.341179+00:00 + 73738676 + d14c7fef79e65867ab82a3da73a4319a + True + 131094720 + b5670942d5c8131fe744ceeda08d4607 +
S20190619Z0057b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 05:21:30 + ZORRO + True + 2024-08-28 17:06:19.449641+00:00 + 2024-08-28 17:06:19.261199+00:00 + 74834566 + 5bd073a59b2a42227a22f02c13057f20 + True + 131094720 + 940a37236fcc2984c3b3cac4af7d2e9b +
S20190619Z0056b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 05:20:27 + ZORRO + True + 2024-08-28 17:06:20.584282+00:00 + 2024-08-28 17:06:20.401223+00:00 + 77015320 + 93fa6ffd78a1abbda8ac28cf52024d39 + True + 131094720 + 5975685f6920bbcb88240035ab0dc49c +
S20190619Z0056r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 05:20:27 + ZORRO + True + 2024-08-28 17:06:19.646874+00:00 + 2024-08-28 17:06:19.441202+00:00 + 75364125 + 2b0a7016cd341302160fa0fbc0ac0f95 + True + 131094720 + f3e023421ea03e2090819e09cf3aa072 +
S20190619Z0055b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 05:19:24 + ZORRO + True + 2024-08-28 17:06:21.263420+00:00 + 2024-08-28 17:06:21.011236+00:00 + 78480165 + b3e9ee0a1ad8830fa1cdb23ab08153ef + True + 131094720 + 431cd34c6a3dc6844b5286d56deb71bb +
S20190619Z0055r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 05:19:24 + ZORRO + True + 2024-08-28 17:06:20.774410+00:00 + 2024-08-28 17:06:20.561227+00:00 + 76489526 + f1fc2b9d66d74c32247d2c28a428a851 + True + 131094720 + 083c3f4eeb04df5e8c3841af7c91d9e2 +
S20190619Z0054r.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 05:10:09 + ZORRO + True + 2024-08-28 17:06:22.362554+00:00 + 2024-08-28 17:06:22.161261+00:00 + 64824051 + b35d8ddf2ea5f3c2bf2b22b360e81e38 + True + 131094720 + ee442455896500cc7d5ad24a737b6d7a +
S20190619Z0054b.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 05:10:09 + ZORRO + True + 2024-08-28 17:06:22.958434+00:00 + 2024-08-28 17:06:22.791275+00:00 + 62907259 + 65cd06c8c4296424d61ac94758000f34 + True + 131094720 + 81c19b1a60858c985fc5a533b15f26fe +
S20190619Z0053r.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 05:06:26 + ZORRO + True + 2024-08-28 17:06:23.499296+00:00 + 2024-08-28 17:06:23.311286+00:00 + 75489075 + 7734de95c9ff13c5845ec469625c42cd + True + 131094720 + 8cac7f03e97684f740ab398acbb552ac +
S20190619Z0053b.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 05:06:26 + ZORRO + True + 2024-08-28 17:06:23.849058+00:00 + 2024-08-28 17:06:23.581292+00:00 + 69827757 + d93bbfcfec904e32b2b1d1ebc7088734 + True + 131094720 + e6bc6ebe497c5996f46a40abec24dd75 +
S20190619Z0052r.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 05:05:23 + ZORRO + True + 2024-08-28 17:06:24.833751+00:00 + 2024-08-28 17:06:24.631315+00:00 + 75760611 + 579906b8cfafa27a49780e2300934038 + True + 131094720 + 014b439f02ac538e9c12aaae235cd5c0 +
S20190619Z0052b.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 05:05:23 + ZORRO + True + 2024-08-28 17:06:25.269498+00:00 + 2024-08-28 17:06:25.091325+00:00 + 70057316 + c39756b7e5879529e5a6a488b81b7e4a + True + 131094720 + f0be9e619513dcc31d16c73ec7feef62 +
S20190619Z0051b.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 05:04:20 + ZORRO + True + 2024-08-28 17:06:26.455282+00:00 + 2024-08-28 17:06:26.281351+00:00 + 69997784 + b679ead24946185b40f8241f930877ef + True + 131094720 + f51b146ea88e50c5a868289bc5f16679 +
S20190619Z0051r.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 05:04:20 + ZORRO + True + 2024-08-28 17:06:26.208703+00:00 + 2024-08-28 17:06:26.021345+00:00 + 75627696 + 17b5070f3397c76ea8a744ce2d4a467f + True + 131094720 + dfbe652c91bfa41b750de6244be8827f +
S20190619Z0050r.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 05:03:16 + ZORRO + True + 2024-08-28 17:06:27.420943+00:00 + 2024-08-28 17:06:27.221371+00:00 + 75751432 + 3127301e0be139cd77ec0b944d5a2f9b + True + 131094720 + a8ea83b91b83cbbdfa001d6a3916368e +
S20190619Z0050b.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 05:03:16 + ZORRO + True + 2024-08-28 17:06:27.690206+00:00 + 2024-08-28 17:06:27.511377+00:00 + 70107986 + b65aa1961d34d5a68bad6d788db7ef5c + True + 131094720 + f964091e67037527f163af2ad9b1c756 +
S20190619Z0049b.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 05:02:13 + ZORRO + True + 2024-08-28 17:06:28.885691+00:00 + 2024-08-28 17:06:28.681402+00:00 + 70239802 + da9df8289f10a1621d2eba259608da09 + True + 131094720 + 413c2d152744933bc123d8dc9fd8c3bc +
S20190619Z0049r.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 05:02:13 + ZORRO + True + 2024-08-28 17:06:28.538485+00:00 + 2024-08-28 17:06:28.311394+00:00 + 75895106 + 17a6a95f733424ff0b597648440864f3 + True + 131094720 + 3f2eebff3225c93179c810c3dd6ac848 +
S20190619Z0048r.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 05:01:10 + ZORRO + True + 2024-08-28 17:06:29.861999+00:00 + 2024-08-28 17:06:29.671424+00:00 + 75289580 + a29171098706fff8822299ef9548728c + True + 131094720 + 1aee1d0d5e9641b88acdee9a7244dd99 +
S20190619Z0048b.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 05:01:10 + ZORRO + True + 2024-08-28 17:06:30.284435+00:00 + 2024-08-28 17:06:30.111434+00:00 + 69803787 + 196f1e74fb09eb580057b9a12504c439 + True + 131094720 + 053caccfa2dc100e30865b299c262a77 +
S20190619Z0047b.fits + +[A] +GS-2019A-Q-110-0-0 + 2019-06-20 04:55:01 + ZORRO + True + 2024-08-28 17:06:30.842856+00:00 + 2024-08-28 17:06:30.641445+00:00 + 63463491 + 3f4674780b0f96b54d80b4cb20d11bd4 + True + 131094720 + 9f3784c392bd0ca69229e5e0f872b43f +
S20190619Z0047r.fits + +[A] +GS-2019A-Q-110-0-0 + 2019-06-20 04:55:01 + ZORRO + True + 2024-08-28 17:06:30.421245+00:00 + 2024-08-28 17:06:30.261437+00:00 + 64557848 + 5031ad8d6ad9e53b0cedcd0506e679ee + True + 131094720 + 64b1d0bbca6a0d294cfe789f11de2e2a +
S20190619Z0046b.fits + +[A] +GS-2019A-Q-110-0-0 + 2019-06-20 04:51:39 + ZORRO + True + 2024-08-28 17:06:31.845670+00:00 + 2024-08-28 17:06:31.671467+00:00 + 69244370 + a49a9cdfd50bae47819d8f6ec5f348af + True + 131094720 + 95f5fea9bc6e7610c181a799fc6c4fa8 +
S20190619Z0046r.fits + +[A] +GS-2019A-Q-110-0-0 + 2019-06-20 04:51:39 + ZORRO + True + 2024-08-28 17:06:31.316565+00:00 + 2024-08-28 17:06:31.051454+00:00 + 69772150 + 163d51937178f87ea635d096ab30f2e8 + True + 131094720 + d196f46e2a5cf192b054fb8d465eee17 +
S20190619Z0045b.fits + +[A] +GS-2019A-Q-110-0-0 + 2019-06-20 04:50:36 + ZORRO + True + 2024-08-28 17:06:33.493208+00:00 + 2024-08-28 17:06:33.271502+00:00 + 69427189 + 8ac56cd1eaa1e26014a4fc6fc40628e7 + True + 131094720 + a5a177d6a8f0fdf3ed2837bac1226fb9 +
S20190619Z0045r.fits + +[A] +GS-2019A-Q-110-0-0 + 2019-06-20 04:50:36 + ZORRO + True + 2024-08-28 17:06:33.087927+00:00 + 2024-08-28 17:06:32.921494+00:00 + 70001414 + b3a5aab24143d3270a76f9c56056f693 + True + 131094720 + dca70444434c6eb96ac514d2cd1018be +
S20190619Z0044r.fits + +[A] +GS-2019A-Q-110-0-0 + 2019-06-20 04:49:34 + ZORRO + True + 2024-08-28 17:06:33.911008+00:00 + 2024-08-28 17:06:33.701511+00:00 + 70059765 + dc36e13392b957d7464bfad0cfa0617b + True + 131094720 + ddca97eccae813136c1a5f20201a8183 +
S20190619Z0044b.fits + +[A] +GS-2019A-Q-110-0-0 + 2019-06-20 04:49:34 + ZORRO + True + 2024-08-28 17:06:34.368610+00:00 + 2024-08-28 17:06:34.061519+00:00 + 69397100 + 0f29592233c02009379e36d89c739670 + True + 131094720 + b04b64cf7e8ea922e732c8acd7c59bc6 +
S20190619Z0043r.fits + +[A] +GS-2019A-Q-110-0-0 + 2019-06-20 04:48:31 + ZORRO + True + 2024-08-28 17:06:36.373479+00:00 + 2024-08-28 17:06:36.201565+00:00 + 70224643 + 1e979e988c232f087ed6b2a0f0a738b5 + True + 131094720 + 66e53cda1a19e16af85fdd284c2eb108 +
S20190619Z0043b.fits + +[A] +GS-2019A-Q-110-0-0 + 2019-06-20 04:48:31 + ZORRO + True + 2024-08-28 17:06:36.647017+00:00 + 2024-08-28 17:06:36.441571+00:00 + 69437857 + 876813ac2faa6a0e17bdc2cec54614ff + True + 131094720 + 3a61e35bab9c2c9e11434633783d5c3f +
S20190619Z0042r.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 04:43:30 + ZORRO + True + 2024-08-28 17:06:36.981318+00:00 + 2024-08-28 17:06:36.781578+00:00 + 61273881 + 7d5cdc75fe1561f0adb6440e274af273 + True + 131094720 + 7cd351adc8791e657c8d7120cba95f23 +
S20190619Z0042b.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 04:43:30 + ZORRO + True + 2024-08-28 17:06:37.465757+00:00 + 2024-08-28 17:06:37.321590+00:00 + 58683618 + 879f6cc5c9797934af83ce3eacbdb061 + True + 131094720 + bec7f2102368961ed1315b611d15a4a8 +
S20190619Z0041r.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 04:39:12 + ZORRO + True + 2024-08-28 17:06:38.424636+00:00 + 2024-08-28 17:06:38.221609+00:00 + 65726876 + 9c5feb926d9d2777198b9aa62256ed1b + True + 131094720 + a08b370ada2b466e9fd72b424cfa6ea8 +
S20190619Z0041b.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 04:39:12 + ZORRO + True + 2024-08-28 17:06:38.693691+00:00 + 2024-08-28 17:06:38.481615+00:00 + 76370439 + 3927c73d71a8a6fd836da95507e01fe9 + True + 131094720 + 6f8a33b73388e9c381e2e4db0db506d4 +
S20190619Z0040b.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 04:38:09 + ZORRO + True + 2024-08-28 17:06:39.388174+00:00 + 2024-08-28 17:06:39.161629+00:00 + 76351200 + a5ea45719b0086ce447d95d87fa50248 + True + 131094720 + f503a2e69272f7e4e7626bbc56a7683e +
S20190619Z0040r.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 04:38:09 + ZORRO + True + 2024-08-28 17:06:39.125789+00:00 + 2024-08-28 17:06:38.901624+00:00 + 65700844 + 2df6ad0a4a281334a1f2c81549eaa61a + True + 131094720 + a4ab4ce926ff2af9dff26fae3ee7a320 +
S20190619Z0039b.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 04:37:06 + ZORRO + True + 2024-08-28 17:06:40.262802+00:00 + 2024-08-28 17:06:40.061649+00:00 + 76784986 + fc01329c9701a44b11b2c271ac7bd10a + True + 131094720 + 7c79f79d3699c7e683159304d9cf5678 +
S20190619Z0039r.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 04:37:06 + ZORRO + True + 2024-08-28 17:06:40.519623+00:00 + 2024-08-28 17:06:40.271653+00:00 + 65906806 + b647820650a33ed6bfc9eaeb9c190b53 + True + 131094720 + 001d93945104e7a948a5b663dcfedc86 +
S20190619Z0038r.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 04:36:02 + ZORRO + True + 2024-08-28 17:06:40.593758+00:00 + 2024-08-28 17:06:40.381656+00:00 + 65998042 + 31294c35d2da7d7b4683637fee7a2069 + True + 131094720 + 86b8e68adb3dbfdcd635c99416240f9e +
S20190619Z0038b.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 04:36:02 + ZORRO + True + 2024-08-28 17:06:41.515544+00:00 + 2024-08-28 17:06:41.301676+00:00 + 76876057 + 233b71d07824341b73aa4ba04f229fae + True + 131094720 + 80af4fbb6c65cdefbc70559b4c8bd58d +
S20190619Z0037b.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 04:35:01 + ZORRO + True + 2024-08-28 17:06:42.075228+00:00 + 2024-08-28 17:06:41.861688+00:00 + 75927172 + d2c15cad0facd26708312db881143d03 + True + 131094720 + c0d1f6125506f0de5a5c45c2b04d2754 +
S20190619Z0037r.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 04:35:01 + ZORRO + True + 2024-08-28 17:06:41.675943+00:00 + 2024-08-28 17:06:41.461679+00:00 + 65462042 + a9a88463a845fa97a91aa3ed0a28fb25 + True + 131094720 + 565cee6fb9762bbf909f2ef08167eea8 +
S20190619Z0036b.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 04:29:18 + ZORRO + True + 2024-08-28 17:06:43.253055+00:00 + 2024-08-28 17:06:43.061713+00:00 + 67268335 + 17a5b66c6e242ef5f0a8a8f8fa63fd25 + True + 131094720 + 0b5b596e5f8bec8bd2ed6a0f6573ef7a +
S20190619Z0036r.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 04:29:18 + ZORRO + True + 2024-08-28 17:06:42.892367+00:00 + 2024-08-28 17:06:42.691705+00:00 + 68778528 + 254b39572cae4bbadf4b7861e103ad5b + True + 131094720 + e813cb48d58592acac3552d1587b98b9 +
S20190619Z0035b.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 04:24:29 + ZORRO + True + 2024-08-28 17:06:44.918925+00:00 + 2024-08-28 17:06:44.741749+00:00 + 67639189 + 24463dd6c6d29839fefdc6cc0150fa2c + True + 131094720 + 87745427704eacf5d546c2904c216410 +
S20190619Z0035r.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 04:24:29 + ZORRO + True + 2024-08-28 17:06:45.050483+00:00 + 2024-08-28 17:06:44.881752+00:00 + 73301279 + b551c423754fa3a968d244f25d8abe3b + True + 131094720 + 0551be889290690ed7791dd5fe5e3d6a +
S20190619Z0034b.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 04:23:26 + ZORRO + True + 2024-08-28 17:06:46.158487+00:00 + 2024-08-28 17:06:45.941774+00:00 + 68072244 + 7584a25364a028b296363e0f064e9de5 + True + 131094720 + 6808f8eb69e1781a296a7ba5ceba71ff +
S20190619Z0034r.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 04:23:26 + ZORRO + True + 2024-08-28 17:06:46.065704+00:00 + 2024-08-28 17:06:45.751770+00:00 + 73936310 + b6cc29ae8b0620ded07f3149e0a1fa3d + True + 131094720 + 9c5f8d06fb24dd15aa1a56e82d7775b9 +
S20190619Z0033b.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 04:22:23 + ZORRO + True + 2024-08-28 17:06:47.515646+00:00 + 2024-08-28 17:06:47.301803+00:00 + 68462277 + 8921805ad1fc5bc66682e0fd3eabc606 + True + 131094720 + 256e3952111d5588c8f36e32c44cf043 +
S20190619Z0033r.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 04:22:23 + ZORRO + True + 2024-08-28 17:06:47.587845+00:00 + 2024-08-28 17:06:47.381805+00:00 + 74525602 + 8e3ee6043cae0aaf5c417bd4f0f4cb03 + True + 131094720 + a27fbb6d259ce695a73f9ca3b6bb2d9c +
S20190619Z0032b.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 04:21:19 + ZORRO + True + 2024-08-28 17:06:49.246592+00:00 + 2024-08-28 17:06:49.011839+00:00 + 68835239 + 77715ea2843f6780e2901214cda29187 + True + 131094720 + 44f53a849c9e2ffb580584f687dba7a9 +
S20190619Z0032r.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 04:21:19 + ZORRO + True + 2024-08-28 17:06:48.958153+00:00 + 2024-08-28 17:06:48.781834+00:00 + 75048164 + ec3d1cf7d9d594bbf693eadd2f36cbbc + True + 131094720 + 56fdb469cead3cee219f851e070016f7 +
S20190619Z0031r.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 04:20:16 + ZORRO + True + 2024-08-28 17:06:49.715188+00:00 + 2024-08-28 17:06:49.541851+00:00 + 75096065 + 6179a4c91c5b80020fb3eb7428949f5b + True + 131094720 + 18e6f54bf1a06b2afe4c37cb47e19ce1 +
S20190619Z0031b.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 04:20:16 + ZORRO + True + 2024-08-28 17:06:49.743047+00:00 + 2024-08-28 17:06:49.571851+00:00 + 68853525 + d2c93534512259d971a7d98cfe73ae2f + True + 131094720 + 2304ff64938f297674215da1d0f30fd5 +
S20190619Z0030b.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 04:19:13 + ZORRO + True + 2024-08-28 17:06:51.337471+00:00 + 2024-08-28 17:06:51.161885+00:00 + 68938654 + 97a3d83368c414bcf4176e54f9d4ab79 + True + 131094720 + cb6f9311f33085d8f40c250f50be9bd5 +
S20190619Z0030r.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 04:19:13 + ZORRO + True + 2024-08-28 17:06:50.748684+00:00 + 2024-08-28 17:06:50.571872+00:00 + 75201383 + 01ae6ab90c6f93ba3be663c32b21c3ef + True + 131094720 + 23ead1a6416d643f7e17e1a6430e4aeb +
S20190619Z0029r.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 04:18:11 + ZORRO + True + 2024-08-28 17:06:51.296932+00:00 + 2024-08-28 17:06:51.101884+00:00 + 75123274 + ee68bd9d2c21c4a762b27d1d437dd475 + True + 131094720 + 1932ef6c5bb8040aba815d17aef3ac80 +
S20190619Z0029b.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 04:18:11 + ZORRO + True + 2024-08-28 17:06:51.611062+00:00 + 2024-08-28 17:06:51.351889+00:00 + 68889410 + ab43310e077c93bdcd5de79c8e9810d4 + True + 131094720 + e4a39f4fc36451acb07712958bc33f2a +
S20190619Z0028b.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 04:17:08 + ZORRO + True + 2024-08-28 17:06:52.585504+00:00 + 2024-08-28 17:06:52.421912+00:00 + 68758371 + 6c71be13298377ae586976229bd9ada8 + True + 131094720 + 4c250e30790bdd0b32e301b8d8d12935 +
S20190619Z0028r.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 04:17:08 + ZORRO + True + 2024-08-28 17:06:52.105402+00:00 + 2024-08-28 17:06:51.931902+00:00 + 74928197 + ae0cd32ad87ef84749dfe43e71555d12 + True + 131094720 + 9488709ce075f0d6361bb3a7b541aace +
S20190619Z0027b.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 04:16:05 + ZORRO + True + 2024-08-28 17:06:55.001523+00:00 + 2024-08-28 17:06:54.811964+00:00 + 68327146 + 4fa3b68dcef816f5a32438ddf1239d06 + True + 131094720 + c4479d1abe530b3d3ba7e94ed44cf3ed +
S20190619Z0027r.fits + +[A] +GS-2019A-Q-302-0-0 + 2019-06-20 04:16:05 + ZORRO + True + 2024-08-28 17:06:53.519727+00:00 + 2024-08-28 17:06:53.281931+00:00 + 74413445 + 2b2163d767d2441c645f882c2964d346 + True + 131094720 + 54818024b1905e53e999fdd2fc0f06a1 +
S20190619Z0026r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 03:29:57 + ZORRO + True + 2024-08-28 17:06:55.760839+00:00 + 2024-08-28 17:06:55.531980+00:00 + 85739349 + e8c862ff8c86107ef6d2200702c36b3a + True + 131094720 + 4256713604dc69adb0345bf7d282b26b +
S20190619Z0026b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 03:29:57 + ZORRO + True + 2024-08-28 17:06:55.779075+00:00 + 2024-08-28 17:06:55.571980+00:00 + 84547408 + 56dc7b752fec2865af619342f52deead + True + 131094720 + beb8fa717c9c463477a273a560dd7458 +
S20190619Z0025r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 03:25:38 + ZORRO + True + 2024-08-28 17:06:57.116373+00:00 + 2024-08-28 17:06:56.852008+00:00 + 81872167 + 3e3f70cd0aedc796c4c17830d150221a + True + 131094720 + 1be012cb99200353789fef758b90fa83 +
S20190619Z0025b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 03:25:38 + ZORRO + True + 2024-08-28 17:06:57.920759+00:00 + 2024-08-28 17:06:57.622025+00:00 + 86305047 + 9e0fc39c5bc63db9cedc3e13a073d035 + True + 131094720 + cf643a319125dbaf4d8ee7f234ef4fc8 +
S20190619Z0024r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 03:24:35 + ZORRO + True + 2024-08-28 17:06:59.084054+00:00 + 2024-08-28 17:06:58.822051+00:00 + 82141298 + 3c71d97e95ba98393ae194dfd7307737 + True + 131094720 + ade34b80bb17299c96dd4ac5a6078791 +
S20190619Z0024b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 03:24:35 + ZORRO + True + 2024-08-28 17:06:59.560968+00:00 + 2024-08-28 17:06:59.362062+00:00 + 86686396 + e6cf9e2ce8349d0429931ff6bad0f930 + True + 131094720 + 91ca96aed380e0121e94e96295ea1751 +
S20190619Z0023r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 03:23:32 + ZORRO + True + 2024-08-28 17:07:00.099954+00:00 + 2024-08-28 17:06:59.902074+00:00 + 82410663 + abb519244556a166774230c76cdd8b12 + True + 131094720 + 7cfea7cf3759ae412d0784696ed650f9 +
S20190619Z0023b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 03:23:32 + ZORRO + True + 2024-08-28 17:07:01.765032+00:00 + 2024-08-28 17:07:01.512109+00:00 + 86746705 + cb1c7463f44708589733018084b527aa + True + 131094720 + f446e1477e1f12db6ec269591c4ae130 +
S20190619Z0022r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 03:18:31 + ZORRO + True + 2024-08-28 17:07:01.316132+00:00 + 2024-08-28 17:07:01.142101+00:00 + 70387475 + 0a59b56c444c8f4fc89916f90e7d96c2 + True + 131094720 + 410d7aa269b8a0a292530e2a9fafa8d4 +
S20190619Z0022b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 03:18:31 + ZORRO + True + 2024-08-28 17:07:01.310679+00:00 + 2024-08-28 17:07:01.142101+00:00 + 71410107 + 29ecfaa26f2d28efbddf10c7d69efc4a + True + 131094720 + fd02b7842226a737a1c0728f9c368d68 +
S20190619Z0021b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 03:14:08 + ZORRO + True + 2024-08-28 17:07:02.889518+00:00 + 2024-08-28 17:07:02.672134+00:00 + 89678368 + 5931b6bd7fa6b968dedfa88e7dd87f58 + True + 131094720 + d82fa220616c00f5028d2faf58e1579e +
S20190619Z0021r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 03:14:08 + ZORRO + True + 2024-08-28 17:07:02.840539+00:00 + 2024-08-28 17:07:02.612133+00:00 + 86045011 + 2544cb92d209d4bcafbccf970db482ec + True + 131094720 + 973ad3361f18e7b56f514a892f299239 +
S20190619Z0020b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 03:13:05 + ZORRO + True + 2024-08-28 17:07:04.745957+00:00 + 2024-08-28 17:07:04.502173+00:00 + 89242599 + 8b3218e3ed028dd9380ee2297e32d278 + True + 131094720 + 8d90a8a2c033db2f71703cd88b00d1de +
S20190619Z0020r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 03:13:05 + ZORRO + True + 2024-08-28 17:07:03.478897+00:00 + 2024-08-28 17:07:03.262147+00:00 + 85571348 + 8acd65c5c9a3bcc10c115ad94c1fd7cb + True + 131094720 + a8611d8dccff20c814ae45797e75c107 +
S20190619Z0019r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 03:12:02 + ZORRO + True + 2024-08-28 17:07:05.769707+00:00 + 2024-08-28 17:07:05.542196+00:00 + 85866231 + 0732e59dcf84622092e38ef84dbb34ef + True + 131094720 + 054ea5ab52458c5903655995dc2a0cb3 +
S20190619Z0019b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 03:12:02 + ZORRO + True + 2024-08-28 17:07:06.401844+00:00 + 2024-08-28 17:07:06.152209+00:00 + 89327407 + e2c255aa076ecdd29ed69372ce8d733a + True + 131094720 + de03b94922c1b6f0ccf0703338af1683 +
S20190619Z0018r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 03:11:00 + ZORRO + True + 2024-08-28 17:07:06.818577+00:00 + 2024-08-28 17:07:06.602219+00:00 + 86095009 + 55cf1dc88a004bfc10f178b8ce9c5c47 + True + 131094720 + 45facd300f48a3d7aa18c88f41527580 +
S20190619Z0018b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 03:11:00 + ZORRO + True + 2024-08-28 17:07:06.985550+00:00 + 2024-08-28 17:07:06.762222+00:00 + 89607585 + e57c43244e74afb1c2efb69141484441 + True + 131094720 + 51a48516e0e82d24e99bbcb25d5c9ae3 +
S20190619Z0017b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 03:09:57 + ZORRO + True + 2024-08-28 17:07:07.879083+00:00 + 2024-08-28 17:07:07.672242+00:00 + 89840120 + 76e0947f3d790a541e7d0fb7b36e8c58 + True + 131094720 + 58daf7e0da9c399232f30b98fe2ac6ed +
S20190619Z0017r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 03:09:57 + ZORRO + True + 2024-08-28 17:07:07.891790+00:00 + 2024-08-28 17:07:07.692242+00:00 + 86851305 + 176d4153834d089414a267ef24dcd705 + True + 131094720 + ebd1fa04f61160536f25d2d39e0c8f55 +
S20190619Z0016b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 03:08:54 + ZORRO + True + 2024-08-28 17:07:08.585280+00:00 + 2024-08-28 17:07:08.362257+00:00 + 89816964 + fcc3f9623ec64cb231ffecea045479e9 + True + 131094720 + 89cd97dce36bb3df97acc818eca795e4 +
S20190619Z0016r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-20 03:08:54 + ZORRO + True + 2024-08-28 17:07:08.815730+00:00 + 2024-08-28 17:07:08.452259+00:00 + 86336273 + 6b58cf81b61b6bd6a1f4264342be7989 + True + 131094720 + 1e4e204a4c7de68ae8232e01b3986019 +
S20190619Z0015b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-19 23:53:50 + ZORRO + True + 2024-08-28 17:07:10.053824+00:00 + 2024-08-28 17:07:09.872290+00:00 + 69548229 + dd573dc60401df241653a0e0c5c002ce + True + 131094720 + 90f53da1063c94342527d8f01893b8fa +
S20190619Z0015r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-19 23:53:50 + ZORRO + True + 2024-08-28 17:07:10.080299+00:00 + 2024-08-28 17:07:09.892290+00:00 + 69628875 + 56dc220d47a4882f18a8f2469cde88ee + True + 131094720 + a318bc4dd07ab958651677e0ee120316 +
S20190619Z0014r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-19 23:49:53 + ZORRO + True + 2024-08-28 17:07:10.861326+00:00 + 2024-08-28 17:07:10.652306+00:00 + 78918137 + 6d9f65ae5f81a54bd527985ce8c683a8 + True + 131094720 + 82773ad45daf79a11b5f69ab521ffcd2 +
S20190619Z0014b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-19 23:49:53 + ZORRO + True + 2024-08-28 17:07:10.725636+00:00 + 2024-08-28 17:07:10.512303+00:00 + 82540258 + ede45f9f48ad886bc30c62e09fc6c143 + True + 131094720 + 7cefb72af4b636d5bcac5f46e587529b +
S20190619Z0013r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-19 23:48:51 + ZORRO + True + 2024-08-28 17:07:12.625642+00:00 + 2024-08-28 17:07:12.302342+00:00 + 78486173 + 6eb08d65171953b0c2720dd046ff8dd7 + True + 131094720 + 43e1b9f44eee7ac29a202d40a6118603 +
S20190619Z0013b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-19 23:48:51 + ZORRO + True + 2024-08-28 17:07:12.335625+00:00 + 2024-08-28 17:07:11.982335+00:00 + 82035108 + c9164a42c7c2db6c8aa8016b5568f30a + True + 131094720 + 6c2b3a091e7ac34ef870d0d93389239f +
S20190619Z0012r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-19 23:47:48 + ZORRO + True + 2024-08-28 17:07:13.934633+00:00 + 2024-08-28 17:07:13.682372+00:00 + 77615295 + d783560f27032027d89791cd8901a1c4 + True + 131094720 + 567f6d129cb5bb6f96197070e952d25b +
S20190619Z0012b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-19 23:47:48 + ZORRO + True + 2024-08-28 17:07:14.405691+00:00 + 2024-08-28 17:07:14.122381+00:00 + 81040632 + fd527742a82b9f1f00e34f6a21665892 + True + 131094720 + 06a58dd94288e22d483dffac628b05dd +
S20190619Z0011r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-19 23:46:45 + ZORRO + True + 2024-08-28 17:07:15.542898+00:00 + 2024-08-28 17:07:15.242405+00:00 + 77177142 + b22d39cb65d7b0860f205e83b14daf7d + True + 131094720 + 21f087dd50c282f933296412170fff45 +
S20190619Z0011b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-19 23:46:45 + ZORRO + True + 2024-08-28 17:07:16.543691+00:00 + 2024-08-28 17:07:16.302428+00:00 + 80535062 + 5877ed4261e8b95b4ca95f39893bfb3a + True + 131094720 + fa49e89a5001f0f27bc62fd3ee1530db +
S20190619Z0010r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-19 23:45:42 + ZORRO + True + 2024-08-28 17:07:16.771080+00:00 + 2024-08-28 17:07:16.582434+00:00 + 77475773 + 9dd706651db1f39de85cb75cae16273f + True + 131094720 + 3bb5b9234a6f405ddd7bd486c40dac8f +
S20190619Z0010b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-19 23:45:42 + ZORRO + True + 2024-08-28 17:07:17.035695+00:00 + 2024-08-28 17:07:16.782439+00:00 + 80820175 + c0a2b94dbe85e804f4681a4db4e635ba + True + 131094720 + 6d739624b70fc354f08fb78d83cebd24 +
S20190619Z0009r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-19 23:44:40 + ZORRO + True + 2024-08-28 17:07:17.735648+00:00 + 2024-08-28 17:07:17.402452+00:00 + 77634482 + 97ec96ad35640fd485bde1e8542bdd72 + True + 131094720 + b9636a24768e1604b0028ec4884c8571 +
S20190619Z0009b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-19 23:44:40 + ZORRO + True + 2024-08-28 17:07:18.445042+00:00 + 2024-08-28 17:07:18.242470+00:00 + 81002667 + 4daeb5f5921b4888371ff0301f73af91 + True + 131094720 + 67eaa92e24fc53a8c88e677b0bffbb2b +
S20190619Z0008r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-19 23:43:37 + ZORRO + True + 2024-08-28 17:07:19.195085+00:00 + 2024-08-28 17:07:18.992486+00:00 + 78416591 + 3c11871e4cb2bd2d68f24eb17190f3e1 + True + 131094720 + 22b58364ff40bb740dacf46adecf227e +
S20190619Z0008b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-19 23:43:37 + ZORRO + True + 2024-08-28 17:07:19.292719+00:00 + 2024-08-28 17:07:19.082488+00:00 + 81887867 + dd9edeb26c8ae469d21b496d4a9dc5a5 + True + 131094720 + f0ad630b0e1e29da5958fbe82d7e4188 +
S20190619Z0007r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-19 23:29:57 + ZORRO + True + 2024-08-28 17:07:19.874042+00:00 + 2024-08-28 17:07:19.722502+00:00 + 61268394 + 6a982d54c863095dfd7141628b946892 + True + 131094720 + a5a895e8954690add9661a9f9c7da283 +
S20190619Z0007b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-19 23:29:57 + ZORRO + True + 2024-08-28 17:07:19.672088+00:00 + 2024-08-28 17:07:19.502497+00:00 + 64316696 + 67a102493575c6ee486cb46ea54a98a7 + True + 131094720 + 854d3aad41fc52e38033dc9ec9de815b +
S20190619Z0006r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-19 23:23:32 + ZORRO + True + 2024-08-28 17:07:20.114493+00:00 + 2024-08-28 17:07:19.942507+00:00 + 71655076 + ae545a821db7f8a46ab07c24febf3e2d + True + 131094720 + bcafaa03b0e7a13ca6b74b7ce3acaa7b +
S20190619Z0006b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-19 23:23:32 + ZORRO + True + 2024-08-28 17:07:20.620649+00:00 + 2024-08-28 17:07:20.382516+00:00 + 76524192 + cdc62f2f628fcaa9bf10d623e7a4fd36 + True + 131094720 + ecb6a2275089c334b2278306e7f3e8bd +
S20190619Z0005r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-19 23:22:29 + ZORRO + True + 2024-08-28 17:07:21.045647+00:00 + 2024-08-28 17:07:20.812526+00:00 + 71643863 + 1a149245996499614548aac3e6c174be + True + 131094720 + b16c00d912adab4963d3898cf9f7c461 +
S20190619Z0005b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-19 23:22:29 + ZORRO + True + 2024-08-28 17:07:21.559818+00:00 + 2024-08-28 17:07:21.382538+00:00 + 76508036 + 804f3ad91ad49b332d698c0de6b01376 + True + 131094720 + a0800d90e26aa2bd1ead85346016810c +
S20190619Z0004b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-19 23:21:26 + ZORRO + True + 2024-08-28 17:07:24.059720+00:00 + 2024-08-28 17:07:23.742589+00:00 + 76343279 + d2deef5b82d6a94d2ccb359021877277 + True + 131094720 + 2c7fcad8dc74374c465c5d8c4026e116 +
S20190619Z0004r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-19 23:21:26 + ZORRO + True + 2024-08-28 17:07:22.547082+00:00 + 2024-08-28 17:07:22.362559+00:00 + 71527863 + 1db38243453b84586963ad36111ce736 + True + 131094720 + ddc7c626d0823918db484800f3cef7c1 +
S20190619Z0003b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-19 23:20:22 + ZORRO + True + 2024-08-28 17:07:25.464397+00:00 + 2024-08-28 17:07:25.282622+00:00 + 75961160 + bb8c8cae087c27a12839e79693bff398 + True + 131094720 + db9332fa71878500561732fd548929a4 +
S20190619Z0003r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-19 23:20:22 + ZORRO + True + 2024-08-28 17:07:24.992991+00:00 + 2024-08-28 17:07:24.722610+00:00 + 71180310 + 623a3e7288a37f9cb530c34ea49f3307 + True + 131094720 + 4aabc1468462b2bb0e4169a422d49ddd +
S20190619Z0002b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-19 23:19:19 + ZORRO + True + 2024-08-28 17:07:26.684697+00:00 + 2024-08-28 17:07:26.502648+00:00 + 76502815 + f9fe538c3c613885aad4a3d448b49182 + True + 131094720 + 0d8f9165e32106862676edc6736c7f80 +
S20190619Z0002r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-19 23:19:19 + ZORRO + True + 2024-08-28 17:07:26.556073+00:00 + 2024-08-28 17:07:26.322644+00:00 + 71665665 + 9b40cdef2a50232b3d8b67aa5a123a90 + True + 131094720 + fa668817d1f6386267ab27ad3fa836a3 +
S20190619Z0001b.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-19 23:18:16 + ZORRO + True + 2024-08-28 17:07:27.555633+00:00 + 2024-08-28 17:07:27.272665+00:00 + 76698247 + ab79d160518f9dfe6c57bae4a8eee531 + True + 131094720 + e3d0e8513a941b61b7114e5870910360 +
S20190619Z0001r.fits + +[A] +GS-2019A-Q-222-0-0 + 2019-06-19 23:18:16 + ZORRO + True + 2024-08-28 17:07:26.949318+00:00 + 2024-08-28 17:07:26.752654+00:00 + 71875521 + 3ab3afc489f35a568e29f85db49878d2 + True + 131094720 + f41defe75df9512b90f58d2224c74cc2 +
N20190619S0119.fits + +[A] +GN-2019A-LP-16-350-004 + 2019-06-19 06:40:27 + GNIRS + True + 2024-08-28 17:05:00.869023+00:00 + 2024-08-28 17:05:00.839509+00:00 + 982298 + c62a39af515ded50c9c843bd484ef7d0 + True + 4204800 + 18cdb6b661d39e50a5ec0689aab77f02 +
N20190619S0118.fits + +[A] +GN-2019A-LP-16-350-003 + 2019-06-19 06:39:34 + GNIRS + True + 2024-08-28 17:05:02.198969+00:00 + 2024-08-28 17:05:02.169538+00:00 + 983230 + dcfc3c05e5184402c9f8319cb4cb7f88 + True + 4204800 + 50c34ada2f3bba1844eb51dbaeb9b20e +
N20190619S0117.fits + +[A] +GN-2019A-LP-16-350-002 + 2019-06-19 06:38:37 + GNIRS + True + 2024-08-28 17:05:03.921272+00:00 + 2024-08-28 17:05:03.889575+00:00 + 990489 + 5259926dce0e78a740609f577a7a15d2 + True + 4204800 + bfa57d4060548653c8bb12400a179bc0 +
N20190619S0116.fits + +[A] +GN-2019A-LP-16-350-001 + 2019-06-19 06:38:06 + GNIRS + True + 2024-08-28 17:05:05.603546+00:00 + 2024-08-28 17:05:05.579611+00:00 + 413278 + b69a0b270ea3cb3245bcba0f57c97dab + True + 4204800 + 7d01bd23d268677d77b24dac0d7c12db +
N20190619S0115.fits + +[A] +GN-2019A-LP-16-349-030 + 2019-06-19 06:24:53 + GNIRS + True + 2024-08-28 17:05:06.265273+00:00 + 2024-08-28 17:05:06.239626+00:00 + 494078 + 3533d840302ca4b04842378763b37ba5 + True + 4204800 + a8c4e4a68aec31e681ef3edc2e9b5861 +
N20190619S0114.fits + +[A] +GN-2019A-LP-16-349-029 + 2019-06-19 06:24:43 + GNIRS + True + 2024-08-28 17:05:06.975795+00:00 + 2024-08-28 17:05:06.949641+00:00 + 493928 + 5295ce3d58cb63190ac52ecc836c3e5c + True + 4204800 + 2040f34cad8bd360ec5c1f3990d34cda +
N20190619S0113.fits + +[A] +GN-2019A-LP-16-349-028 + 2019-06-19 06:24:31 + GNIRS + True + 2024-08-28 17:05:08.307895+00:00 + 2024-08-28 17:05:08.279670+00:00 + 695933 + 02821bf4670d556844bfdc3521a9e9b8 + True + 4204800 + be39e4087c722e79b553176c654ef788 +
N20190619S0112.fits + +[A] +GN-2019A-LP-16-349-027 + 2019-06-19 06:24:21 + GNIRS + True + 2024-08-28 17:05:09.026774+00:00 + 2024-08-28 17:05:08.999686+00:00 + 695873 + 69a3bf97ea600a9dd11eff5e934dca2c + True + 4204800 + d13a470d3c3ca3cd7c6be15fb42e542b +
N20190619S0111.fits + +[A] +GN-2019A-LP-16-349-026 + 2019-06-19 06:24:10 + GNIRS + True + 2024-08-28 17:05:09.895450+00:00 + 2024-08-28 17:05:09.869704+00:00 + 696486 + 979b851b7ea1df982c4f91f16a508f1c + True + 4204800 + 4650a9c919df01455175dbe2f5af9a4b +
N20190619S0110.fits + +[A] +GN-2019A-LP-16-349-025 + 2019-06-19 06:24:00 + GNIRS + True + 2024-08-28 17:05:11.731350+00:00 + 2024-08-28 17:05:11.709744+00:00 + 696051 + ce6aa708ec5564faab31a8dd7ef9190d + True + 4204800 + 7c8d15cc3ab19bed62630af99c7c83f4 +
N20190619S0109.fits + +[A] +GN-2019A-LP-16-349-024 + 2019-06-19 06:23:50 + GNIRS + True + 2024-08-28 17:05:13.446015+00:00 + 2024-08-28 17:05:13.419781+00:00 + 696068 + 8a93b3699b75a8045a319d720760aeae + True + 4204800 + afa16b6654b9520a4d375638e6188a34 +
N20190619S0108.fits + +[A] +GN-2019A-LP-16-349-023 + 2019-06-19 06:23:39 + GNIRS + True + 2024-08-28 17:05:15.563048+00:00 + 2024-08-28 17:05:15.539827+00:00 + 696046 + bbfb0d47fef0909f7fb202f0503291f6 + True + 4204800 + 610faf9707d9f84bd276693fcc40c64c +
N20190619S0107.fits + +[A] +GN-2019A-LP-16-349-022 + 2019-06-19 06:23:29 + GNIRS + True + 2024-08-28 17:05:16.758053+00:00 + 2024-08-28 17:05:16.729853+00:00 + 695858 + fea6f4cc61b20ba8651fbf99659e1ae7 + True + 4204800 + b32e8e28786f220f17594e0f272eae82 +
N20190619S0106.fits + +[A] +GN-2019A-LP-16-349-021 + 2019-06-19 06:23:18 + GNIRS + True + 2024-08-28 17:05:17.270889+00:00 + 2024-08-28 17:05:17.239864+00:00 + 695951 + 1ab7f5725e746a2e2a1f9d1a8d5351bf + True + 4204800 + ed0364a8223873049c2a3fd27388db7f +
N20190619S0105.fits + +[A] +GN-2019A-LP-16-349-020 + 2019-06-19 06:23:07 + GNIRS + True + 2024-08-28 17:05:18.724827+00:00 + 2024-08-28 17:05:18.699896+00:00 + 695968 + 19c9250344bb7305d8d48fc001007cc8 + True + 4204800 + 6f51a32592b2ac8d6e36381ff97d4fad +
N20190619S0104.fits + +[A] +GN-2019A-LP-16-349-019 + 2019-06-19 06:22:57 + GNIRS + True + 2024-08-28 17:05:19.401315+00:00 + 2024-08-28 17:05:19.379910+00:00 + 694867 + ac6ed6d553957be858b41e5c092db596 + True + 4204800 + 51fb529708314973a452fb41cb6a2138 +
N20190619S0103.fits + +[A] +GN-2019A-LP-16-349-018 + 2019-06-19 06:22:38 + GNIRS + True + 2024-08-28 17:05:19.977813+00:00 + 2024-08-28 17:05:19.949923+00:00 + 570835 + a05dced02376afc2c071f3d5fe590eff + True + 4204800 + 0a8263be16bd57f4acf43c63f22790d0 +
N20190619S0102.fits + +[A] +GN-2019A-LP-16-349-017 + 2019-06-19 06:22:22 + GNIRS + True + 2024-08-28 17:05:21.339315+00:00 + 2024-08-28 17:05:21.319952+00:00 + 571828 + 2a01b3d7f987f050f6613457b5d9eedb + True + 4204800 + d319825fb3bf27fa87598f820b361074 +
N20190619S0101.fits + +[A] +GN-2019A-LP-16-349-016 + 2019-06-19 06:22:05 + GNIRS + True + 2024-08-28 17:05:22.596585+00:00 + 2024-08-28 17:05:22.569979+00:00 + 572558 + 24df27a52c2641efc78816bccf502ad1 + True + 4204800 + 066795738c7f36ff991759dfc899e9e0 +
N20190619S0100.fits + +[A] +GN-2019A-LP-16-349-015 + 2019-06-19 06:21:49 + GNIRS + True + 2024-08-28 17:05:24.158571+00:00 + 2024-08-28 17:05:24.130013+00:00 + 573016 + b682aaf69e4653ea932b3be36b47d560 + True + 4204800 + 9171bcd1e3606e1e901134af60c232ec +
N20190619S0099.fits + +[A] +GN-2019A-LP-16-349-014 + 2019-06-19 06:21:33 + GNIRS + True + 2024-08-28 17:05:26.452659+00:00 + 2024-08-28 17:05:26.430063+00:00 + 572468 + dcda09b1f63271d4ec4b702e84c64e77 + True + 4204800 + 6655ffe12f43ac27796ab184d962aa9c +
N20190619S0098.fits + +[A] +GN-2019A-LP-16-349-013 + 2019-06-19 06:21:17 + GNIRS + True + 2024-08-28 17:05:26.911104+00:00 + 2024-08-28 17:05:26.890073+00:00 + 571949 + 32d7df66c48b12588c63f08be937c671 + True + 4204800 + d615e1dca975e380aa61c547260ec932 +
N20190619S0097.fits + +[A] +GN-2019A-LP-16-349-012 + 2019-06-19 06:21:00 + GNIRS + True + 2024-08-28 17:05:28.439140+00:00 + 2024-08-28 17:05:28.400105+00:00 + 572619 + 6c229d26fe611c644853dfd1b23f9182 + True + 4204800 + 2dcc29304ba7428d09479a3fabc3d651 +
N20190619S0096.fits + +[A] +GN-2019A-LP-16-349-011 + 2019-06-19 06:20:44 + GNIRS + True + 2024-08-28 17:05:29.388322+00:00 + 2024-08-28 17:05:29.360126+00:00 + 572680 + a6be42a3fde221f697739fa302ee8245 + True + 4204800 + 70e8bf59c04490bc9cbd885deb5a4417 +
N20190619S0095.fits + +[A] +GN-2019A-LP-16-349-010 + 2019-06-19 06:20:28 + GNIRS + True + 2024-08-28 17:05:30.808298+00:00 + 2024-08-28 17:05:30.780157+00:00 + 572461 + 149328a9c390e8285d71402cd9d58970 + True + 4204800 + afcf85241569b6cee2cd810bc3384be9 +
N20190619S0094.fits + +[A] +GN-2019A-LP-16-349-009 + 2019-06-19 06:20:12 + GNIRS + True + 2024-08-28 17:05:32.248115+00:00 + 2024-08-28 17:05:32.220188+00:00 + 567417 + 7a6304af84365ed698e34d7eedd23c98 + True + 4204800 + d73880233892348e0375f7e7ecd5d906 +
N20190619S0093.fits + +[A] +GN-2019A-LP-16-349-008 + 2019-06-19 06:15:43 + GNIRS + True + 2024-08-28 17:05:32.940681+00:00 + 2024-08-28 17:05:32.920203+00:00 + 1057637 + 0923b03250e13a892a9a0bafe09377c1 + True + 4204800 + a5e480c19ac4734ff4fec0b369363f1c +
N20190619S0092.fits + +[A] +GN-2019A-LP-16-349-007 + 2019-06-19 06:11:24 + GNIRS + True + 2024-08-28 17:05:35.320454+00:00 + 2024-08-28 17:05:35.290255+00:00 + 1058997 + eb82751b8749fd38c2efb82888e78476 + True + 4204800 + 5d02053f0ae40c3059570a9e46729799 +
N20190619S0091.fits + +[A] +GN-2019A-LP-16-349-006 + 2019-06-19 06:07:08 + GNIRS + True + 2024-08-28 17:05:35.978448+00:00 + 2024-08-28 17:05:35.950269+00:00 + 1057440 + 938e17b7e908d88d3349a85bbef33a07 + True + 4204800 + 07f0859772e9fea9fc386847bea3d5cc +
N20190619S0090.fits + +[A] +GN-2019A-LP-16-349-005 + 2019-06-19 06:02:49 + GNIRS + True + 2024-08-28 17:05:37.064831+00:00 + 2024-08-28 17:05:37.040293+00:00 + 1068201 + daf8be1bb3b7778f4cbd5bff2e201ffe + True + 4204800 + 0f111d4f4442a05df3cb021b070d54c1 +
N20190619S0089.fits + +[A] +GN-2019A-LP-16-349-004 + 2019-06-19 05:58:33 + GNIRS + True + 2024-08-28 17:05:38.215591+00:00 + 2024-08-28 17:05:38.190317+00:00 + 1087585 + 5a58dc94b02189a0a8694bd4ff05a2fc + True + 4204800 + b354f89c4b0f2b609110ac69da071e7a +
N20190619S0088.fits + +[A] +GN-2019A-LP-16-349-003 + 2019-06-19 05:54:14 + GNIRS + True + 2024-08-28 17:05:39.895936+00:00 + 2024-08-28 17:05:39.870354+00:00 + 1072680 + f93969d31cf61223d93a8aebb5870958 + True + 4204800 + 98bf7f40b1e62e0faa86fbb644d64236 +
N20190619S0087.fits + +[A] +GN-2019A-LP-16-349-002 + 2019-06-19 05:48:47 + GNIRS + True + 2024-08-28 17:05:40.619838+00:00 + 2024-08-28 17:05:40.600369+00:00 + 1091741 + faf26418ab73a69914e589d3f7a2efef + True + 4204800 + abcd5637a78ee38cf2a05b2f742bbedf +
N20190619S0086.fits + +[A] +GN-2019A-LP-16-349-001 + 2019-06-19 05:44:28 + GNIRS + True + 2024-08-28 17:05:42.021557+00:00 + 2024-08-28 17:05:41.990400+00:00 + 1100334 + cf77fb43d3de2840f98cdf3cde406fff + True + 4204800 + 7b41ff63c9c6a56c1451ac6ec699bf1a +
N20190619S0085.fits + +[A] +GN-2019A-LP-16-348-006 + 2019-06-19 05:41:58 + GNIRS + True + 2024-08-28 17:05:43.630912+00:00 + 2024-08-28 17:05:43.610435+00:00 + 614735 + 01ff931972c9f5d285f807a144b16690 + True + 4204800 + e6af8bc9a7032f6fe8cdcfc056fc1610 +
N20190619S0084.fits + +[A] +GN-2019A-LP-16-348-005 + 2019-06-19 05:41:33 + GNIRS + True + 2024-08-28 17:05:44.149313+00:00 + 2024-08-28 17:05:44.120446+00:00 + 609648 + b359550df6c2733ce9811e3dcee2126d + True + 4204800 + 13178a9e16d1a14e22dc42b9d9705f4c +
N20190619S0083.fits + +[A] +GN-2019A-LP-16-348-004 + 2019-06-19 05:40:38 + GNIRS + True + 2024-08-28 17:05:46.566703+00:00 + 2024-08-28 17:05:46.540498+00:00 + 649200 + 27798ee18dcd5d0399fc927565765ffc + True + 4204800 + cb7cc098ae3351b9e01c1c94d83872de +
N20190619S0082.fits + +[A] + +[L] +GN-2019A-LP-16-348-003 + 2019-06-19 05:38:57 + GNIRS + True + 2024-08-28 17:05:46.720813+00:00 + 2024-08-28 17:05:46.700502+00:00 + 650737 + 653d4ac6c6983e601ac633e963893c78 + True + 4204800 + b70b3ed1d2eb0b7b9f247fe2d10b1178 +
N20190619S0081.fits + +[A] +GN-2019A-LP-16-348-002 + 2019-06-19 05:38:32 + GNIRS + True + 2024-08-28 17:05:48.258841+00:00 + 2024-08-28 17:05:48.230535+00:00 + 652183 + 9497efbdde9d63dda9539fdeecb5a88b + True + 4204800 + 8e6b793f249fd379ec0d4aacd1b617e4 +
N20190619S0080.fits + +[A] +GN-2019A-LP-16-348-001 + 2019-06-19 05:38:04 + GNIRS + True + 2024-08-28 17:05:48.972063+00:00 + 2024-08-28 17:05:48.950550+00:00 + 413056 + dfd86468dda39c1d96712bcd74acd754 + True + 4204800 + 4aa3dd4edf47ec095320f333976452ad +
N20190619S0079.fits + +[A] +GN-2019A-ENG-101-174-012 + 2019-06-19 05:26:20 + NIRI + AO + NGS + True + 2024-08-28 17:05:50.642555+00:00 + 2024-08-28 17:05:50.620586+00:00 + 40156 + bf179553c5e1130ae5a41432f5cca58f + True + 282240 + 444f0c14f72502b2f72710f616dccde8 +
N20190619S0078.fits + +[A] +GN-2019A-ENG-101-174-011 + 2019-06-19 05:26:15 + NIRI + AO + NGS + True + 2024-08-28 17:05:51.945429+00:00 + 2024-08-28 17:05:51.920614+00:00 + 40839 + 52b316a0d85644cde8d57b22384cb65a + True + 285120 + 835630b5f0827b904ff2e4bc5a992a89 +
N20190619S0077.fits + +[A] +GN-2019A-ENG-101-174-010 + 2019-06-19 05:26:10 + NIRI + AO + NGS + True + 2024-08-28 17:05:52.643176+00:00 + 2024-08-28 17:05:52.620630+00:00 + 40314 + 2270539baa62a91844858494e017effb + True + 285120 + 2842ffd7104522780173dc44bddc5f4b +
N20190619S0076.fits + +[A] +GN-2019A-ENG-101-174-009 + 2019-06-19 05:26:03 + NIRI + AO + NGS + True + 2024-08-28 17:05:54.024841+00:00 + 2024-08-28 17:05:54.000660+00:00 + 40461 + 59d7fffd74070d1af4916353b2120965 + True + 285120 + 76c38d8e4ecf7ce4ae70372f4baf1a69 +
N20190619S0075.fits + +[A] +GN-2019A-ENG-101-174-008 + 2019-06-19 05:25:58 + NIRI + AO + NGS + True + 2024-08-28 17:05:55.518790+00:00 + 2024-08-28 17:05:55.490692+00:00 + 40157 + 91a306fb4ee8ffa638b0de12aec71022 + True + 285120 + b6b55ffa164f6ccdff0751c024d710af +
N20190619S0074.fits + +[A] +GN-2019A-ENG-101-174-007 + 2019-06-19 05:25:53 + NIRI + AO + NGS + True + 2024-08-28 17:05:56.963714+00:00 + 2024-08-28 17:05:56.940723+00:00 + 39966 + 3e222b2dd52db3ff5585065b5032b969 + True + 285120 + e73e66e54819ec7ff39e1d9f0502ae6b +
N20190619S0073.fits + +[A] +GN-2019A-ENG-101-174-006 + 2019-06-19 05:25:45 + NIRI + AO + NGS + True + 2024-08-28 17:05:57.608377+00:00 + 2024-08-28 17:05:57.580737+00:00 + 68664 + 754d5ee3ef733fad3561595c8513ee90 + True + 285120 + 0701ec136d954e765bce8f82a3c1bada +
N20190619S0072.fits + +[A] +GN-2019A-ENG-101-174-005 + 2019-06-19 05:25:37 + NIRI + AO + NGS + True + 2024-08-28 17:05:59.024532+00:00 + 2024-08-28 17:05:59.000768+00:00 + 68664 + d4693e5a4e1bf159ebfdbcf2043f72e6 + True + 285120 + 3d2bf291204ab741cf767bb2e40b9808 +
N20190619S0071.fits + +[A] +GN-2019A-ENG-101-174-004 + 2019-06-19 05:25:30 + NIRI + AO + NGS + True + 2024-08-28 17:05:59.799836+00:00 + 2024-08-28 17:05:59.770785+00:00 + 68515 + 35bb18c5a1347db989591ad3b8563670 + True + 285120 + f05ad6f4111de8ba037ae08be4e3478a +
N20190619S0070.fits + +[A] +GN-2019A-ENG-101-174-003 + 2019-06-19 05:25:21 + NIRI + AO + NGS + True + 2024-08-28 17:06:00.994450+00:00 + 2024-08-28 17:06:00.970810+00:00 + 146094 + 7850fed96a99fa466d10d643dad353a1 + True + 1071360 + 4629b3cb1f6bf45669ec2fb82a27088a +
N20190619S0069.fits + +[A] +GN-2019A-ENG-101-174-002 + 2019-06-19 05:25:16 + NIRI + AO + NGS + True + 2024-08-28 17:06:02.488839+00:00 + 2024-08-28 17:06:02.470843+00:00 + 147047 + a45c1d87816ef697bec6665f1a62c340 + True + 1071360 + 378a839d58f5e43811bd79881478c23f +
N20190619S0068.fits + +[A] +GN-2019A-ENG-101-174-001 + 2019-06-19 05:24:30 + NIRI + AO + NGS + True + 2024-08-28 17:06:04.252862+00:00 + 2024-08-28 17:06:04.230881+00:00 + 142797 + f4728041260e6a097e3539d0c512c676 + True + 1071360 + bb675741ff43cf8341d90ba0f97df423 +
S20190619S0120.fits + GS-CAL20190619-6-016 + 2019-06-19 04:57:12 + GSAOI + AO + NGS + True + 2024-08-28 17:05:00.543451+00:00 + 2024-08-28 17:05:00.509502+00:00 + 3793778 + 82493a1be594a3610ee791b46dbc1878 + True + 16836480 + 19dcebdb5823ac2df08ed8dfb5dbfa92 +
S20190619S0119.fits + GS-CAL20190619-6-015 + 2019-06-19 04:56:37 + GSAOI + AO + NGS + True + 2024-08-28 17:05:01.897639+00:00 + 2024-08-28 17:05:01.849531+00:00 + 3789812 + 2d0f5786dc21c584863845c768566004 + True + 16836480 + 1fc326bc73cc49d53f80d68972ce9617 +
S20190619S0118.fits + GS-CAL20190619-6-014 + 2019-06-19 04:56:01 + GSAOI + AO + NGS + True + 2024-08-28 17:05:03.924579+00:00 + 2024-08-28 17:05:03.889575+00:00 + 3792421 + 9cfea3de2ea6e04e89b956dc6d54ed2e + True + 16836480 + 3a74c028dc2b80605dfebea5975a34aa +
N20190619S0067.fits + GN-CAL20190619-18-001 + 2019-06-19 04:55:38 + GMOS-N + True + 2024-08-28 17:06:05.863581+00:00 + 2024-08-28 17:06:05.840916+00:00 + 10212 + db2386f2c2661fb14f461208eb47cdf3 + True + 48960 + b2ee2436e4c1858869ad79b284eb5716 +
S20190619S0117.fits + GS-CAL20190619-6-013 + 2019-06-19 04:55:28 + GSAOI + AO + NGS + True + 2024-08-28 17:05:05.342825+00:00 + 2024-08-28 17:05:05.309606+00:00 + 3789252 + e3486d5e1fcf8f80f830eb2cea21a5b4 + True + 16836480 + 3034dd82f5d7087db5349fb53183ce67 +
S20190619S0116.fits + GS-CAL20190619-6-012 + 2019-06-19 04:51:35 + GSAOI + AO + NGS + True + 2024-08-28 17:05:06.381845+00:00 + 2024-08-28 17:05:06.349628+00:00 + 3759844 + 96e93b86664690045e723d8149e30201 + True + 16836480 + 31898b4360dd1026dd7eb741332465f9 +
S20190619S0115.fits + GS-CAL20190619-6-011 + 2019-06-19 04:50:20 + GSAOI + AO + NGS + True + 2024-08-28 17:05:06.920542+00:00 + 2024-08-28 17:05:06.889640+00:00 + 3766280 + 7756f687e01245b997b6f8b8c4a3615d + True + 16836480 + e61e5a9e35784cadd65c1c2c15ba6a6b +
S20190619S0114.fits + GS-CAL20190619-6-010 + 2019-06-19 04:48:55 + GSAOI + AO + NGS + True + 2024-08-28 17:05:07.690828+00:00 + 2024-08-28 17:05:07.659657+00:00 + 3768906 + 5e414c75d2223f6d598dce6f65229a75 + True + 16836480 + e668c43fb86f2f1168dc91956d37f4bf +
S20190619S0113.fits + GS-CAL20190619-6-009 + 2019-06-19 04:48:02 + GSAOI + AO + NGS + True + 2024-08-28 17:05:08.949349+00:00 + 2024-08-28 17:05:08.899683+00:00 + 3772931 + 038ad194242a03650e01f7f6af06b35d + True + 16836480 + 1db99f8c1e6cc254ef2df14a7cbe42d4 +
S20190619S0112.fits + GS-CAL20190619-6-008 + 2019-06-19 04:47:19 + GSAOI + AO + NGS + True + 2024-08-28 17:05:09.903959+00:00 + 2024-08-28 17:05:09.869704+00:00 + 3632588 + 360945843ee0724487ad3726ed3204ab + True + 16836480 + 8882109b72d45087979e6d90bda61a4b +
S20190619S0111.fits + GS-CAL20190619-6-007 + 2019-06-19 04:46:45 + GSAOI + AO + NGS + True + 2024-08-28 17:05:10.635622+00:00 + 2024-08-28 17:05:10.599720+00:00 + 3636247 + e650bbf7b497ddde54215ff2e5117318 + True + 16836480 + c005ae9477e0484b3c63c9a44262b984 +
S20190619S0110.fits + GS-CAL20190619-6-006 + 2019-06-19 04:46:12 + GSAOI + AO + NGS + True + 2024-08-28 17:05:12.437546+00:00 + 2024-08-28 17:05:12.399759+00:00 + 3644183 + 12213b424e3145a610be41a65ba55234 + True + 16836480 + d477d843828593f18570311feae30f86 +
S20190619S0109.fits + GS-CAL20190619-6-005 + 2019-06-19 04:45:38 + GSAOI + AO + NGS + True + 2024-08-28 17:05:14.685632+00:00 + 2024-08-28 17:05:14.639807+00:00 + 3647022 + 530e885819a5da4a1ea35ee2136ad0f4 + True + 16836480 + e0316d820af2bf3964d8c852510c3e93 +
S20190619S0108.fits + GS-CAL20190619-6-004 + 2019-06-19 04:44:55 + GSAOI + AO + NGS + True + 2024-08-28 17:05:16.541361+00:00 + 2024-08-28 17:05:16.499848+00:00 + 3235934 + f8bb796d3a5a33c6bf2ea3de10ffe7be + True + 16836480 + 3967503d435aa3d2f56b56e82888a754 +
S20190619S0107.fits + GS-CAL20190619-6-003 + 2019-06-19 04:44:21 + GSAOI + AO + NGS + True + 2024-08-28 17:05:17.410749+00:00 + 2024-08-28 17:05:17.379867+00:00 + 3234756 + 1ede05be1b063a7b9f54f15a76528f8b + True + 16836480 + 95af053e49ba22a91106241faa7a47d9 +
S20190619S0106.fits + GS-CAL20190619-6-002 + 2019-06-19 04:43:38 + GSAOI + AO + NGS + True + 2024-08-28 17:05:18.005638+00:00 + 2024-08-28 17:05:17.959879+00:00 + 3234883 + a434fd53ce0a96546fdf7b8074f7f139 + True + 16836480 + bedcd075f47ecbe39c10285928282749 +
S20190619S0105.fits + GS-CAL20190619-6-001 + 2019-06-19 04:42:54 + GSAOI + AO + NGS + True + 2024-08-28 17:05:18.925234+00:00 + 2024-08-28 17:05:18.889900+00:00 + 3236295 + acdfce9be8566dddeb7efce5302f4235 + True + 16836480 + c1b00916653cfc48d3d90be0e53b31d4 +
S20190619S0104.fits + GS-CAL20190619-4-016 + 2019-06-19 04:41:30 + GSAOI + AO + NGS + True + 2024-08-28 17:05:19.930826+00:00 + 2024-08-28 17:05:19.899921+00:00 + 3789326 + 183ee3a4f1a60b70459564624a544b69 + True + 16836480 + 8eb1da369a1c385f9f4b0398332b0391 +
S20190619S0103.fits + GS-CAL20190619-4-015 + 2019-06-19 04:40:56 + GSAOI + AO + NGS + True + 2024-08-28 17:05:20.846585+00:00 + 2024-08-28 17:05:20.819942+00:00 + 3787230 + e5bde3c1b63a5756712566f156158edf + True + 16836480 + 32f3c143f9c8fe931f7207ef9b1e0d6e +
S20190619S0102.fits + GS-CAL20190619-4-014 + 2019-06-19 04:40:22 + GSAOI + AO + NGS + True + 2024-08-28 17:05:22.577485+00:00 + 2024-08-28 17:05:22.539979+00:00 + 3791170 + c1faa4231eb9b382070e04ec7ca7e068 + True + 16836480 + 0da29b4092a0ae03ab95aca5dc8f2ec4 +
S20190619S0101.fits + GS-CAL20190619-4-013 + 2019-06-19 04:39:48 + GSAOI + AO + NGS + True + 2024-08-28 17:05:23.922834+00:00 + 2024-08-28 17:05:23.890008+00:00 + 3787436 + 9213821629c8909625fef26a77ff2a5f + True + 16836480 + 5b78cafeaf25175534ba63adf12646e8 +
S20190619S0100.fits + GS-CAL20190619-4-012 + 2019-06-19 04:39:06 + GSAOI + AO + NGS + True + 2024-08-28 17:05:25.535651+00:00 + 2024-08-28 17:05:25.490042+00:00 + 3764747 + b915d0739e3bb61a92a4fa0b9e3815ed + True + 16836480 + ae02a1ba0b0819c9a3c0ec0ca550ba7a +
S20190619S0099.fits + GS-CAL20190619-4-011 + 2019-06-19 04:38:31 + GSAOI + AO + NGS + True + 2024-08-28 17:05:26.974447+00:00 + 2024-08-28 17:05:26.940074+00:00 + 3765132 + 406e14f4bc8043d0963bcfaf1dd6808b + True + 16836480 + 19b672b6bdd66ff9d8806678851336ae +
S20190619S0098.fits + GS-CAL20190619-4-010 + 2019-06-19 04:37:55 + GSAOI + AO + NGS + True + 2024-08-28 17:05:27.760244+00:00 + 2024-08-28 17:05:27.730091+00:00 + 3767001 + af3ee989a5c6a56057b7ea02fa239bd6 + True + 16836480 + 9062abe2c0bb94c4e7101556a7e2da3a +
S20190619S0097.fits + GS-CAL20190619-4-009 + 2019-06-19 04:37:21 + GSAOI + AO + NGS + True + 2024-08-28 17:05:29.278554+00:00 + 2024-08-28 17:05:29.240124+00:00 + 3768612 + 30ae4c6850b767ee0c314ae665fddff6 + True + 16836480 + 555f235c091b3698d6a5ae2ae2945ac5 +
S20190619S0096.fits + GS-CAL20190619-4-008 + 2019-06-19 04:36:38 + GSAOI + AO + NGS + True + 2024-08-28 17:05:30.035646+00:00 + 2024-08-28 17:05:29.990140+00:00 + 3659384 + 910292f298d81a7d3f8d61668717a5c3 + True + 16836480 + 98a6b70aa1e148f0013c6a59c9fa98c6 +
S20190619S0095.fits + GS-CAL20190619-4-007 + 2019-06-19 04:36:03 + GSAOI + AO + NGS + True + 2024-08-28 17:05:31.578395+00:00 + 2024-08-28 17:05:31.550174+00:00 + 3659305 + ca54e4c72e60a15b1181b2f735d1562b + True + 16836480 + 572e6cc59faac13eda7b02108c947a18 +
S20190619S0094.fits + GS-CAL20190619-4-006 + 2019-06-19 04:35:29 + GSAOI + AO + NGS + True + 2024-08-28 17:05:33.062241+00:00 + 2024-08-28 17:05:33.030206+00:00 + 3658138 + a4957cf6b724e29349af4b81c205e2d6 + True + 16836480 + 4deab69d0f8838509c96c6bb7b7b1432 +
S20190619S0093.fits + GS-CAL20190619-4-005 + 2019-06-19 04:34:54 + GSAOI + AO + NGS + True + 2024-08-28 17:05:33.771188+00:00 + 2024-08-28 17:05:33.740221+00:00 + 3652510 + 6c948cceda5a1b1fad98646de1be9a03 + True + 16836480 + 30b855aa164c4c52c4c2965204f33134 +
S20190619S0092.fits + GS-CAL20190619-4-004 + 2019-06-19 04:34:11 + GSAOI + AO + NGS + True + 2024-08-28 17:05:35.956971+00:00 + 2024-08-28 17:05:35.930269+00:00 + 3237545 + 31675669c66204f9567c413cf20b9929 + True + 16836480 + 83ca85ec50e51b012405db3a81b1e165 +
S20190619S0091.fits + GS-CAL20190619-4-003 + 2019-06-19 04:33:37 + GSAOI + AO + NGS + True + 2024-08-28 17:05:36.806863+00:00 + 2024-08-28 17:05:36.780287+00:00 + 3235294 + 2c9955bfa02ae6950f75445089747b3c + True + 16836480 + 696bf861477511c8f575152a8e3023fc +
S20190619S0090.fits + GS-CAL20190619-4-002 + 2019-06-19 04:33:03 + GSAOI + AO + NGS + True + 2024-08-28 17:05:37.850971+00:00 + 2024-08-28 17:05:37.820309+00:00 + 3239128 + 9d8caba827824d366174389ad9c79517 + True + 16836480 + b654b242657178c2841ca313e8d89223 +
S20190619S0089.fits + GS-CAL20190619-4-001 + 2019-06-19 04:31:30 + GSAOI + AO + NGS + True + 2024-08-28 17:05:39.030900+00:00 + 2024-08-28 17:05:39.000335+00:00 + 3240268 + 6e942e94976ca75adcaa091678bbd632 + True + 16836480 + 029a9ada88671e1360858c87d5146feb +
S20190619S0088.fits + GS-CAL20190619-3-020 + 2019-06-19 04:25:12 + GSAOI + AO + NGS + True + 2024-08-28 17:05:40.435766+00:00 + 2024-08-28 17:05:40.400365+00:00 + 3899668 + 448c31335fc901964278841ac0ad5a8d + True + 16836480 + 77b9890fd931c2dfe380685f4f87a4ee +
S20190619S0087.fits + GS-CAL20190619-3-019 + 2019-06-19 04:24:38 + GSAOI + AO + NGS + True + 2024-08-28 17:05:41.951369+00:00 + 2024-08-28 17:05:41.920398+00:00 + 3893706 + 5086aa8de0ca45f2e5364898aad5d75e + True + 16836480 + 1e49ffcdb49f9e1837bc886a5bca17b5 +
S20190619S0086.fits + GS-CAL20190619-3-018 + 2019-06-19 04:24:04 + GSAOI + AO + NGS + True + 2024-08-28 17:05:42.781010+00:00 + 2024-08-28 17:05:42.750416+00:00 + 3889829 + cab7ad8b198996bfb0dba2a5a6f3b3c2 + True + 16836480 + 691a608b67ba5310a173f8d49509e77a +
S20190619S0085.fits + GS-CAL20190619-3-017 + 2019-06-19 04:23:31 + GSAOI + AO + NGS + True + 2024-08-28 17:05:44.306278+00:00 + 2024-08-28 17:05:44.270449+00:00 + 3889586 + ebd7027ac9524878bdbfe0a501741ff4 + True + 16836480 + 3df2df958fd026928bf889db2d06758a +
S20190619S0084.fits + GS-CAL20190619-3-016 + 2019-06-19 04:22:48 + GSAOI + AO + NGS + True + 2024-08-28 17:05:45.202750+00:00 + 2024-08-28 17:05:45.170469+00:00 + 3794142 + 80716212149b8e99a6ff2c5528e04af5 + True + 16836480 + c564a7457aec6233dfdf0aa4a352829b +
S20190619S0083.fits + GS-CAL20190619-3-015 + 2019-06-19 04:22:14 + GSAOI + AO + NGS + True + 2024-08-28 17:05:46.918375+00:00 + 2024-08-28 17:05:46.890506+00:00 + 3785622 + 23c31c4f0c0a2b11fcbfb913fdc354a8 + True + 16836480 + 77d1f48d07367eb903c2afdf377377fb +
S20190619S0082.fits + GS-CAL20190619-3-014 + 2019-06-19 04:21:39 + GSAOI + AO + NGS + True + 2024-08-28 17:05:47.625654+00:00 + 2024-08-28 17:05:47.570520+00:00 + 3787713 + ddc119d5ee8b35f909ccfaccb6d9e98d + True + 16836480 + 6552ea9916a3e3b232601e92767ca477 +
S20190619S0081.fits + GS-CAL20190619-3-013 + 2019-06-19 04:21:06 + GSAOI + AO + NGS + True + 2024-08-28 17:05:49.014751+00:00 + 2024-08-28 17:05:48.980551+00:00 + 3791118 + 5734b0637d96ce3aa14bc8e26fb3fac0 + True + 16836480 + 44224d0a342d8cb04366196e65ae4d74 +
S20190619S0080.fits + GS-CAL20190619-3-012 + 2019-06-19 04:20:23 + GSAOI + AO + NGS + True + 2024-08-28 17:05:49.781832+00:00 + 2024-08-28 17:05:49.750568+00:00 + 3784942 + 07799941b7620037b682bd561150b53c + True + 16836480 + d8f85c7f744eee72bc36b2b7107cbc15 +
S20190619S0079.fits + GS-CAL20190619-3-011 + 2019-06-19 04:19:48 + GSAOI + AO + NGS + True + 2024-08-28 17:05:51.345618+00:00 + 2024-08-28 17:05:51.290601+00:00 + 3773233 + 50b8da982d1073f1c42f08c8550cb881 + True + 16836480 + d80b630c2ffcc439961eb480a938dba0 +
S20190619S0078.fits + GS-CAL20190619-3-010 + 2019-06-19 04:19:14 + GSAOI + AO + NGS + True + 2024-08-28 17:05:52.605885+00:00 + 2024-08-28 17:05:52.570629+00:00 + 3775424 + 4e7d89402ec6487de35b2900478f1ecd + True + 16836480 + 1c96bbd58f08d5e86adeb42713c934ae +
S20190619S0077.fits + GS-CAL20190619-3-009 + 2019-06-19 04:18:40 + GSAOI + AO + NGS + True + 2024-08-28 17:05:54.324563+00:00 + 2024-08-28 17:05:54.290666+00:00 + 3773327 + 56688ee9a4dfbc93a4cfe9be9d1a07b4 + True + 16836480 + 2103b9556edde48b133facfaa36b00bb +
S20190619S0076.fits + GS-CAL20190619-3-008 + 2019-06-19 04:17:57 + GSAOI + AO + NGS + True + 2024-08-28 17:05:55.743039+00:00 + 2024-08-28 17:05:55.710697+00:00 + 3653461 + 04f832fba47e0a3b858c89c7eb64520e + True + 16836480 + aa251f4d92d52842192c6dba503b69fd +
S20190619S0075.fits + GS-CAL20190619-3-007 + 2019-06-19 04:17:23 + GSAOI + AO + NGS + True + 2024-08-28 17:05:56.973640+00:00 + 2024-08-28 17:05:56.940723+00:00 + 3640686 + 22ab6a4e7288211dd6460920f6a4c140 + True + 16836480 + 19ad8244842a459a86bfd8906880ce0a +
S20190619S0074.fits + GS-CAL20190619-3-006 + 2019-06-19 04:16:47 + GSAOI + AO + NGS + True + 2024-08-28 17:05:57.718959+00:00 + 2024-08-28 17:05:57.680739+00:00 + 3635532 + 5a8a3d43c2172b54ae5ad1e13cd85f26 + True + 16836480 + 2a461202e6798bcec26053d39e50e5b6 +
S20190619S0073.fits + GS-CAL20190619-3-005 + 2019-06-19 04:16:13 + GSAOI + AO + NGS + True + 2024-08-28 17:05:58.382322+00:00 + 2024-08-28 17:05:58.350754+00:00 + 3640247 + 17f18582c728116a07e17561d50d889b + True + 16836480 + ed22ed9c6cf7c8f96387a2dcf94c011f +
S20190619S0072.fits + GS-CAL20190619-3-004 + 2019-06-19 04:15:30 + GSAOI + AO + NGS + True + 2024-08-28 17:05:59.850499+00:00 + 2024-08-28 17:05:59.820786+00:00 + 3248829 + 09f22bfe765400685afe562d58b5bfce + True + 16836480 + a46b7fed40faebca54d4121a223b34f9 +
S20190619S0071.fits + GS-CAL20190619-3-003 + 2019-06-19 04:14:56 + GSAOI + AO + NGS + True + 2024-08-28 17:06:00.242924+00:00 + 2024-08-28 17:06:00.210794+00:00 + 3239939 + a67374ebe629089fc649ee353136b7a8 + True + 16836480 + 2086d8229dcc8d099ca33d2dfb933418 +
S20190619S0070.fits + GS-CAL20190619-3-002 + 2019-06-19 04:14:19 + GSAOI + AO + NGS + True + 2024-08-28 17:06:02.115454+00:00 + 2024-08-28 17:06:02.080835+00:00 + 3239036 + b81af62364fb35df13cf58171a69fe6b + True + 16836480 + 976dcb52d383ae30fa68c967ddf1b38d +
S20190619S0069.fits + GS-CAL20190619-3-001 + 2019-06-19 04:13:18 + GSAOI + AO + NGS + True + 2024-08-28 17:06:03.539266+00:00 + 2024-08-28 17:06:03.510865+00:00 + 3241295 + 5f5ec4d8a9f3db10381b82e5ec926800 + True + 16836480 + a2e47676b6902babf0600c58ff4aba51 +
S20190619S0068.fits + +[A] + +[L] +GS-2019A-Q-409-91-008 + 2019-06-19 03:56:30 + F2 + True + 2024-08-28 17:06:04.925674+00:00 + 2024-08-28 17:06:04.880895+00:00 + 3772705 + 85aae0249ced9f972fe5bd7f44471e4f + True + 16801920 + d5cd98c21a4dd3984b8bd6b0bd0de481 +
S20190619S0067.fits + +[A] + +[L] +GS-2019A-Q-409-91-007 + 2019-06-19 03:55:58 + F2 + True + 2024-08-28 17:06:06.551530+00:00 + 2024-08-28 17:06:06.510931+00:00 + 5549847 + 28f47943924e2288b7e14438f581e489 + True + 16801920 + bb21728586ffe300a49beefcb479c8ba +
S20190619S0066.fits + +[A] +GS-2019A-Q-409-91-006 + 2019-06-19 03:53:04 + F2 + True + 2024-08-28 17:06:07.651753+00:00 + 2024-08-28 17:06:07.610954+00:00 + 5151999 + b62926f3072d88d021a5359850b5e712 + True + 16801920 + 4fe3a6abdba0437404ffba2512cf24ec +
S20190619S0065.fits + +[A] +GS-2019A-Q-409-91-005 + 2019-06-19 03:50:30 + F2 + True + 2024-08-28 17:06:08.263569+00:00 + 2024-08-28 17:06:08.230968+00:00 + 5156144 + 941d9ee9095543833ce3ae3be50b243c + True + 16801920 + aae1f00ea3b9caa9d08053e8be1d1f55 +
S20190619S0064.fits + +[A] +GS-2019A-Q-409-91-004 + 2019-06-19 03:47:51 + F2 + True + 2024-08-28 17:06:09.471421+00:00 + 2024-08-28 17:06:09.440993+00:00 + 5157830 + a288a98520d71931acc7d29f1deb0fc7 + True + 16801920 + 0ce210b1be98ffe3c4fbf6dfec2e5cb5 +
S20190619S0063.fits + +[A] +GS-2019A-Q-409-91-003 + 2019-06-19 03:45:08 + F2 + True + 2024-08-28 17:06:09.954372+00:00 + 2024-08-28 17:06:09.921002+00:00 + 5158383 + 5752bfe176eeb2a8a11639ca7d5a9bb7 + True + 16801920 + 68f1be0eb41987fae9fea080d659339e +
S20190619S0062.fits + +[A] +GS-2019A-Q-409-91-002 + 2019-06-19 03:42:34 + F2 + True + 2024-08-28 17:06:11.886445+00:00 + 2024-08-28 17:06:11.851042+00:00 + 5159415 + d93c0ddd3916bbf2ea66eaa224f75c88 + True + 16801920 + 6b75b14b2682471c97c082dfa4a13bdc +
S20190619S0061.fits + +[A] +GS-2019A-Q-409-91-001 + 2019-06-19 03:40:00 + F2 + True + 2024-08-28 17:06:13.497048+00:00 + 2024-08-28 17:06:13.461075+00:00 + 5169829 + c73c52fdcc5d454aad631e000b1c4cca + True + 16801920 + 2b5ea0d33ce8c7eeea5da7f31eb6a280 +
S20190619S0060.fits + +[A] + +[L] +GS-2019A-Q-409-90-003 + 2019-06-19 03:37:34 + F2 + True + 2024-08-28 17:06:14.745307+00:00 + 2024-08-28 17:06:14.721101+00:00 + 2623138 + f007b6b10d4fcbbe72606e7f3b8fbaa4 + True + 16801920 + 7d332fb01a0b8e2f7451aabcace386da +
S20190619S0059.fits + +[A] +GS-2019A-Q-409-90-002 + 2019-06-19 03:31:45 + F2 + True + 2024-08-28 17:06:16.308520+00:00 + 2024-08-28 17:06:16.281134+00:00 + 2590341 + be760d4020f2782868955c5d568338db + True + 16801920 + a5de09d0b9ae71339683ecca952287bf +
S20190619S0058.fits + +[A] + +[L] +GS-2019A-Q-409-90-001 + 2019-06-19 03:29:43 + F2 + True + 2024-08-28 17:06:17.961106+00:00 + 2024-08-28 17:06:17.921170+00:00 + 5376803 + 9849eb9b1d73f1430b8823f1adf76f79 + True + 16801920 + 4849b492dbcaac671d327426c2dec1c2 +
S20190619S0057.fits + +[A] + +[L] +GS-2019A-Q-409-87-008 + 2019-06-19 03:24:31 + F2 + True + 2024-08-28 17:06:19.064957+00:00 + 2024-08-28 17:06:19.031193+00:00 + 3764756 + 556f15e3e51a6d4664079284408a18f4 + True + 16801920 + 8f882cca668af51c16eeeab99830b863 +
S20190619S0056.fits + +[A] + +[L] +GS-2019A-Q-409-87-007 + 2019-06-19 03:24:00 + F2 + True + 2024-08-28 17:06:19.696008+00:00 + 2024-08-28 17:06:19.661207+00:00 + 5551264 + 2b10a55e69959ae53554e592c765ffde + True + 16801920 + 4fdd2cc4d795101eb2959783481d2fdb +
S20190619S0055.fits + +[A] +GS-2019A-Q-409-87-006 + 2019-06-19 03:20:53 + F2 + True + 2024-08-28 17:06:20.345561+00:00 + 2024-08-28 17:06:20.301221+00:00 + 5151342 + 35697abcc9408c0be1fe2d6a0f2075e0 + True + 16801920 + 2c3815e27e8d4ecae8875b1c75a68957 +
S20190619S0054.fits + +[A] +GS-2019A-Q-409-87-005 + 2019-06-19 03:18:15 + F2 + True + 2024-08-28 17:06:22.615194+00:00 + 2024-08-28 17:06:22.581270+00:00 + 5157232 + 641a2b252385035784c0e13de6c2edcf + True + 16801920 + 13006d72173f98014e5dea2a0fa883f0 +
S20190619S0053.fits + +[A] +GS-2019A-Q-409-87-004 + 2019-06-19 03:15:41 + F2 + True + 2024-08-28 17:06:23.405622+00:00 + 2024-08-28 17:06:23.361287+00:00 + 5156497 + f89ca6d8b5408efaa0c74713d6e44185 + True + 16801920 + 5bae28b25d02f0effc20a7432b59b788 +
S20190619S0052.fits + +[A] +GS-2019A-Q-409-87-003 + 2019-06-19 03:13:01 + F2 + True + 2024-08-28 17:06:24.905642+00:00 + 2024-08-28 17:06:24.861320+00:00 + 5155673 + d7681f3d8cc05020e5a98063ac07bcc6 + True + 16801920 + 200cccde5872f897f6e825435bd15e8d +
S20190619S0051.fits + +[A] +GS-2019A-Q-409-87-002 + 2019-06-19 03:10:27 + F2 + True + 2024-08-28 17:06:26.295947+00:00 + 2024-08-28 17:06:26.251350+00:00 + 5153568 + 7e1597d81e09c3e79e9b4376395f2aa6 + True + 16801920 + 9dedcf6867ada8cfc1b097843f25f151 +
S20190619S0050.fits + +[A] + +[L] +GS-2019A-Q-409-87-001 + 2019-06-19 03:07:51 + F2 + True + 2024-08-28 17:06:27.845016+00:00 + 2024-08-28 17:06:27.791383+00:00 + 5150299 + e608b0b696a559cc3f6c7c50ae268ac9 + True + 16801920 + f0561b09b2790be6a1e0095b776006f7 +
S20190619S0049.fits + +[A] + +[L] +GS-2019A-Q-409-86-004 + 2019-06-19 03:04:43 + F2 + True + 2024-08-28 17:06:28.649976+00:00 + 2024-08-28 17:06:28.621401+00:00 + 2608974 + 46d2651bee357c7d35c316c25bc43b19 + True + 16801920 + 0ce082345e127f2bcf88347755a90e21 +
S20190619S0048.fits + +[A] + +[L] +GS-2019A-Q-409-86-003 + 2019-06-19 03:03:07 + F2 + True + 2024-08-28 17:06:29.850883+00:00 + 2024-08-28 17:06:29.821427+00:00 + 2613123 + 9e19581fd636a70d93a140b13bef71bc + True + 16801920 + 774fcd613bc6bc91efc54901fd7461e3 +
S20190619S0047.fits + +[A] +GS-2019A-Q-409-86-002 + 2019-06-19 02:57:57 + F2 + True + 2024-08-28 17:06:30.605243+00:00 + 2024-08-28 17:06:30.581444+00:00 + 2648724 + 86f2c2da2a9ee77973648b67310d76ad + True + 16801920 + 419cff6d12fc2e08fa3096f87bd4a617 +
S20190619S0046.fits + +[A] + +[L] +GS-2019A-Q-409-86-001 + 2019-06-19 02:55:33 + F2 + True + 2024-08-28 17:06:31.265938+00:00 + 2024-08-28 17:06:31.211457+00:00 + 5364417 + d9b9fd7b224479775bc5edad287d054d + True + 16801920 + 06919d6599dabc5c5d4fd9f6b7ae30dc +
S20190619S0045.fits + +[A] +GS-2019A-Q-409-85-008 + 2019-06-19 02:50:27 + F2 + True + 2024-08-28 17:06:33.514617+00:00 + 2024-08-28 17:06:33.451506+00:00 + 3741276 + 7aa51f726d1ac5f68238a80c826d5943 + True + 16801920 + 8b0f727dafb195c148c33639e23aed15 +
S20190619S0044.fits + +[A] +GS-2019A-Q-409-85-007 + 2019-06-19 02:46:03 + F2 + True + 2024-08-28 17:06:34.465614+00:00 + 2024-08-28 17:06:34.421527+00:00 + 3690394 + a8d40576f83320281f78d2e0bcec3668 + True + 16801920 + a97558acc90ccd07b2c729d2014584ef +
S20190619S0043.fits + +[A] +GS-2019A-Q-409-85-006 + 2019-06-19 02:42:23 + F2 + True + 2024-08-28 17:06:36.463056+00:00 + 2024-08-28 17:06:36.431570+00:00 + 3690053 + 36c7af990af87ab112d4daa6872141ff + True + 16801920 + 65f74908e19c0c00dd98d894ee00af09 +
S20190619S0042.fits + +[A] +GS-2019A-Q-409-85-005 + 2019-06-19 02:38:35 + F2 + True + 2024-08-28 17:06:37.594100+00:00 + 2024-08-28 17:06:37.561595+00:00 + 3691932 + 48a74e16274f6bba80a036d1779544fe + True + 16801920 + de2c41d9f88bbb3ed234112ae4f21246 +
S20190619S0041.fits + +[A] +GS-2019A-Q-409-85-004 + 2019-06-19 02:34:55 + F2 + True + 2024-08-28 17:06:38.396603+00:00 + 2024-08-28 17:06:38.361612+00:00 + 3692539 + fe5df5266461e62dbbb713d79cfac2bf + True + 16801920 + 96908447f1375c4de90d3d05cdbcd9d7 +
S20190619S0040.fits + +[A] +GS-2019A-Q-409-85-003 + 2019-06-19 02:30:02 + F2 + True + 2024-08-28 17:06:38.909981+00:00 + 2024-08-28 17:06:38.881624+00:00 + 3691005 + e8f1520a3ba8f24fa611ff389193a49d + True + 16801920 + 5557da1e7f7ff67ec4a7876232930f2b +
S20190619S0039.fits + +[A] +GS-2019A-Q-409-85-002 + 2019-06-19 02:25:45 + F2 + True + 2024-08-28 17:06:39.985526+00:00 + 2024-08-28 17:06:39.951647+00:00 + 3691551 + ac79065a099bb495b8ddb5fef753fe50 + True + 16801920 + 373aeed2696e3afd09c94e038da17027 +
S20190619S0038.fits + +[A] + +[L] +GS-2019A-Q-409-85-001 + 2019-06-19 02:22:27 + F2 + True + 2024-08-28 17:06:41.066250+00:00 + 2024-08-28 17:06:41.041670+00:00 + 2888978 + 645c3b2fbb40a7998b2c40ca7491ca1f + True + 16801920 + 6268a6ff3560504f3a7bc9519853a125 +
S20190619S0037.fits + +[A] + +[L] +GS-2019A-Q-409-84-003 + 2019-06-19 02:18:44 + F2 + True + 2024-08-28 17:06:42.340706+00:00 + 2024-08-28 17:06:42.311697+00:00 + 2549399 + ca1d5936f6c7a37ac5b22716ec8b58d7 + True + 16801920 + a7283facf6d8eb86431c3b7540adf1e4 +
S20190619S0036.fits + +[A] +GS-2019A-Q-409-84-002 + 2019-06-19 02:15:53 + F2 + True + 2024-08-28 17:06:43.708800+00:00 + 2024-08-28 17:06:43.681726+00:00 + 2723108 + a4d4d6a0a160ec64b23ba918f82af6d2 + True + 16801920 + 56633a0cd7489fcce3b9aa929990ea5a +
S20190619S0035.fits + +[A] + +[L] +GS-2019A-Q-409-84-001 + 2019-06-19 02:13:59 + F2 + True + 2024-08-28 17:06:45.374756+00:00 + 2024-08-28 17:06:45.341761+00:00 + 4518441 + c10f13fd765bdf823c1684025a15396f + True + 16801920 + d6f9d7fbdaae21b6513b11e4f855c726 +
N20190619S0066.fits + GN-CAL20190619-3-005 + 2019-06-19 01:05:55 + GNIRS + True + 2024-08-28 17:06:06.697424+00:00 + 2024-08-28 17:06:06.670934+00:00 + 443362 + d8b6434083bfffa5bafac91e1663033f + True + 4204800 + f8821aae4b47c7765b7ef5d6a2fbc6ee +
N20190619S0065.fits + GN-CAL20190619-3-004 + 2019-06-19 01:05:33 + GNIRS + True + 2024-08-28 17:06:07.889122+00:00 + 2024-08-28 17:06:07.860960+00:00 + 490510 + 9d700273127859bde77979a8eeb5daa4 + True + 4204800 + 1eda74f1361986d09bbe677c8b6aed1c +
N20190619S0064.fits + GN-CAL20190619-3-003 + 2019-06-19 01:04:15 + GNIRS + True + 2024-08-28 17:06:08.865471+00:00 + 2024-08-28 17:06:08.840980+00:00 + 473373 + deb476895ca77eb407107ec43dbaa186 + True + 4204800 + 8e4f95f1dc675ca23791b599620a6a5a +
N20190619S0063.fits + GN-CAL20190619-3-002 + 2019-06-19 01:03:07 + GNIRS + True + 2024-08-28 17:06:09.382438+00:00 + 2024-08-28 17:06:09.360991+00:00 + 504299 + ae279dd3627ee399f59d49c06c9cff58 + True + 4204800 + a22f3fd735f3040eaaba0dd9d4f4ebc3 +
N20190619S0062.fits + GN-CAL20190619-3-001 + 2019-06-19 01:01:51 + GNIRS + True + 2024-08-28 17:06:10.968535+00:00 + 2024-08-28 17:06:10.941023+00:00 + 445561 + 6c975afe4067ad5c733ee2d6a475d59c + True + 4204800 + 92fb4943da6af3ec8b15fa86c4143056 +
N20190619S0061.fits + GN-CAL20190619-21-040 + 2019-06-19 00:57:16 + GNIRS + True + 2024-08-28 17:06:12.880734+00:00 + 2024-08-28 17:06:12.861063+00:00 + 845779 + c04f3b07e59598d33ba19ef3836ad075 + True + 4204800 + 9c5b653d39783c5c564ba17b93e77b02 +
N20190619S0060.fits + GN-CAL20190619-21-039 + 2019-06-19 00:56:30 + GNIRS + True + 2024-08-28 17:06:13.666904+00:00 + 2024-08-28 17:06:13.641078+00:00 + 841482 + 70fc7fd0f231ebfc1cb8b8514b04eb4e + True + 4204800 + 2a67ff9437838b211d7957c2e3b7e89c +
N20190619S0059.fits + GN-CAL20190619-21-038 + 2019-06-19 00:55:44 + GNIRS + True + 2024-08-28 17:06:15.320856+00:00 + 2024-08-28 17:06:15.291113+00:00 + 842803 + 5cedbee40f5433bf12498cc41d8869ed + True + 4204800 + 20a4adf9135d00af1b433a5872368a9c +
N20190619S0058.fits + GN-CAL20190619-21-037 + 2019-06-19 00:54:58 + GNIRS + True + 2024-08-28 17:06:16.830740+00:00 + 2024-08-28 17:06:16.801145+00:00 + 844910 + a0d09062899c58a4e2c84d70fa912c0f + True + 4204800 + 6091f381cbc016ef95b3562d63f28bad +
N20190619S0057.fits + GN-CAL20190619-21-036 + 2019-06-19 00:54:13 + GNIRS + True + 2024-08-28 17:06:18.878272+00:00 + 2024-08-28 17:06:18.851190+00:00 + 849150 + f07f4fada02f6ac49e415c12946f2ac8 + True + 4204800 + 1666536bdcb7d2431d276083543a54e6 +
N20190619S0056.fits + GN-CAL20190619-21-035 + 2019-06-19 00:53:27 + GNIRS + True + 2024-08-28 17:06:19.755131+00:00 + 2024-08-28 17:06:19.731209+00:00 + 851346 + b7d78f1c7f772e35dbf3589b8d53e419 + True + 4204800 + eefa305622789580d5991f2152ecafd6 +
N20190619S0055.fits + GN-CAL20190619-21-034 + 2019-06-19 00:52:41 + GNIRS + True + 2024-08-28 17:06:21.195630+00:00 + 2024-08-28 17:06:21.021237+00:00 + 860746 + 2959fbfc883eea4eaa36fde01d1d79b7 + True + 4204800 + cdedb50ade9032ba7024f4778ee0b12b +
N20190619S0054.fits + GN-CAL20190619-21-033 + 2019-06-19 00:51:55 + GNIRS + True + 2024-08-28 17:06:22.601031+00:00 + 2024-08-28 17:06:22.571270+00:00 + 857238 + ea3d729dd199b52792dbab35b6540abc + True + 4204800 + 14ab119a5969faa1d75f3c3ff14a1457 +
N20190619S0053.fits + GN-CAL20190619-21-032 + 2019-06-19 00:51:09 + GNIRS + True + 2024-08-28 17:06:23.859048+00:00 + 2024-08-28 17:06:23.831298+00:00 + 862012 + f60bc0b0fe334474756c993868ca9a70 + True + 4204800 + 5efaab8d68270c45ba2f7cd83d3e4ba4 +
N20190619S0052.fits + GN-CAL20190619-21-031 + 2019-06-19 00:50:24 + GNIRS + True + 2024-08-28 17:06:24.801220+00:00 + 2024-08-28 17:06:24.781318+00:00 + 869279 + 42b46a1808962cb51cdc35dcaa0fc99a + True + 4204800 + 5f97c1e7a765ce33952125bdedc596f5 +
N20190619S0051.fits + GN-CAL20190619-21-030 + 2019-06-19 00:49:56 + GNIRS + True + 2024-08-28 17:06:26.127498+00:00 + 2024-08-28 17:06:26.101347+00:00 + 741216 + cef67747685277f29d954f53a96ce141 + True + 4204800 + f7af95f5b5e7e67121964e8e68d4a462 +
N20190619S0050.fits + GN-CAL20190619-21-029 + 2019-06-19 00:49:31 + GNIRS + True + 2024-08-28 17:06:27.621099+00:00 + 2024-08-28 17:06:27.601379+00:00 + 742285 + d3157b24a1f3b77d5a5a555af1b60cd9 + True + 4204800 + faf44b7f4e9795d132b91b196952a469 +
N20190619S0049.fits + GN-CAL20190619-21-028 + 2019-06-19 00:49:07 + GNIRS + True + 2024-08-28 17:06:28.840927+00:00 + 2024-08-28 17:06:28.821406+00:00 + 739514 + 83406e090c67c1e7919a87e589048763 + True + 4204800 + c072ea7a63904c413d3b9075edf411fe +
N20190619S0048.fits + GN-CAL20190619-21-027 + 2019-06-19 00:48:42 + GNIRS + True + 2024-08-28 17:06:29.771739+00:00 + 2024-08-28 17:06:29.741426+00:00 + 741831 + f643e37f6d8a220fa1be9c47e873b6ec + True + 4204800 + 198ea6f08b4324db1bf29d13a982ffc9 +
N20190619S0047.fits + GN-CAL20190619-21-026 + 2019-06-19 00:48:17 + GNIRS + True + 2024-08-28 17:06:30.438481+00:00 + 2024-08-28 17:06:30.411440+00:00 + 745411 + fe4e53b21930d9841fbfcd83ac12fbaf + True + 4204800 + 58ab48bc3050599d2248942a5ba3234f +
N20190619S0046.fits + GN-CAL20190619-21-025 + 2019-06-19 00:47:52 + GNIRS + True + 2024-08-28 17:06:31.784972+00:00 + 2024-08-28 17:06:31.761469+00:00 + 749256 + b70b22a75a097fe93215c28368fb9e74 + True + 4204800 + 14b01fb4f3d9b1d02a55432abbe9d9b7 +
N20190619S0045.fits + GN-CAL20190619-21-024 + 2019-06-19 00:47:28 + GNIRS + True + 2024-08-28 17:06:32.638313+00:00 + 2024-08-28 17:06:32.611488+00:00 + 754392 + e3ce65a894281532207c7a92fdeb8338 + True + 4204800 + eab19ff012321b7e2a5ca0c6c52a3682 +
N20190619S0044.fits + GN-CAL20190619-21-023 + 2019-06-19 00:47:03 + GNIRS + True + 2024-08-28 17:06:34.932260+00:00 + 2024-08-28 17:06:34.911537+00:00 + 761176 + 348d2b6b5b03347f8ea857a5fc4b4039 + True + 4204800 + 5a794befdb6e3b988f4413be2e69b41f +
N20190619S0043.fits + GN-CAL20190619-21-022 + 2019-06-19 00:46:39 + GNIRS + True + 2024-08-28 17:06:36.293833+00:00 + 2024-08-28 17:06:36.261567+00:00 + 770037 + 428a59531b09ffaf8c0c51c17b3bd6a8 + True + 4204800 + a4ad894232f417e764eb97d31a800d65 +
N20190619S0042.fits + GN-CAL20190619-21-021 + 2019-06-19 00:46:14 + GNIRS + True + 2024-08-28 17:06:37.437452+00:00 + 2024-08-28 17:06:37.411592+00:00 + 783033 + 6d6c7bb073e2277940a6684803ba0d0e + True + 4204800 + f981d0ec43f3b340acd420873b554ea8 +
N20190619S0041.fits + GN-CAL20190619-21-020 + 2019-06-19 00:46:06 + GNIRS + True + 2024-08-28 17:06:38.156799+00:00 + 2024-08-28 17:06:38.131607+00:00 + 460279 + 1e76d5359280b0398c5e8dcc6bf53df9 + True + 4204800 + f857ae250fbb940742b7bd0dc1b26131 +
N20190619S0040.fits + GN-CAL20190619-21-019 + 2019-06-19 00:46:01 + GNIRS + True + 2024-08-28 17:06:38.763357+00:00 + 2024-08-28 17:06:38.741620+00:00 + 461259 + 18fc713e756a42ccc899d20e59771e64 + True + 4204800 + 1cbbd9e39160472483f14452b13473ab +
N20190619S0039.fits + GN-CAL20190619-21-018 + 2019-06-19 00:45:55 + GNIRS + True + 2024-08-28 17:06:39.662106+00:00 + 2024-08-28 17:06:39.641640+00:00 + 461626 + 709b9258c463990bf10c6d6cafe94f60 + True + 4204800 + 037af60e9925b2162d4c1cc26c5700d4 +
N20190619S0038.fits + GN-CAL20190619-21-017 + 2019-06-19 00:45:50 + GNIRS + True + 2024-08-28 17:06:40.276530+00:00 + 2024-08-28 17:06:40.241653+00:00 + 462228 + f4875f7c2d0b6f61079438b8f2a16c80 + True + 4204800 + d34aeb942cb925189f5999a93561aa94 +
N20190619S0037.fits + GN-CAL20190619-21-016 + 2019-06-19 00:45:45 + GNIRS + True + 2024-08-28 17:06:42.054109+00:00 + 2024-08-28 17:06:42.031691+00:00 + 461609 + ebdf8178e2e9a6c3b348bd669ee7caee + True + 4204800 + 83111f38a979172b133f4908bd2e7ab4 +
N20190619S0036.fits + GN-CAL20190619-21-015 + 2019-06-19 00:45:40 + GNIRS + True + 2024-08-28 17:06:43.501333+00:00 + 2024-08-28 17:06:43.481722+00:00 + 462570 + 5f4199a7077b789a740998e644c3012e + True + 4204800 + e098053e51425aae3b295fe8462dfd16 +
N20190619S0035.fits + GN-CAL20190619-21-014 + 2019-06-19 00:45:35 + GNIRS + True + 2024-08-28 17:06:44.725620+00:00 + 2024-08-28 17:06:44.701748+00:00 + 462261 + e76c16525e0d48fbb9d1d9788f7874f6 + True + 4204800 + 699865e7d0c9e691fe0f1e4758ddb051 +
N20190619S0034.fits + GN-CAL20190619-21-013 + 2019-06-19 00:45:30 + GNIRS + True + 2024-08-28 17:06:45.608649+00:00 + 2024-08-28 17:06:45.581766+00:00 + 463740 + e679345fdb35e0720856ea325479aa92 + True + 4204800 + 93cf8ed2decc8ac6987e56071c4795c4 +
N20190619S0033.fits + GN-CAL20190619-21-012 + 2019-06-19 00:45:24 + GNIRS + True + 2024-08-28 17:06:47.789975+00:00 + 2024-08-28 17:06:47.761813+00:00 + 463473 + 6c30d543e9d02c8fd42611c1c50d87dd + True + 4204800 + 0490648fbe9e4e8a48e275645c377364 +
N20190619S0032.fits + GN-CAL20190619-21-011 + 2019-06-19 00:45:19 + GNIRS + True + 2024-08-28 17:06:48.330028+00:00 + 2024-08-28 17:06:48.311824+00:00 + 463338 + 8712aedc9792cd6b9ec459c48066e3ab + True + 4204800 + c70e02e7944825705938662f59ba1a6a +
N20190619S0031.fits + GN-CAL20190619-21-010 + 2019-06-19 00:45:12 + GNIRS + True + 2024-08-28 17:06:49.609127+00:00 + 2024-08-28 17:06:49.581851+00:00 + 679570 + 35da8f00b3ffeb16a3eb2ab11af08b52 + True + 4204800 + 0fbd421f66b444515fdb6ea253048397 +
N20190619S0030.fits + GN-CAL20190619-21-009 + 2019-06-19 00:45:08 + GNIRS + True + 2024-08-28 17:06:50.216788+00:00 + 2024-08-28 17:06:50.181864+00:00 + 682505 + a51cd980455cbd4b1a17338012370afe + True + 4204800 + fa5bc01d66c38d5506a7966a83c99774 +
N20190619S0029.fits + GN-CAL20190619-21-008 + 2019-06-19 00:45:04 + GNIRS + True + 2024-08-28 17:06:51.232548+00:00 + 2024-08-28 17:06:51.211886+00:00 + 679247 + 75f8828655039fdc732fd9e12474714d + True + 4204800 + cfc40460436fa550697cc071ad797ac5 +
N20190619S0028.fits + GN-CAL20190619-21-007 + 2019-06-19 00:44:59 + GNIRS + True + 2024-08-28 17:06:52.205449+00:00 + 2024-08-28 17:06:52.181907+00:00 + 683872 + 01876d263832c8ff9cbabb253cf6ada6 + True + 4204800 + 21e174c3e792a351d733a8e42cf12020 +
N20190619S0027.fits + GN-CAL20190619-21-006 + 2019-06-19 00:44:55 + GNIRS + True + 2024-08-28 17:06:54.476549+00:00 + 2024-08-28 17:06:54.451956+00:00 + 670025 + 9c0958aabf9d372c014bd6e373285d2d + True + 4204800 + cf6e6a339eb9b3d0c041517615aa1a38 +
N20190619S0026.fits + GN-CAL20190619-21-005 + 2019-06-19 00:44:51 + GNIRS + True + 2024-08-28 17:06:55.133017+00:00 + 2024-08-28 17:06:55.111970+00:00 + 685206 + b046f31c4eb8190357557f6a32e903ef + True + 4204800 + 706dbacbb1b34581e073fd0d1137024f +
N20190619S0025.fits + GN-CAL20190619-21-004 + 2019-06-19 00:44:47 + GNIRS + True + 2024-08-28 17:06:57.833622+00:00 + 2024-08-28 17:06:57.812029+00:00 + 663809 + 4b692be3529f300ddd25b165c6410e52 + True + 4204800 + 77a5f9bfc17eafb0d3a78fffda6939a1 +
N20190619S0023.fits + GN-CAL20190619-21-003 + 2019-06-19 00:32:34 + GNIRS + True + 2024-08-28 17:07:00.283843+00:00 + 2024-08-28 17:07:00.262082+00:00 + 682177 + dc9cbcb271431d993b417dbc785432ae + True + 4204800 + 5df14f307a76111471a7754c750d51a4 +
N20190619S0022.fits + GN-CAL20190619-21-002 + 2019-06-19 00:32:30 + GNIRS + True + 2024-08-28 17:07:01.345725+00:00 + 2024-08-28 17:07:01.322105+00:00 + 683580 + 0d94a02b8fa25215799cf6ee8f2d4f56 + True + 4204800 + 6f5b581b7d77f2a654f2f5e3e19f260c +
N20190619S0021.fits + GN-CAL20190619-21-001 + 2019-06-19 00:32:26 + GNIRS + True + 2024-08-28 17:07:02.258575+00:00 + 2024-08-28 17:07:02.232124+00:00 + 668025 + 6666c6a7c3fc7fc8e5d8be8a77a75fa9 + True + 4204800 + ef0aeabae72930637204c42a301ed84f +
N20190619S0020.fits + GN-CAL20190619-20-010 + 2019-06-19 00:32:17 + GNIRS + True + 2024-08-28 17:07:03.938020+00:00 + 2024-08-28 17:07:03.912161+00:00 + 460364 + 0707d638dc0ff6392f532c97174ee877 + True + 4204800 + 9061cffca910b0209d37df310ca1eb2e +
N20190619S0019.fits + GN-CAL20190619-20-009 + 2019-06-19 00:32:12 + GNIRS + True + 2024-08-28 17:07:05.443897+00:00 + 2024-08-28 17:07:05.422193+00:00 + 461368 + 02b4347fa41605f85af5d0801d345c84 + True + 4204800 + 7280f42886baf144f38808aacf389dee +
N20190619S0018.fits + GN-CAL20190619-20-008 + 2019-06-19 00:32:07 + GNIRS + True + 2024-08-28 17:07:06.547679+00:00 + 2024-08-28 17:07:06.522217+00:00 + 461254 + 8af3d014be67b693f580a662906b504e + True + 4204800 + d91504d16ac9f6747c0502b8820bbe92 +
N20190619S0017.fits + GN-CAL20190619-20-007 + 2019-06-19 00:32:02 + GNIRS + True + 2024-08-28 17:07:07.320997+00:00 + 2024-08-28 17:07:07.302234+00:00 + 461680 + 2058ed2029940b0777e64dd4956e6e75 + True + 4204800 + 52eb272ce393737cadded9ddd8788428 +
N20190619S0016.fits + GN-CAL20190619-20-006 + 2019-06-19 00:31:57 + GNIRS + True + 2024-08-28 17:07:07.922164+00:00 + 2024-08-28 17:07:07.902247+00:00 + 462742 + 7e34b9231856c4912ea976a2b797c345 + True + 4204800 + da93793f0ac53523aa82b949767c2df1 +
N20190619S0015.fits + GN-CAL20190619-20-005 + 2019-06-19 00:31:51 + GNIRS + True + 2024-08-28 17:07:09.651228+00:00 + 2024-08-28 17:07:09.632284+00:00 + 463015 + 32fdea7fa2a5d234a7076f3bd6217793 + True + 4204800 + 39edf674c38242932cf7338ce0a5a950 +
N20190619S0014.fits + GN-CAL20190619-20-004 + 2019-06-19 00:31:46 + GNIRS + True + 2024-08-28 17:07:10.301946+00:00 + 2024-08-28 17:07:10.282298+00:00 + 463156 + 8694b59b41144247783ae12ff7faee89 + True + 4204800 + b8da53ef27d0e812d0e1ac8c739d92c8 +
N20190619S0013.fits + GN-CAL20190619-20-003 + 2019-06-19 00:31:41 + GNIRS + True + 2024-08-28 17:07:12.899116+00:00 + 2024-08-28 17:07:12.872354+00:00 + 465061 + 741c64831ae9431197a077df556ad861 + True + 4204800 + 411b168ceaff72a149cd38ea3ef20e7b +
N20190619S0012.fits + GN-CAL20190619-20-002 + 2019-06-19 00:31:36 + GNIRS + True + 2024-08-28 17:07:13.684873+00:00 + 2024-08-28 17:07:13.662371+00:00 + 464195 + ca25f00c0661a94f233075d1897c97b9 + True + 4204800 + 2885eb59260ded6708778a7d5f41b3a8 +
N20190619S0011.fits + GN-CAL20190619-20-001 + 2019-06-19 00:31:31 + GNIRS + True + 2024-08-28 17:07:16.134948+00:00 + 2024-08-28 17:07:16.112424+00:00 + 465760 + 37ec62a4860b871e6bab25e8ed1f3f04 + True + 4204800 + 115b0feddbf8c26e39d7351c87414898 +
N20190619S0009.fits + GN-CAL20190619-4-001 + 2019-06-19 00:09:58 + NIRI + True + 2024-08-28 17:07:18.378876+00:00 + 2024-08-28 17:07:18.312472+00:00 + 1291864 + 7c738dc4d9d25aa6788c256e2b7d3fd8 + True + 4213440 + 89633af62dc8a97278196a883968e948 +
N20190619S0001.fits + GN-CAL20190619-1-001 + 2019-06-19 00:09:23 + GNIRS + True + 2024-08-28 17:07:27.317881+00:00 + 2024-08-28 17:07:27.292665+00:00 + 413745 + 718fc3a7ecf13827af1e47b966164a96 + True + 4204800 + 47b497baccfdbabfc83aa6e8d5456cbc +
N20190619S0010.fits + + 2019-06-19 00:00:00 + GNIRS + True + 2024-08-28 17:07:16.315666+00:00 + 2024-08-28 17:07:16.292428+00:00 + 515606 + a5afeb92ed3a113649926a96ccc44b26 + True + 4193280 + b4121be4dcecd8a0e96edcb86eaceacf +
N20190618S1700.fits + GN-CAL20190618-26-008 + 2019-06-18 23:55:47 + GMOS-N + True + 2024-08-28 17:07:28.314641+00:00 + 2024-08-28 17:07:28.292687+00:00 + 64396 + f6011c678e7fbdcd2d4942cd284ee3ca + True + 250560 + 85bdf427072aef9880ca0c4eb003b6b3 +
N20190618S1699.fits + GN-CAL20190618-26-007 + 2019-06-18 23:54:05 + GMOS-N + True + 2024-08-28 17:07:28.610871+00:00 + 2024-08-28 17:07:28.592693+00:00 + 64490 + 184787d9dcf5cfeebcfff251f118d51a + True + 250560 + 92947c8513338a416973086019e42032 +
N20190618S1698.fits + GN-CAL20190618-26-006 + 2019-06-18 23:53:24 + GMOS-N + True + 2024-08-28 17:07:28.648769+00:00 + 2024-08-28 17:07:28.632694+00:00 + 64273 + 78474e429b0da7e4489e2db401abca0d + True + 250560 + a28d2ce1a518cfe779228947d8096fa3 +
N20190618S1697.fits + GN-CAL20190618-26-005 + 2019-06-18 23:53:02 + GMOS-N + True + 2024-08-28 17:07:28.830430+00:00 + 2024-08-28 17:07:28.812698+00:00 + 64388 + e719b33288bd01c153f12657f800e202 + True + 250560 + c52981118f41901b4081d5edb1ae9931 +
N20190618S1696.fits + GN-CAL20190618-26-004 + 2019-06-18 23:52:42 + GMOS-N + True + 2024-08-28 17:07:29.120178+00:00 + 2024-08-28 17:07:29.102704+00:00 + 64258 + 1135474f99bc3fc9c09238c5f7582bad + True + 250560 + 462f2d4c24676584bb5c4daf73aac489 +
N20190618S1695.fits + GN-CAL20190618-26-003 + 2019-06-18 23:51:22 + GMOS-N + True + 2024-08-28 17:07:28.992732+00:00 + 2024-08-28 17:07:28.972702+00:00 + 64826 + 84e18d8f6a40052fa5212a5a029cd1ee + True + 250560 + b557b4ca3fb12322a0b72a28fad99040 +
N20190618S1694.fits + GN-CAL20190618-26-002 + 2019-06-18 23:50:01 + GMOS-N + True + 2024-08-28 17:07:29.260657+00:00 + 2024-08-28 17:07:29.242707+00:00 + 64446 + dee6b437f020bdbc72cc78f28d06aa13 + True + 250560 + ac2ca88f5fdc7f1e940a4be05741078f +
N20190618S1693.fits + GN-CAL20190618-26-001 + 2019-06-18 23:48:37 + GMOS-N + True + 2024-08-28 17:07:29.284022+00:00 + 2024-08-28 17:07:29.262708+00:00 + 64662 + 921b9f1e9969557ca654ab2159128786 + True + 250560 + 74ebf090712e7adf1339fb44418e56c5 +
S20190619S0034.fits + +[A] +GS-ENG20190619-5-007 + 2019-06-18 21:21:38 + F2 + True + 2024-08-28 17:06:46.551889+00:00 + 2024-08-28 17:06:46.511786+00:00 + 2551524 + c4ff36dd621c0935327908ba3ed48e7d + True + 16799040 + 76b471097640d0836487a6100621e266 +
S20190619S0033.fits + +[A] +GS-ENG20190619-5-006 + 2019-06-18 21:20:05 + F2 + True + 2024-08-28 17:06:48.157334+00:00 + 2024-08-28 17:06:48.121820+00:00 + 4933239 + 02ed44f7d2a93c8b7d0cb78badc9ec3c + True + 16799040 + 7ac91eb04467357def6242bcb054a998 +
S20190619S0032.fits + +[A] +GS-ENG20190619-5-005 + 2019-06-18 21:16:40 + F2 + True + 2024-08-28 17:06:48.972832+00:00 + 2024-08-28 17:06:48.941838+00:00 + 2830431 + 70ec089ee1370623aa4f7524ed9b6410 + True + 16799040 + 1dc9896a6d33382b8c1d9e401bc15265 +
S20190619S0031.fits + +[A] +GS-ENG20190619-5-004 + 2019-06-18 21:13:05 + F2 + True + 2024-08-28 17:06:49.905682+00:00 + 2024-08-28 17:06:49.881858+00:00 + 2810714 + 73a440da9c88423898bf43cad6831474 + True + 16799040 + cb6a91a87457d03a0324cf590ad8c0bb +
S20190619S0030.fits + +[A] +GS-ENG20190619-5-003 + 2019-06-18 21:12:41 + F2 + True + 2024-08-28 17:06:50.798568+00:00 + 2024-08-28 17:06:50.771877+00:00 + 2531984 + 4b285d427a64dbcf49b033613870666f + True + 16799040 + 7d75c6cd5c3dafc4baf935e6987502e3 +
S20190619S0029.fits + +[A] +GS-ENG20190619-5-002 + 2019-06-18 21:12:18 + F2 + True + 2024-08-28 17:06:51.378490+00:00 + 2024-08-28 17:06:51.351889+00:00 + 2607954 + 3b5ac3a5762e67923dd8d34c4262b408 + True + 16799040 + b920645610161afb0c5fe5776ffc0344 +
S20190619S0028.fits + +[A] +GS-ENG20190619-5-001 + 2019-06-18 21:11:49 + F2 + True + 2024-08-28 17:06:52.770972+00:00 + 2024-08-28 17:06:52.741919+00:00 + 2558886 + 48a41166d297abe5cf6aaf77fa123eec + True + 16799040 + 60327b98c6262df3ee4d6ce614496723 +
S20190619S0027.fits + +[A] +GS-ENG20190619-4-007 + 2019-06-18 20:59:23 + GSAOI + True + 2024-08-28 17:06:55.698926+00:00 + 2024-08-28 17:06:55.621982+00:00 + 15702986 + 7b0a8e919f8cc7acecd7508d06e35689 + True + 67196160 + f3da1c48363781dd9099a150eccafd33 +
S20190619S0026.fits + +[A] +GS-ENG20190619-4-006 + 2019-06-18 20:58:21 + GSAOI + True + 2024-08-28 17:06:55.876195+00:00 + 2024-08-28 17:06:55.801986+00:00 + 15692328 + 53e1a27ed5021e5f302369892ffdd4c6 + True + 67196160 + 3d919eb7660de99db8badf397db7eed0 +
S20190619S0025.fits + +[A] +GS-ENG20190619-4-005 + 2019-06-18 20:57:19 + GSAOI + True + 2024-08-28 17:06:58.568141+00:00 + 2024-08-28 17:06:58.502044+00:00 + 15711850 + 83bbf19eeea430471f46c98dfb40938e + True + 67196160 + 26811735ce5346af5dff60e2009e8144 +
S20190619S0024.fits + +[A] +GS-ENG20190619-4-004 + 2019-06-18 20:56:17 + GSAOI + True + 2024-08-28 17:06:59.626320+00:00 + 2024-08-28 17:06:59.572067+00:00 + 15693976 + cd4ac2d730e738afca4908e281b4d4a8 + True + 67196160 + f4059c073f82150f254a48eb0be6ae2c +
S20190619S0023.fits + +[A] +GS-ENG20190619-4-003 + 2019-06-18 20:55:15 + GSAOI + True + 2024-08-28 17:07:00.780551+00:00 + 2024-08-28 17:07:00.732092+00:00 + 15702509 + 55d3a6a1aca8cc108f04b41fba74e51c + True + 67196160 + ea7791a6da43818408a71fde0f9096a3 +
S20190619S0022.fits + +[A] +GS-ENG20190619-4-002 + 2019-06-18 20:54:13 + GSAOI + True + 2024-08-28 17:07:01.848131+00:00 + 2024-08-28 17:07:01.792115+00:00 + 15731201 + c1d557e002b5ff5ab02c22c951eb9800 + True + 67196160 + 1ae9e6013e35c0b18645c91ecfdade2a +
S20190619S0021.fits + +[A] +GS-ENG20190619-4-001 + 2019-06-18 20:51:51 + GSAOI + True + 2024-08-28 17:07:02.985693+00:00 + 2024-08-28 17:07:02.902139+00:00 + 15759543 + a8dbad90097a1f610e6b2492f978e5a9 + True + 67196160 + fedf6fd972da05c7f187a8ab2f2c6d69 +
N20190618S1692.fits + +[A] +GN-2019A-ENG-51-108-005 + 2019-06-18 20:13:04 + GMOS-N + True + 2024-08-28 17:07:29.724856+00:00 + 2024-08-28 17:07:29.692717+00:00 + 3634697 + af2ce5bffd6414d86f5c827e3552f16a + True + 14788800 + ea23c9891e63e9d33f5de40f814dc12b +
N20190618S1691.fits + +[A] +GN-2019A-ENG-51-108-004 + 2019-06-18 20:12:39 + GMOS-N + True + 2024-08-28 17:07:29.682948+00:00 + 2024-08-28 17:07:29.652716+00:00 + 3634061 + 730d3f0da0f18948d0ce82b03746eb01 + True + 14788800 + 230fec85d421f1991a62504b030e2e98 +
N20190618S1690.fits + +[A] +GN-2019A-ENG-51-108-003 + 2019-06-18 20:12:14 + GMOS-N + True + 2024-08-28 17:07:29.757342+00:00 + 2024-08-28 17:07:29.732718+00:00 + 3633753 + caf0739dfb85e5dc8b7c63a71b0f74c9 + True + 14788800 + f249713ef41b764d37a0e999cd13f9c7 +
N20190618S1689.fits + +[A] +GN-2019A-ENG-51-108-002 + 2019-06-18 20:11:49 + GMOS-N + True + 2024-08-28 17:07:29.661286+00:00 + 2024-08-28 17:07:29.632716+00:00 + 3632436 + 1af2e4ef6dcd4f79b8e94a5a01450ece + True + 14788800 + 92655985cb3c6457fcfcd3f52f4b60da +
N20190618S1688.fits + +[A] +GN-2019A-ENG-51-108-001 + 2019-06-18 20:11:24 + GMOS-N + True + 2024-08-28 17:07:29.844434+00:00 + 2024-08-28 17:07:29.812720+00:00 + 3635318 + 9615bf0666025dcca39626cb575b007e + True + 14788800 + 115cf9e620019f8c06c29febbd2f8488 +
N20190618S1687.fits + +[A] +GN-2019A-Q-303-126-122 + 2019-06-18 20:07:05 + NIRI + True + 2024-08-28 17:07:29.852718+00:00 + 2024-08-28 17:07:29.832720+00:00 + 627118 + 8aaac7b653bf4d1dc5df1c78f536dfdc + True + 4213440 + 35b88f68d7bb93afe56cc9298ab9a81e +
N20190618S1686.fits + +[A] +GN-2019A-Q-303-126-121 + 2019-06-18 20:06:49 + NIRI + True + 2024-08-28 17:07:29.980121+00:00 + 2024-08-28 17:07:29.962723+00:00 + 627910 + 170e6b74d85dd0e00b05a4fbc86b348b + True + 4213440 + a05ae61175ed11a93ed77612d201c541 +
N20190618S1685.fits + +[A] +GN-2019A-Q-303-126-120 + 2019-06-18 20:06:33 + NIRI + True + 2024-08-28 17:07:29.958435+00:00 + 2024-08-28 17:07:29.932722+00:00 + 623441 + 685778add7fbf28d3b1775eb46120a4b + True + 4213440 + fc9c95e7f777d9f43d7bf7db2ba6fb2a +
N20190618S1684.fits + +[A] +GN-2019A-Q-303-126-119 + 2019-06-18 20:06:17 + NIRI + True + 2024-08-28 17:07:30.388677+00:00 + 2024-08-28 17:07:30.362731+00:00 + 626104 + b737e75cda69b0bc62ec9a575dfb8556 + True + 4213440 + 198efc5e864b2c7bd2296fd180b3369d +
N20190618S1683.fits + +[A] +GN-2019A-Q-303-126-118 + 2019-06-18 20:06:02 + NIRI + True + 2024-08-28 17:07:30.769152+00:00 + 2024-08-28 17:07:30.742740+00:00 + 628717 + a65f7151b82199eaea042bd6b4f88bd1 + True + 4213440 + 6a284955bbde80354663598ef0615e62 +
N20190618S1682.fits + +[A] +GN-2019A-Q-303-126-117 + 2019-06-18 20:05:46 + NIRI + True + 2024-08-28 17:07:31.003104+00:00 + 2024-08-28 17:07:30.982745+00:00 + 627789 + 31119aea83e56c06e32f62ec421ddba9 + True + 4213440 + 8471f13af792bdffab6667ae1ff2251c +
N20190618S1681.fits + +[A] +GN-2019A-Q-303-126-116 + 2019-06-18 20:05:30 + NIRI + True + 2024-08-28 17:07:30.954775+00:00 + 2024-08-28 17:07:30.932744+00:00 + 627636 + 81357bd495abc82494e70959ad8cce96 + True + 4213440 + 91753875e3358c9adb8829a08615fb8d +
N20190618S1680.fits + +[A] +GN-2019A-Q-303-126-115 + 2019-06-18 20:05:14 + NIRI + True + 2024-08-28 17:07:31.064630+00:00 + 2024-08-28 17:07:31.042746+00:00 + 629578 + ad95243c866435b4046bdf72c8f85481 + True + 4213440 + d3df6f90e2952cd3c147325a0bd733a0 +
N20190618S1679.fits + +[A] +GN-2019A-Q-303-126-114 + 2019-06-18 20:04:58 + NIRI + True + 2024-08-28 17:07:31.193913+00:00 + 2024-08-28 17:07:31.092747+00:00 + 627891 + 7c8dff9e4a7bbf889257314cc6405f05 + True + 4213440 + 6e134fb2a9d0e116b3c41e6ff4fb1e60 +
N20190618S1678.fits + +[A] +GN-2019A-Q-303-126-113 + 2019-06-18 20:04:42 + NIRI + True + 2024-08-28 17:07:31.299487+00:00 + 2024-08-28 17:07:31.272751+00:00 + 626879 + 37109d4d820657fee60334058e692bb0 + True + 4213440 + 08766cc4f045cb5887e82a36025c886f +
N20190618S1677.fits + +[A] +GN-2019A-Q-303-126-112 + 2019-06-18 20:04:26 + NIRI + True + 2024-08-28 17:07:31.211874+00:00 + 2024-08-28 17:07:31.192750+00:00 + 627890 + 0cc74e6af10ef1b31cf9f9ba17853a35 + True + 4213440 + eb52d6d39c8df9891cc6ab7e936896e6 +
N20190618S1676.fits + +[A] +GN-2019A-Q-303-126-111 + 2019-06-18 20:04:10 + NIRI + True + 2024-08-28 17:07:31.190536+00:00 + 2024-08-28 17:07:31.162749+00:00 + 626891 + 391d0e7bc1d7f6d1de59cabf19467e87 + True + 4213440 + f0733acc2f5a41a563649ab7704d009f +
N20190618S1675.fits + +[A] +GN-2019A-Q-303-126-110 + 2019-06-18 20:03:54 + NIRI + True + 2024-08-28 17:07:31.317212+00:00 + 2024-08-28 17:07:31.292752+00:00 + 625494 + df5d1f7272c06c3a6a06f80ec0b161ce + True + 4213440 + b5a880dda10f5fa01c4611c77da25d7f +
N20190618S1674.fits + +[A] +GN-2019A-Q-303-126-109 + 2019-06-18 20:03:38 + NIRI + True + 2024-08-28 17:07:31.321447+00:00 + 2024-08-28 17:07:31.302752+00:00 + 628778 + 8d8810ff9143f32e6ae14f452bbe717a + True + 4213440 + 1c1c8c99425043d34af543b99c3f61cf +
N20190618S1673.fits + +[A] +GN-2019A-Q-303-126-108 + 2019-06-18 20:03:22 + NIRI + True + 2024-08-28 17:07:31.404312+00:00 + 2024-08-28 17:07:31.372753+00:00 + 627851 + bfbd1ebb45913c3fa0f5b001261128e7 + True + 4213440 + 98d38b3ab68386dd421cd35ba2fdfa3d +
N20190618S1672.fits + +[A] +GN-2019A-Q-303-126-107 + 2019-06-18 20:03:06 + NIRI + True + 2024-08-28 17:07:31.477988+00:00 + 2024-08-28 17:07:31.452755+00:00 + 629809 + a05fa1ac72159ddb9563e3f24ebaa1ee + True + 4213440 + 247452a6979932f79728e734bb3dc45e +
N20190618S1671.fits + +[A] +GN-2019A-Q-303-126-106 + 2019-06-18 20:02:51 + NIRI + True + 2024-08-28 17:07:31.478620+00:00 + 2024-08-28 17:07:31.462755+00:00 + 631723 + 2cba6ee6f53e13a72da34c7773d78469 + True + 4213440 + ff246e7bc8deff9ef0483deeada06a7e +
N20190618S1670.fits + +[A] +GN-2019A-Q-303-126-105 + 2019-06-18 20:02:34 + NIRI + True + 2024-08-28 17:07:31.496810+00:00 + 2024-08-28 17:07:31.472755+00:00 + 628851 + e962509941fc843d20ca80fc9143aa66 + True + 4213440 + 818d7db745c0046b4c7490f8169488eb +
N20190618S1669.fits + +[A] +GN-2019A-Q-303-126-104 + 2019-06-18 20:02:18 + NIRI + True + 2024-08-28 17:07:31.630646+00:00 + 2024-08-28 17:07:31.612759+00:00 + 626920 + d39476eca22898e1842653e61de4b3eb + True + 4213440 + 03b8284c5c6787f8dee092ca6b0ef467 +
N20190618S1668.fits + +[A] +GN-2019A-Q-303-126-103 + 2019-06-18 20:02:02 + NIRI + True + 2024-08-28 17:07:31.639716+00:00 + 2024-08-28 17:07:31.612759+00:00 + 628182 + f1823932f14ea701cd2102616452ae0f + True + 4213440 + a1167328b9c09a89b91fa0255b2f7ad2 +
N20190618S1667.fits + +[A] +GN-2019A-Q-303-126-102 + 2019-06-18 20:01:46 + NIRI + True + 2024-08-28 17:07:31.660671+00:00 + 2024-08-28 17:07:31.632759+00:00 + 626225 + 7695379e811974e548f8f1890b408b0b + True + 4213440 + cb4fe2752f9782d580c0089b4bb41b7f +
N20190618S1666.fits + +[A] +GN-2019A-Q-303-126-101 + 2019-06-18 20:01:30 + NIRI + True + 2024-08-28 17:07:31.679593+00:00 + 2024-08-28 17:07:31.662760+00:00 + 627667 + e713e37436c7600672501be64d33dbaa + True + 4213440 + 6958d7ee536d3d8753779e620c7edffe +
N20190618S1665.fits + +[A] +GN-2019A-Q-303-126-100 + 2019-06-18 20:01:14 + NIRI + True + 2024-08-28 17:07:31.893952+00:00 + 2024-08-28 17:07:31.792763+00:00 + 631897 + 372631a1104677cc3553c3ff0a3c75ba + True + 4213440 + 686fa298c4dc64a143049d9ae970f57e +
N20190618S1664.fits + +[A] +GN-2019A-Q-303-126-099 + 2019-06-18 20:00:59 + NIRI + True + 2024-08-28 17:07:31.788596+00:00 + 2024-08-28 17:07:31.762762+00:00 + 627250 + a73b22a2c331fcc93d4b0b08beecb70d + True + 4213440 + fe543c72e3a582900f2ff713ef6a76a8 +
N20190618S1663.fits + +[A] +GN-2019A-Q-303-126-098 + 2019-06-18 20:00:42 + NIRI + True + 2024-08-28 17:07:31.877723+00:00 + 2024-08-28 17:07:31.852764+00:00 + 630738 + ddd77512bc55d72a356a9cb3d776c79f + True + 4213440 + 806faa0daf39c8fdbd3432b890e4ace6 +
N20190618S1662.fits + +[A] +GN-2019A-Q-303-126-097 + 2019-06-18 20:00:26 + NIRI + True + 2024-08-28 17:07:31.894333+00:00 + 2024-08-28 17:07:31.872764+00:00 + 629552 + 77d8bcc1c06180e005c1ad251559d060 + True + 4213440 + 616b64238b959dab79217834b063db6e +
N20190618S1661.fits + +[A] +GN-2019A-Q-303-126-096 + 2019-06-18 20:00:10 + NIRI + True + 2024-08-28 17:07:32.087985+00:00 + 2024-08-28 17:07:32.062768+00:00 + 628772 + a15275a535ec1a154e3a29cb296b2635 + True + 4213440 + 3daabb36082108cbed5a64f186147676 +
N20190618S1660.fits + +[A] +GN-2019A-Q-303-126-095 + 2019-06-18 19:59:54 + NIRI + True + 2024-08-28 17:07:31.984296+00:00 + 2024-08-28 17:07:31.962766+00:00 + 629380 + c0f8f652196bb2da870d68011bdf3b3b + True + 4213440 + 6585a8a31957b4618bd482042b410730 +
N20190618S1659.fits + +[A] +GN-2019A-Q-303-126-094 + 2019-06-18 19:59:38 + NIRI + True + 2024-08-28 17:07:32.018544+00:00 + 2024-08-28 17:07:32.002767+00:00 + 624854 + b98391a91c1bc87b2ea28a84427b57cd + True + 4213440 + 0146b1fe1d9d836942a124487d4efea8 +
N20190618S1658.fits + +[A] +GN-2019A-Q-303-126-093 + 2019-06-18 19:59:22 + NIRI + True + 2024-08-28 17:07:32.167565+00:00 + 2024-08-28 17:07:32.142770+00:00 + 627504 + 25f50a24a0acc6c23e44ee4c8871254a + True + 4213440 + 5df813bdfa7a4e97cc421f2ef9a82a7a +
N20190618S1657.fits + +[A] +GN-2019A-Q-303-126-092 + 2019-06-18 19:59:06 + NIRI + True + 2024-08-28 17:07:32.182057+00:00 + 2024-08-28 17:07:32.162771+00:00 + 627542 + a96fc9699af2a6bb358fddf36f3f77bf + True + 4213440 + d35503607a38dab757d012170c4569da +
N20190618S1656.fits + +[A] +GN-2019A-Q-303-126-091 + 2019-06-18 19:58:50 + NIRI + True + 2024-08-28 17:07:32.267675+00:00 + 2024-08-28 17:07:32.242772+00:00 + 628432 + 8ac707c77f359ed1214b91a4ff8cdff7 + True + 4213440 + a5c5f0d94b98724a98991d6f99a1c3a4 +
N20190618S1655.fits + +[A] +GN-2019A-Q-303-126-090 + 2019-06-18 19:58:34 + NIRI + True + 2024-08-28 17:07:32.170763+00:00 + 2024-08-28 17:07:32.152770+00:00 + 626184 + ff0b12859d81a24b2f388c401fc72579 + True + 4213440 + 570b6c5046302730bfe8b5fae0d9b5ae +
N20190618S1654.fits + +[A] +GN-2019A-Q-303-126-089 + 2019-06-18 19:58:18 + NIRI + True + 2024-08-28 17:07:32.150994+00:00 + 2024-08-28 17:07:32.132770+00:00 + 625996 + 3bc79b6f9f6c7c52001b0d9dd784a881 + True + 4213440 + 52a29c005abf03c979f9d9e121f0ff8b +
N20190618S1653.fits + +[A] +GN-2019A-Q-303-126-088 + 2019-06-18 19:58:02 + NIRI + True + 2024-08-28 17:07:32.261767+00:00 + 2024-08-28 17:07:32.242772+00:00 + 628978 + e0078902579dede8eddf7e23e6b7137b + True + 4213440 + ef82572711a86d4fc5f4813d9e7d323a +
+ + + + +

WARNING: Your search does not constrain the number of results - ie you did not specify a date, + date range, program ID etc. Searches like this are limited to 500 results, and this + search hit that limit. You may want to constrain your search. Constrained searches have a higher + result limit. + + + + + \ No newline at end of file diff --git a/gem2caom2/tests/data/programs/GS-2021A-Q-777.xml b/gem2caom2/tests/data/programs/GS-2021A-Q-777.xml new file mode 100644 index 0000000..d34280b --- /dev/null +++ b/gem2caom2/tests/data/programs/GS-2021A-Q-777.xml @@ -0,0 +1,27 @@ + + + + + + + +Detail for Program: GS-2021A-Q-777 + + + +

Program: GS-2021A-Q-777

+ + + + + +
Title:Hidden headers test
PI:Fredrik Rantakyro
Co-I(s):
+

Abstract

+
+No abstract +
+ + + + + \ No newline at end of file diff --git a/gem2caom2/tests/gem_mocks.py b/gem2caom2/tests/gem_mocks.py index f6c4ecd..8cc4147 100644 --- a/gem2caom2/tests/gem_mocks.py +++ b/gem2caom2/tests/gem_mocks.py @@ -86,8 +86,9 @@ from caom2pipe import astro_composable as ac from caom2pipe import manage_composable as mc from caom2pipe.run_composable import set_logging +from caom2utils.data_util import get_local_file_headers -from gem2caom2 import data_source, obs_file_relationship, builder, svofps +from gem2caom2 import data_source, obs_file_relationship, svofps from gem2caom2 import gemini_metadata, fits2caom2_augmentation from gem2caom2.gem_name import GemName from gem2caom2.util import Inst @@ -622,10 +623,10 @@ def mock_get_file_info(file_id): def mock_retrieve_json(source_name, ign1, ign2): - return mock_get_obs_metadata(source_name) + return mock_get_obs_metadata(source_name, ign1, ign2) -def mock_get_obs_metadata(file_id): +def mock_get_obs_metadata(file_id, ignore1, ignore2): file_id = obs_file_relationship.remove_extensions(file_id.split('/')[-1]) try: fname = f'{TEST_DATA_DIR}/json/{file_id}.json' @@ -652,10 +653,14 @@ def mock_get_obs_metadata(file_id): logging.error(tb) +def mock_get_obs_metadata_37(file_id): + return mock_get_obs_metadata(file_id, None, None) + + def mock_get_data_label(uri): ignore_scheme, ignore_collection, f_name = mc.decompose_uri(uri) file_id = GemName.remove_extensions(f_name) - temp = mock_get_obs_metadata(file_id) + temp = mock_get_obs_metadata(file_id, None, None) result = None for ii in temp: y = obs_file_relationship.remove_extensions(ii.get('filename')) @@ -788,6 +793,17 @@ def mock_query_endpoint_4(url, timeout=-1): return result +def mock_query_endpoint_5(url, timeout=-1): + # returns response.text + result = Object() + result.text = 'x' + + if url.startswith('https://archive.gemini.edu/diskfiles/entrytimedaterange=2024-08-28T17:05:00'): + with open(f'{TEST_DATA_DIR}/diskfiles_mock/query_limit.html') as f: + result.text = f.read() + return result + + def mock_session_get_not_found(url): # returns json via response.text, depending on url result = Object() @@ -856,18 +872,24 @@ def mock_repo_update(ignore1): def compare(expected_fqn, actual_fqn, observation): - try: - expected = mc.read_obs_from_file(expected_fqn) - compare_result = get_differences(expected, observation) - except Exception as e: - mc.write_obs_to_file(observation, actual_fqn) - assert False, f'{e}' - if compare_result is not None: - mc.write_obs_to_file(observation, actual_fqn) - compare_text = '\n'.join([r for r in compare_result]) - raise AssertionError( - f'Differences found in observation {expected.observation_id}\n{compare_text}.\nCheck {actual_fqn}' - ) + if observation: + if os.path.exists(expected_fqn): + expected = mc.read_obs_from_file(expected_fqn) + try: + compare_result = get_differences(expected, observation) + except Exception as e: + mc.write_obs_to_file(observation, actual_fqn) + assert False, f'{e}' + if compare_result is not None: + mc.write_obs_to_file(observation, actual_fqn) + compare_text = '\n'.join([r for r in compare_result]) + raise AssertionError( + f'Differences found in observation {expected.observation_id}\n{compare_text}.\nCheck {actual_fqn}' + ) + else: + raise AssertionError(f'No expected observation here {expected_fqn}. See actual here {actual_fqn}') + else: + raise AssertionError(f'No observation created for comparison with {expected_fqn}') def _query_mock_none(ignore1, ignore2): @@ -948,10 +970,21 @@ def _mock_retrieve_headers(mock_name, ign1, ign2): return _mock_headers(mock_name, mock_name) +def _mock_retrieve_headers_37(mock_name, ign1, ign2, ignore3): + return _mock_headers(mock_name, mock_name) + + def _mock_get_head(file_id): return _mock_headers(file_id, file_id) +from caom2 import Algorithm, SimpleObservation + + +def read_mock_37(collection, obs_id): + return SimpleObservation(collection='OMM', observation_id='test_obs_id', algorithm=Algorithm(name='exposure')) + + class MockFileReader(gemini_metadata.GeminiFileMetadataReader): def __init__(self, pf_mock, filter_mock): @@ -967,6 +1000,7 @@ def _run_test_common( get_pi_mock, svofps_mock, pf_mock, + header_mock, json_mock, file_type_mock, test_set, @@ -977,66 +1011,66 @@ def _run_test_common( warnings.simplefilter('ignore', AstropyWarning) get_pi_mock.side_effect = mock_get_pi_metadata svofps_mock.side_effect = mock_get_votable - pf_mock.get.side_effect = mock_get_data_label + pf_mock.return_value.get.side_effect = mock_get_data_label json_mock.side_effect = mock_get_obs_metadata file_type_mock.return_value = 'application/fits' - orig_cwd = os.getcwd() - try: - os.chdir(tmp_path) - test_config.task_types = [mc.TaskType.SCRAPE] - test_config.use_local_files = True - test_config.data_sources = data_sources - test_config.change_working_directory(tmp_path.as_posix()) - test_config.proxy_file_name = 'test_proxy.pem' - test_config.logging_level = 'ERROR' - test_config.write_to_file(test_config) - set_logging(test_config) - - with open(test_config.proxy_fqn, 'w') as f: - f.write('test content') - - observation = None - in_fqn = expected_fqn.replace('.expected.', '.in.') - if os.path.exists(in_fqn): - observation = mc.read_obs_from_file(in_fqn) - actual_fqn = expected_fqn.replace('expected', 'actual') - if os.path.exists(actual_fqn): - os.unlink(actual_fqn) - - test_observable = mc.Observable(test_config) - for entry in test_set: - filter_cache = svofps.FilterMetadataCache(svofps_mock) - metadata_reader = MockFileReader(pf_mock, filter_cache) - test_metadata = gemini_metadata.GeminiMetadataLookup( - metadata_reader - ) - test_builder = builder.GemObsIDBuilder( - test_config, metadata_reader, test_metadata - ) - storage_name = test_builder.build(entry) - client_mock = Mock() - kwargs = { - 'storage_name': storage_name, - 'metadata_reader': metadata_reader, - 'clients': client_mock, - 'observable': test_observable, - 'config': test_config, - } - try: - observation = fits2caom2_augmentation.visit(observation, **kwargs) - except mc.CadcException as e: - if storage_name.file_name in ['N20220915S0113.fits', 'S20230301S0170.fits']: - assert ( - test_observable.rejected.is_mystery_value(storage_name.file_name) - ), 'expect rejected mystery value record' - raise e - - compare(expected_fqn, actual_fqn, observation) - - if observation.observation_id in ['GS-2022B-Q-235-137-045', 'GS-2023A-LP-103-23-017']: - assert test_observable.rejected.is_bad_metadata(storage_name.file_name), 'expect rejected record' - else: - assert not test_observable.rejected.is_bad_metadata(storage_name.file_name), 'expect no rejected record' - finally: - os.chdir(orig_cwd) + test_config.task_types = [mc.TaskType.SCRAPE] + test_config.use_local_files = True + test_config.log_to_file = True # set the xml creation location + test_config.data_sources = data_sources + test_config.change_working_directory(tmp_path.as_posix()) + test_config.proxy_file_name = 'test_proxy.pem' + test_config.logging_level = 'ERROR' + test_config.write_to_file(test_config) + set_logging(test_config) + + with open(test_config.proxy_fqn, 'w') as f: + f.write('test content') + + observation = None + in_fqn = expected_fqn.replace('.expected.', '.in.') + if os.path.exists(in_fqn): + observation = mc.read_obs_from_file(in_fqn) + actual_fqn = expected_fqn.replace('expected', 'actual') + if os.path.exists(actual_fqn): + os.unlink(actual_fqn) + + test_reporter = mc.ExecutionReporter2(test_config) + filter_cache = svofps.FilterMetadataCache(svofps_mock) + clients_mock = Mock() + for entry in test_set: + storage_name = GemName(entry, filter_cache) + test_subject = gemini_metadata.GeminiMetaVisitRunnerMeta( + clients_mock, test_config, [fits2caom2_augmentation], test_reporter + ) + + def _read_header_mock(ignore1, ignore2, ignore3, ignore4): + if 'S20210518S0022' in entry: + return [] + else: + return get_local_file_headers(entry) + header_mock.side_effect = _read_header_mock + + clients_mock.metadata_client.read.return_value = observation + + context = {'storage_name': storage_name} + try: + test_subject.execute(context) + except mc.CadcException as e: + if storage_name.file_name in ['N20220915S0113.fits', 'S20230301S0170.fits']: + assert ( + test_reporter._observable.rejected.is_mystery_value(storage_name.file_name) + ), 'expect rejected mystery value record' + raise e + + compare(expected_fqn, actual_fqn, test_subject._observation) + + if test_subject._observation.observation_id in ['GS-2022B-Q-235-137-045', 'GS-2023A-LP-103-23-017']: + assert ( + test_reporter._observable.rejected.is_bad_metadata(storage_name.file_name) + ), 'expect rejected record' + else: + assert ( + not test_reporter._observable.rejected.is_bad_metadata(storage_name.file_name) + ), 'expect no rejected record' diff --git a/gem2caom2/tests/test_builder.py b/gem2caom2/tests/test_builder.py index a3646f4..5e2ea58 100644 --- a/gem2caom2/tests/test_builder.py +++ b/gem2caom2/tests/test_builder.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # *********************************************************************** # ****************** CANADIAN ASTRONOMY DATA CENTRE ******************* # ************* CENTRE CANADIEN DE DONNÉES ASTRONOMIQUES ************** @@ -80,7 +79,7 @@ @patch('gem2caom2.gemini_metadata.GeminiMetadataReader._retrieve_headers') @patch('gem2caom2.gemini_metadata.GeminiMetadataReader._retrieve_json') def test_builder(file_info_mock, header_mock, test_config): - file_info_mock.side_effect = gem_mocks.mock_get_obs_metadata + file_info_mock.side_effect = gem_mocks.mock_get_obs_metadata_37 test_config.working_directory = '/test_files' test_config.proxy_fqn = os.path.join( diff --git a/gem2caom2/tests/test_caom_gen_visit.py b/gem2caom2/tests/test_caom_gen_visit.py index ad9cbeb..b17c72d 100644 --- a/gem2caom2/tests/test_caom_gen_visit.py +++ b/gem2caom2/tests/test_caom_gen_visit.py @@ -71,11 +71,15 @@ import pytest +from astropy.utils.exceptions import AstropyWarning from astropy.wcs import FITSFixedWarning +from caom2utils import data_util +from caom2pipe.manage_composable import CadcException, ExecutionReporter2, read_obs_from_file, TaskType from gem2caom2.util import Inst -from gem2caom2 import obs_file_relationship +from gem2caom2 import fits2caom2_augmentation, gemini_metadata, obs_file_relationship, svofps +from gem2caom2.gem_name import GemName -from unittest.mock import patch +from unittest.mock import Mock, patch import gem_mocks @@ -124,37 +128,91 @@ def pytest_generate_tests(metafunc): @patch('caom2utils.data_util.get_file_type') -@patch('gem2caom2.gemini_metadata.AbstractGeminiMetadataReader._retrieve_json') +@patch('gem2caom2.gemini_metadata.retrieve_headers') +@patch('gem2caom2.gemini_metadata.retrieve_json') @patch('caom2pipe.astro_composable.get_vo_table_session') @patch('gem2caom2.program_metadata.get_pi_metadata') -@patch('gem2caom2.gemini_metadata.ProvenanceFinder') +@patch('gem2caom2.main_app.ProvenanceFinder') def test_visitor( pf_mock, get_pi_mock, svofps_mock, json_mock, + header_mock, file_type_mock, test_name, test_config, tmp_path, + change_test_dir, ): warnings.simplefilter('ignore', category=FITSFixedWarning) - test_file_id = obs_file_relationship.remove_extensions( - os.path.basename(test_name) - ) + warnings.simplefilter('ignore', AstropyWarning) + test_file_id = obs_file_relationship.remove_extensions(os.path.basename(test_name)) + get_pi_mock.side_effect = gem_mocks.mock_get_pi_metadata + svofps_mock.side_effect = gem_mocks.mock_get_votable + pf_mock.return_value.get.side_effect = gem_mocks.mock_get_data_label + json_mock.side_effect = gem_mocks.mock_get_obs_metadata + file_type_mock.return_value = 'application/fits' + + test_config.task_types = [TaskType.SCRAPE] + test_config.use_local_files = True + test_config.log_to_file = True + test_config.data_sources = [tmp_path.as_posix()] + test_config.change_working_directory(tmp_path.as_posix()) + test_config.proxy_file_name = 'test_proxy.pem' + test_config.logging_level = 'ERROR' + test_config.write_to_file(test_config) + gem_mocks.set_logging(test_config) + + with open(test_config.proxy_fqn, 'w') as f: + f.write('test content') + expected_fqn = f'{os.path.dirname(test_name)}/{test_file_id}.expected.xml' - gem_mocks._run_test_common( - data_sources=[os.path.dirname(test_name)], - get_pi_mock=get_pi_mock, - svofps_mock=svofps_mock, - pf_mock=pf_mock, - json_mock=json_mock, - file_type_mock=file_type_mock, - test_set=[test_name], - expected_fqn=expected_fqn, - test_config=test_config, - tmp_path=tmp_path, + in_fqn = expected_fqn.replace('.expected.', '.in.') + + clients_mock = Mock() + def _mock_repo_read(collection, obs_id): + input_observation = None + if os.path.exists(in_fqn): + input_observation = read_obs_from_file(in_fqn) + return input_observation + clients_mock.metadata_client.read.side_effect = _mock_repo_read + + def _read_header_mock(ignore1, ignore2, ignore3, ignore4): + return data_util.get_local_file_headers(test_name) + header_mock.side_effect = _read_header_mock + + actual_fqn = expected_fqn.replace('expected', 'actual') + if os.path.exists(actual_fqn): + os.unlink(actual_fqn) + + test_reporter = ExecutionReporter2(test_config) + filter_cache = svofps.FilterMetadataCache(svofps_mock) + test_subject = gemini_metadata.GeminiMetaVisitRunnerMeta( + clients_mock, test_config, [fits2caom2_augmentation], test_reporter ) + storage_name = GemName(test_name, filter_cache) + context = {'storage_name': storage_name} + try: + test_subject.execute(context) + except CadcException as e: + if storage_name.file_name in ['N20220915S0113.fits', 'S20230301S0170.fits']: + assert ( + test_reporter._observable.rejected.is_mystery_value(storage_name.file_name) + ), 'expect rejected mystery value record' + else: + raise e + + gem_mocks.compare(expected_fqn, actual_fqn, test_subject._observation) + + if test_subject._observation.observation_id in ['GS-2022B-Q-235-137-045', 'GS-2023A-LP-103-23-017']: + assert ( + test_reporter._observable.rejected.is_bad_metadata(storage_name.file_name) + ), 'expect rejected record' + else: + assert ( + not test_reporter._observable.rejected.is_bad_metadata(storage_name.file_name) + ), 'expect no rejected record' def _get_inst_name(inst): diff --git a/gem2caom2/tests/test_composable.py b/gem2caom2/tests/test_composable.py index 295edc8..911e4fb 100644 --- a/gem2caom2/tests/test_composable.py +++ b/gem2caom2/tests/test_composable.py @@ -76,7 +76,7 @@ from collections import deque from datetime import datetime, timedelta, timezone from traceback import format_exc -from unittest.mock import call, patch, Mock, PropertyMock +from unittest.mock import ANY, call, patch, Mock, PropertyMock import gem_mocks from cadcdata import FileInfo @@ -532,7 +532,7 @@ def _mock_dir_list(arg1, output_file='', data_only=True, response_format='arg4') ), 'put call count, no previews because it is just a STORE task' put_calls = [ call( - f'{tmp_path.as_posix()}/GS-2005B-SV-301-16-005', + f'{tmp_path.as_posix()}/S20050825S0143', f'{test_config.scheme}:{test_config.collection}/S20050825S0143.fits', ), ] @@ -590,13 +590,11 @@ def test_run_is_valid_fails(cap_mock, summary_mock, test_config, tmp_path): @patch('gem2caom2.composable.GemClientCollection') @patch('gem2caom2.gemini_metadata.retrieve_headers') @patch('gem2caom2.gemini_metadata.retrieve_json') -@patch('caom2pipe.execute_composable.OrganizeExecutes.do_one') @patch('gem2caom2.data_source.query_endpoint_session') @patch('caom2pipe.client_composable.query_tap_client') def test_run_incremental_diskfiles( tap_mock, query_mock, - run_mock, json_mock, header_mock, clients_mock, @@ -607,7 +605,8 @@ def test_run_incremental_diskfiles( query_mock.side_effect = gem_mocks.mock_query_endpoint_4 tap_mock.side_effect = gem_mocks.mock_query_tap json_mock.side_effect = gem_mocks.mock_retrieve_json - header_mock.side_effect = gem_mocks._mock_retrieve_headers + header_mock.side_effect = gem_mocks._mock_retrieve_headers_37 + clients_mock.return_value.metadata_client.read.side_effect = gem_mocks.read_mock_37 test_config.change_working_directory(tmp_path) test_config.proxy_file_name = 'testproxy.pem' @@ -623,17 +622,73 @@ def test_run_incremental_diskfiles( fqn=test_config.state_fqn, ) - run_mock.return_value = (0, None) + test_result = composable._run_incremental_diskfiles() + assert test_result is not None, 'expect result' + assert test_result == -1, 'expect failure, no metadata mocking results set up' + assert not clients_mock.return_value.data_client.put.called, 'data put called' + # 16 is the number of records processed + assert clients_mock.return_value.metadata_client.read.called, 'meta read called' + assert clients_mock.return_value.metadata_client.read.call_count == 16, 'meta read count' + assert not clients_mock.return_value.metadata_client.update.called, 'meta update called' + assert not tap_mock.called, 'tap called' + assert query_mock.called, 'query endpoint session called' + # https://archive.gemini.edu/diskfiles/entrytimedaterange=2024-10-20T20:03:00--2024-11-01T23:03:00 + assert query_mock.call_count == 1, 'query endpoint session count' + assert json_mock.called, 'json mock called' + assert json_mock.call_count == 16, 'json mock count' + assert header_mock.called, 'header mock called' + assert header_mock.call_count == 16, 'header mock count' - composable._run_incremental_diskfiles() - assert run_mock.called, 'run_mock should have been called' - args, kwargs = run_mock.call_args - test_storage = args[0] - assert isinstance(test_storage, gem_name.GemName), type(test_storage) - assert test_storage.obs_id == 'test_data_label', 'wrong obs id' - test_fid = 'S20241030S0203' - assert test_storage.file_name == f'{test_fid}.fits', 'wrong file_name' - assert test_storage.file_id == f'{test_fid}', 'wrong file_id' + + + +@patch('gem2caom2.gemini_metadata.GeminiOrganizeExecutesRunnerMeta.do_one') +@patch('gem2caom2.composable.GemClientCollection') +@patch('gem2caom2.data_source.query_endpoint_session') +@patch('caom2pipe.client_composable.query_tap_client') +def test_run_incremental_diskfiles_limit( + tap_mock, + query_mock, + clients_mock, + do_one_mock, + test_config, + tmp_path, + change_test_dir, +): + query_mock.side_effect = gem_mocks.mock_query_endpoint_5 + tap_mock.side_effect = gem_mocks.mock_query_tap + clients_mock.return_value.metadata_client.read.side_effect = gem_mocks.read_mock_37 + do_one_mock.return_value = (0, None) + + test_config.change_working_directory(tmp_path) + test_config.proxy_file_name = 'testproxy.pem' + test_config.task_types = [TaskType.INGEST] + test_config.interval = 60 + test_config.logging_level = 'WARNING' + Config.write_to_file(test_config) + with open(test_config.proxy_fqn, 'w') as f: + f.write('test content') + + _write_state( + prior_timestamp='2024-08-28 17:05:00.000000', + end_timestamp=datetime(year=2024, month=8, day=28, hour=18, minute=5, second=0), + fqn=test_config.state_fqn, + ) + + test_result = composable._run_incremental_diskfiles() + assert test_result is not None, 'expect result' + assert test_result == 0, 'expect success' + assert query_mock.called, 'query endpoint session called' + # https://archive.gemini.edu/diskfiles/entrytimedaterange=2024-10-20T20:03:00--2024-11-01T23:03:00 + assert query_mock.call_count == 2, 'query endpoint session count' + query_mock.assert_has_calls([ + call('https://archive.gemini.edu/diskfiles/entrytimedaterange=2024-08-28T17:05:00--2024-08-28T18:05:00', ANY), + call('https://archive.gemini.edu/diskfiles/entrytimedaterange=2024-08-28T17:07:32--2024-08-28T18:05:00', ANY), + ]) + assert not clients_mock.return_value.data_client.put.called, 'data put called' + assert not clients_mock.return_value.metadata_client.read.called, 'meta read called' + assert not clients_mock.return_value.metadata_client.update.called, 'meta update called' + assert not tap_mock.called, 'tap called' def _write_state(prior_timestamp=None, end_timestamp=None, fqn=STATE_FILE): diff --git a/gem2caom2/tests/test_data_source.py b/gem2caom2/tests/test_data_source.py index 75131ca..ba78a52 100644 --- a/gem2caom2/tests/test_data_source.py +++ b/gem2caom2/tests/test_data_source.py @@ -68,7 +68,8 @@ from datetime import datetime from mock import call, Mock, patch -from gem2caom2 import data_source, gemini_metadata +from gem2caom2 import data_source +from gem2caom2.gem_name import GemName import gem_mocks @@ -139,14 +140,8 @@ def test_diskfiles_incremental_source(query_mock, test_config): # get results query_mock.side_effect = gem_mocks.mock_query_endpoint_4 - test_data_client = Mock() test_http_session = Mock() - test_provenance_finder = Mock() - test_filter_cache = Mock() - test_reader = gemini_metadata.FileInfoBeforeJsonReader( - test_data_client, test_http_session, test_provenance_finder, test_filter_cache - ) - test_subject = data_source.IncrementalSourceDiskfiles(test_config, reader=test_reader) + test_subject = data_source.IncrementalSourceDiskfiles(test_config, test_http_session, GemName, Mock()) assert test_subject is not None, 'expect construction success' test_reporter = Mock() test_subject.reporter = test_reporter @@ -158,10 +153,39 @@ def test_diskfiles_incremental_source(query_mock, test_config): assert test_result is not None, 'expect a result' assert len(test_result) == 16, 'wrong number of results' test_first_entry = test_result.popleft() - assert test_first_entry.entry_name == 'S20241030S0188.fits', 'wrong first file' + assert test_first_entry.storage_entry.file_name == 'S20241030S0188.fits', 'wrong first file' assert test_first_entry.entry_dt == datetime(2024, 10, 30, 10, 51, 37, 360130), 'wrong fits datetime' test_last_entry = test_result.pop() - assert test_last_entry.entry_name == 'S20241030S0203.fits', 'wrong 2nd file' + assert test_last_entry.storage_entry.file_name == 'S20241030S0203.fits', 'wrong 2nd file' + assert test_last_entry.entry_dt == datetime(2024, 10, 30, 10, 54, 45, 941860), 'wrong last datetime' + assert test_reporter.capture_todo.called, 'capture_todo' + assert test_reporter.capture_todo.call_count == 1, 'wrong number of capture_todo calls' + test_reporter.capture_todo.assert_called_with(16, 0, 0) + + +@patch('gem2caom2.data_source.query_endpoint_session') +def test_diskfiles_incremental_source_limit(query_mock, test_config): + # https://archive.gemini.edu/diskfiles/entrytimedaterange=-- + # get results + query_mock.side_effect = gem_mocks.mock_query_endpoint_5 + + test_http_session = Mock() + test_subject = data_source.IncrementalSourceDiskfiles(test_config, test_http_session, GemName, Mock()) + assert test_subject is not None, 'expect construction success' + test_reporter = Mock() + test_subject.reporter = test_reporter + + prev_exec_time = datetime(year=2021, month=1, day=1, hour=20, minute=3, second=0) + exec_time = datetime(year=2021, month=1, day=1, hour=22, minute=13, second=0) + + test_result = test_subject.get_time_box_work(prev_exec_time, exec_time) + assert test_result is not None, 'expect a result' + assert len(test_result) == 16, 'wrong number of results' + test_first_entry = test_result.popleft() + assert test_first_entry.storage_entry.file_name == 'S20241030S0188.fits', 'wrong first file' + assert test_first_entry.entry_dt == datetime(2024, 10, 30, 10, 51, 37, 360130), 'wrong fits datetime' + test_last_entry = test_result.pop() + assert test_last_entry.storage_entry.file_name == 'S20241030S0203.fits', 'wrong 2nd file' assert test_last_entry.entry_dt == datetime(2024, 10, 30, 10, 54, 45, 941860), 'wrong last datetime' assert test_reporter.capture_todo.called, 'capture_todo' assert test_reporter.capture_todo.call_count == 1, 'wrong number of capture_todo calls' diff --git a/gem2caom2/tests/test_gemini_metadata.py b/gem2caom2/tests/test_gemini_metadata.py index 85a758e..fcfcb14 100644 --- a/gem2caom2/tests/test_gemini_metadata.py +++ b/gem2caom2/tests/test_gemini_metadata.py @@ -80,10 +80,10 @@ import gem_mocks -@patch('gem2caom2.gemini_metadata.retrieve_headers') +@patch('gem2caom2.gemini_metadata.retrieve_gemini_headers') @patch('gem2caom2.gemini_metadata.GeminiMetadataReader._retrieve_json') def test_set(retrieve_json_mock, retrieve_headers_mock): - retrieve_json_mock.side_effect = gem_mocks.mock_get_obs_metadata + retrieve_json_mock.side_effect = gem_mocks.mock_get_obs_metadata_37 test_f_name = 'N20030104S0065.fits' test_obs_id = 'GN-CAL20030104-14-001' retrieve_headers_mock.side_effect = gem_mocks._mock_retrieve_headers @@ -140,9 +140,7 @@ def _local_mock(ignore): else: test_config.task_types = [mc.TaskType.SCRAPE] - test_subject = gemini_metadata.ProvenanceFinder( - test_config, Mock(), Mock() - ) + test_subject = gemini_metadata.ProvenanceFinder(Mock(), test_config) assert test_subject is not None, ( f'ctor does not work:: ' f'local {test_use_local}, ' @@ -169,10 +167,8 @@ def test_header_not_at_cadc(retrieve_json_mock, clients_mock, test_config): # the file is private, re-ingestion fails to find headers at CADC, needs to go back to archive.gemini.edu test_f_name = 'N20220314S0229.fits.bz2' test_obs_id = 'GN-CAL20220314-18-083' - retrieve_json_mock.side_effect = gem_mocks.mock_get_obs_metadata - test_provenance_finder = gemini_metadata.ProvenanceFinder( - test_config, clients_mock.return_value.query_client, Mock() - ) + retrieve_json_mock.side_effect = gem_mocks.mock_get_obs_metadata_37 + test_provenance_finder = gemini_metadata.ProvenanceFinder(clients_mock, test_config) clients_mock.return_value.data_client.get_head.side_effect = exceptions.UnexpectedException test_session_mock = Mock() test_session_mock.get.side_effect = gem_mocks.mock_fullheader_endpoint diff --git a/gem2caom2/tests/test_meta_visit_edge_cases.py b/gem2caom2/tests/test_meta_visit_edge_cases.py index 04e634e..8561c2f 100644 --- a/gem2caom2/tests/test_meta_visit_edge_cases.py +++ b/gem2caom2/tests/test_meta_visit_edge_cases.py @@ -72,7 +72,7 @@ from cadcutils import exceptions from caom2pipe import astro_composable as ac from caom2pipe import manage_composable as mc -from gem2caom2 import svofps, gemini_metadata, builder +from gem2caom2 import svofps, gemini_metadata, gem_name from gem2caom2 import fits2caom2_augmentation from mock import ANY, patch, Mock @@ -80,18 +80,21 @@ @patch('caom2utils.data_util.get_file_type') -@patch('gem2caom2.gemini_metadata.AbstractGeminiMetadataReader._retrieve_json') +@patch('gem2caom2.gemini_metadata.retrieve_headers') +@patch('gem2caom2.gemini_metadata.retrieve_json') @patch('caom2pipe.astro_composable.get_vo_table_session') @patch('gem2caom2.program_metadata.get_pi_metadata') -@patch('gem2caom2.gemini_metadata.ProvenanceFinder') +@patch('gem2caom2.main_app.ProvenanceFinder') def test_broken_obs( pf_mock, get_pi_mock, svofps_mock, json_mock, + header_mock, file_type_mock, test_config, tmp_path, + change_test_dir, ): # the observation is broken, test that retrieval will handle that test_f_name = 'gS20171114S0185_bias.fits.header' @@ -106,6 +109,7 @@ def test_broken_obs( get_pi_mock=get_pi_mock, svofps_mock=svofps_mock, pf_mock=pf_mock, + header_mock=header_mock, json_mock=json_mock, file_type_mock=file_type_mock, test_set=[test_fqn], @@ -119,15 +123,17 @@ def test_broken_obs( 'gem2caom2.gemini_metadata.GeminiFileMetadataReader._retrieve_file_info' ) @patch('caom2utils.data_util.get_file_type') -@patch('gem2caom2.gemini_metadata.AbstractGeminiMetadataReader._retrieve_json') +@patch('gem2caom2.gemini_metadata.retrieve_headers') +@patch('gem2caom2.gemini_metadata.retrieve_json') @patch('caom2pipe.astro_composable.get_vo_table_session') @patch('gem2caom2.program_metadata.get_pi_metadata') -@patch('gem2caom2.gemini_metadata.ProvenanceFinder') +@patch('gem2caom2.main_app.ProvenanceFinder') def test_unauthorized_at_gemini( pf_mock, get_pi_mock, svofps_mock, json_mock, + header_mock, file_type_mock, file_info_mock, test_config, @@ -149,6 +155,7 @@ def test_unauthorized_at_gemini( svofps_mock=svofps_mock, pf_mock=pf_mock, json_mock=json_mock, + header_mock=header_mock, file_type_mock=file_type_mock, test_set=[test_fqn], expected_fqn=expected_fqn, @@ -159,8 +166,7 @@ def test_unauthorized_at_gemini( @patch('gem2caom2.gemini_metadata.retrieve_headers') @patch('caom2utils.data_util.get_file_type') -@patch('gem2caom2.gemini_metadata.AbstractGeminiMetadataReader._retrieve_json') -@patch('caom2pipe.reader_composable.StorageClientReader.set_headers') +@patch('gem2caom2.gemini_metadata.retrieve_json') @patch('caom2pipe.astro_composable.get_vo_table_session') @patch('gem2caom2.program_metadata.get_pi_metadata') @patch('gem2caom2.gemini_metadata.ProvenanceFinder') @@ -168,7 +174,6 @@ def test_going_public( pf_mock, get_pi_mock, svofps_mock, - headers_mock, json_mock, file_type_mock, remote_headers_mock, @@ -189,7 +194,6 @@ def test_going_public( get_pi_mock.side_effect = gem_mocks.mock_get_pi_metadata svofps_mock.side_effect = gem_mocks.mock_get_votable - headers_mock.side_effect = exceptions.UnexpectedException pf_mock.get.side_effect = gem_mocks.mock_get_data_label json_mock.side_effect = gem_mocks.mock_get_obs_metadata file_type_mock.return_value = 'application/fits' @@ -199,6 +203,7 @@ def test_going_public( test_config.data_sources = [f'{gem_mocks.TEST_DATA_DIR}/broken_files'] test_config.change_working_directory(tmp_path.as_posix()) test_config.proxy_file_name = 'test_proxy.pem' + test_config.log_to_file = True with open(test_config.proxy_fqn, 'w') as f: f.write('test content') @@ -210,25 +215,15 @@ def test_going_public( unlink(actual_fqn) filter_cache = svofps.FilterMetadataCache(svofps_mock) - metadata_reader = gemini_metadata.GeminiStorageClientReader( - Mock(), Mock(), pf_mock, filter_cache - ) - test_metadata = gemini_metadata.GeminiMetadataLookup(metadata_reader) - test_builder = builder.GemObsIDBuilder( - test_config, metadata_reader, test_metadata - ) - storage_name = test_builder.build(mock_return_fqn) + storage_name = gem_name.GemName(mock_return_fqn, filter_cache) client_mock = Mock() - client_mock.metadata_client = headers_mock - kwargs = { - 'storage_name': storage_name, - 'metadata_reader': metadata_reader, - 'clients': client_mock, - 'config': test_config, - } - ignore = fits2caom2_augmentation.visit(observation, **kwargs) - + client_mock.data_client.get_head.side_effect = exceptions.UnexpectedException + client_mock.metadata_client.read.return_value = observation + test_reporter = mc.ExecutionReporter2(test_config) + test_subject = gemini_metadata.GeminiMetaVisitRunnerMeta( + client_mock, test_config, [fits2caom2_augmentation], test_reporter + ) + context = {'storage_name': storage_name} + test_subject.execute(context) assert remote_headers_mock.called, 'expect remote header retrieval' - remote_headers_mock.assert_called_with( - 'N20150929S0013.fits.header', ANY, ANY - ), 'wrong remote header args' + remote_headers_mock.assert_called_with('N20150929S0013', ANY, ANY, ANY), 'wrong remote header args' diff --git a/gem2caom2/tests/test_multi_plane.py b/gem2caom2/tests/test_multi_plane.py index dd2758d..2063cb3 100644 --- a/gem2caom2/tests/test_multi_plane.py +++ b/gem2caom2/tests/test_multi_plane.py @@ -68,8 +68,16 @@ import os import pytest +import warnings -from unittest.mock import patch +from astropy.utils.exceptions import AstropyWarning +from astropy.wcs import FITSFixedWarning +from caom2utils import data_util +from caom2pipe.manage_composable import CadcException, ExecutionReporter2, read_obs_from_file, TaskType +from gem2caom2 import fits2caom2_augmentation, gemini_metadata, obs_file_relationship, svofps +from gem2caom2.gem_name import GemName + +from unittest.mock import Mock, patch import gem_mocks @@ -122,7 +130,8 @@ def pytest_generate_tests(metafunc): @patch('caom2utils.data_util.get_file_type') -@patch('gem2caom2.gemini_metadata.AbstractGeminiMetadataReader._retrieve_json') +@patch('gem2caom2.gemini_metadata.retrieve_headers') +@patch('gem2caom2.gemini_metadata.retrieve_json') @patch('caom2pipe.astro_composable.get_vo_table_session') @patch('gem2caom2.gemini_metadata.ProvenanceFinder') @patch('gem2caom2.program_metadata.get_pi_metadata') @@ -131,10 +140,12 @@ def test_visitor( pf_mock, svofps_mock, json_mock, + header_mock, file_type_mock, test_name, test_config, tmp_path, + change_test_dir, ): expected_fqn = ( f'{gem_mocks.TEST_DATA_DIR}/multi_plane/' f'{test_name}.expected.xml' @@ -144,15 +155,72 @@ def test_visitor( test_set.append( f'{gem_mocks.TEST_DATA_DIR}/multi_plane/{f_name}.fits.header' ) - gem_mocks._run_test_common( - data_sources=[os.path.dirname(test_name)], - get_pi_mock=get_pi_mock, - svofps_mock=svofps_mock, - pf_mock=pf_mock, - json_mock=json_mock, - file_type_mock=file_type_mock, - test_set=test_set, - expected_fqn=expected_fqn, - test_config=test_config, - tmp_path=tmp_path, + warnings.simplefilter('ignore', category=FITSFixedWarning) + warnings.simplefilter('ignore', AstropyWarning) + get_pi_mock.side_effect = gem_mocks.mock_get_pi_metadata + svofps_mock.side_effect = gem_mocks.mock_get_votable + pf_mock.return_value.get.side_effect = gem_mocks.mock_get_data_label + json_mock.side_effect = gem_mocks.mock_get_obs_metadata + file_type_mock.return_value = 'application/fits' + + test_config.task_types = [TaskType.SCRAPE] + test_config.use_local_files = True + test_config.log_to_file = True + test_config.data_sources = [tmp_path.as_posix()] + test_config.change_working_directory(tmp_path.as_posix()) + test_config.proxy_file_name = 'test_proxy.pem' + test_config.logging_level = 'ERROR' + test_config.write_to_file(test_config) + gem_mocks.set_logging(test_config) + + with open(test_config.proxy_fqn, 'w') as f: + f.write('test content') + + in_fqn = expected_fqn.replace('.expected.', '.in.') + input_observation = None + if os.path.exists(in_fqn): + input_observation = read_obs_from_file(in_fqn) + + clients_mock = Mock() + + actual_fqn = expected_fqn.replace('expected', 'actual') + if os.path.exists(actual_fqn): + os.unlink(actual_fqn) + + test_reporter = ExecutionReporter2(test_config) + filter_cache = svofps.FilterMetadataCache(svofps_mock) + test_subject = gemini_metadata.GeminiMetaVisitRunnerMeta( + clients_mock, test_config, [fits2caom2_augmentation], test_reporter ) + test_subject._observation = input_observation + for entry in test_set: + + def _mock_repo_read(collection, obs_id): + return test_subject._observation + clients_mock.metadata_client.read.side_effect = _mock_repo_read + + def _read_header_mock(ignore1, ignore2, ignore3, ignore4): + return data_util.get_local_file_headers(entry) + header_mock.side_effect = _read_header_mock + + storage_name = GemName(entry, filter_cache) + context = {'storage_name': storage_name} + try: + test_subject.execute(context) + except CadcException as e: + if storage_name.file_name in ['N20220915S0113.fits', 'S20230301S0170.fits']: + assert ( + test_reporter._observable.rejected.is_mystery_value(storage_name.file_name) + ), 'expect rejected mystery value record' + raise e + + gem_mocks.compare(expected_fqn, actual_fqn, test_subject._observation) + + if test_subject._observation.observation_id in ['GS-2022B-Q-235-137-045', 'GS-2023A-LP-103-23-017']: + assert ( + test_reporter._observable.rejected.is_bad_metadata(storage_name.file_name) + ), 'expect rejected record' + else: + assert ( + not test_reporter._observable.rejected.is_bad_metadata(storage_name.file_name) + ), 'expect no rejected record' diff --git a/gem2caom2/tests/test_visitors.py b/gem2caom2/tests/test_visitors.py index 93390fb..f42fb72 100644 --- a/gem2caom2/tests/test_visitors.py +++ b/gem2caom2/tests/test_visitors.py @@ -193,10 +193,10 @@ def test_preview_augment_unknown_no_preview(test_data_dir, test_config): @patch('caom2utils.data_util.get_file_type') -@patch('gem2caom2.gemini_metadata.GeminiFileMetadataReader._retrieve_headers') @patch('gem2caom2.gemini_metadata.retrieve_json') @patch('caom2pipe.manage_composable.http_get') -def test_pull_augmentation(http_mock, json_mock, header_mock, file_type_mock, test_config, test_data_dir): +def test_pull_augmentation(http_mock, json_mock, file_type_mock, test_config, test_data_dir, tmp_path): + test_config.change_working_directory(tmp_path) obs = mc.read_obs_from_file(f'{test_data_dir}/visit_original_uri_start.xml') obs.planes[TEST_PRODUCT_ID].data_release = datetime.now(tz=timezone.utc).replace(tzinfo=None) original_uri = 'gemini:GEMINI/GN2001BQ013-04.fits' @@ -206,28 +206,26 @@ def test_pull_augmentation(http_mock, json_mock, header_mock, file_type_mock, te ), 'initial condition' test_uri = f'{test_config.scheme}:{test_config.collection}/{TEST_PRODUCT_ID}.fits' - test_observable = mc.Observable(test_config) + test_reporter = mc.ExecutionReporter2(test_config) cadc_client_mock = Mock() cadc_client_mock.return_value.info.return_value = None clients_mock = Mock() clients_mock.data_client = cadc_client_mock json_mock.side_effect = gem_mocks.mock_retrieve_json filter_cache = svofps.FilterMetadataCache(Mock()) - test_reader = gemini_metadata.GeminiFileMetadataReader( - Mock(), Mock(), filter_cache - ) - test_storage_name = gem_name.GemName(file_name='GN2001BQ013-04.fits') - header_mock.side_effect = gem_mocks._mock_headers + test_storage_name = gem_name.GemName(file_name='GN2001BQ013-04.fits', filter_cache=filter_cache) file_type_mock.return_values = 'application/fits' - test_reader.set(test_storage_name) kwargs = { 'working_directory': test_data_dir, 'clients': clients_mock, - 'observable': test_observable, - 'metadata_reader': test_reader, + 'reporter': test_reporter, 'storage_name': test_storage_name, } + test_precondition = gemini_metadata.GeminiMetaVisitRunnerMeta(clients_mock, test_config, [], test_reporter) + test_precondition._storage_name = test_storage_name + test_precondition._set_preconditions() + obs = pull_augmentation.visit(obs, **kwargs) test_url = f'{pull_augmentation.FILE_URL}/{TEST_PRODUCT_ID}.fits' test_prev = f'{test_data_dir}/{TEST_PRODUCT_ID}.fits' diff --git a/gem2caom2/util.py b/gem2caom2/util.py index 5b40226..72385a7 100644 --- a/gem2caom2/util.py +++ b/gem2caom2/util.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # *********************************************************************** # ****************** CANADIAN ASTRONOMY DATA CENTRE ******************* # ************* CENTRE CANADIEN DE DONNÉES ASTRONOMIQUES ************** From b1beda5f559fc9a3898cad0c9d26a0ba09f947c6 Mon Sep 17 00:00:00 2001 From: Sharon Goliath Date: Mon, 9 Dec 2024 15:56:42 -0800 Subject: [PATCH 2/5] fix(data_source.py): handle incremental time-boxes that exceed the source query limits --- gem2caom2/tests/test_composable.py | 9 ++++++++- gem2caom2/tests/test_data_source.py | 16 ++++++++-------- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/gem2caom2/tests/test_composable.py b/gem2caom2/tests/test_composable.py index 911e4fb..4655979 100644 --- a/gem2caom2/tests/test_composable.py +++ b/gem2caom2/tests/test_composable.py @@ -82,7 +82,7 @@ from cadcdata import FileInfo from caom2 import SimpleObservation, Algorithm from caom2pipe.data_source_composable import StateRunnerMeta -from caom2pipe.manage_composable import Config, make_datetime, TaskType, write_as_yaml +from caom2pipe.manage_composable import Config, make_datetime, State, TaskType, write_as_yaml from gem2caom2 import composable, gem_name from gem2caom2.data_source import GEM_BOOKMARK @@ -655,6 +655,10 @@ def test_run_incremental_diskfiles_limit( tmp_path, change_test_dir, ): + + # test that, when the limit of files is hit, the datetime for the increment is that from the time of the record + # at the limit, not the upper end of the timebox + query_mock.side_effect = gem_mocks.mock_query_endpoint_5 tap_mock.side_effect = gem_mocks.mock_query_tap clients_mock.return_value.metadata_client.read.side_effect = gem_mocks.read_mock_37 @@ -690,6 +694,9 @@ def test_run_incremental_diskfiles_limit( assert not clients_mock.return_value.metadata_client.update.called, 'meta update called' assert not tap_mock.called, 'tap called' + test_state_post = State(test_config.state_fqn, zone=timezone.utc) + assert test_state_post.get_bookmark(test_config.bookmark) == datetime(2024, 8, 28, 18, 5, 0, 0), 'saved state' + def _write_state(prior_timestamp=None, end_timestamp=None, fqn=STATE_FILE): # to ensure at least one spin through the execution loop, test case diff --git a/gem2caom2/tests/test_data_source.py b/gem2caom2/tests/test_data_source.py index ba78a52..3e39da0 100644 --- a/gem2caom2/tests/test_data_source.py +++ b/gem2caom2/tests/test_data_source.py @@ -175,18 +175,18 @@ def test_diskfiles_incremental_source_limit(query_mock, test_config): test_reporter = Mock() test_subject.reporter = test_reporter - prev_exec_time = datetime(year=2021, month=1, day=1, hour=20, minute=3, second=0) - exec_time = datetime(year=2021, month=1, day=1, hour=22, minute=13, second=0) + prev_exec_time = datetime(year=2024, month=8, day=28, hour=17, minute=5, second=0) + exec_time = datetime(year=2024, month=8, day=28, hour=18, minute=0, second=0) test_result = test_subject.get_time_box_work(prev_exec_time, exec_time) assert test_result is not None, 'expect a result' - assert len(test_result) == 16, 'wrong number of results' + assert len(test_result) == 500, 'wrong number of results' test_first_entry = test_result.popleft() - assert test_first_entry.storage_entry.file_name == 'S20241030S0188.fits', 'wrong first file' - assert test_first_entry.entry_dt == datetime(2024, 10, 30, 10, 51, 37, 360130), 'wrong fits datetime' + assert test_first_entry.storage_entry.file_name == 'S20190619Z0121b.fits', 'wrong first file' + assert test_first_entry.entry_dt == datetime(2024, 8, 28, 17, 5, 0, 127507), 'wrong fits datetime' test_last_entry = test_result.pop() - assert test_last_entry.storage_entry.file_name == 'S20241030S0203.fits', 'wrong 2nd file' - assert test_last_entry.entry_dt == datetime(2024, 10, 30, 10, 54, 45, 941860), 'wrong last datetime' + assert test_last_entry.storage_entry.file_name == 'N20190618S1656.fits', 'wrong 2nd file' + assert test_last_entry.entry_dt == datetime(2024, 8, 28, 17, 7, 32, 267675), 'wrong last datetime' assert test_reporter.capture_todo.called, 'capture_todo' assert test_reporter.capture_todo.call_count == 1, 'wrong number of capture_todo calls' - test_reporter.capture_todo.assert_called_with(16, 0, 0) + assert test_subject.max_records_encountered(), 'limit warning' From f716be0681ebf6a3d13ccfc9918d1915341522ba Mon Sep 17 00:00:00 2001 From: Sharon Goliath Date: Tue, 10 Dec 2024 10:43:08 -0800 Subject: [PATCH 3/5] fix(data_source.py): skip the -fits!-md! records, set the obs_id from the data label earlier --- gem2caom2/data_source.py | 10 ++++-- gem2caom2/gemini_metadata.py | 12 +++---- gem2caom2/tests/gem_mocks.py | 31 ++++++++++++++++--- gem2caom2/tests/test_caom_gen_visit.py | 4 +++ gem2caom2/tests/test_data_source.py | 31 +++++++++++++++++++ gem2caom2/tests/test_gemini_metadata.py | 18 ++++++++++- gem2caom2/tests/test_meta_visit_edge_cases.py | 7 +++-- 7 files changed, 97 insertions(+), 16 deletions(-) diff --git a/gem2caom2/data_source.py b/gem2caom2/data_source.py index d572aae..a92f5a6 100644 --- a/gem2caom2/data_source.py +++ b/gem2caom2/data_source.py @@ -74,6 +74,7 @@ from caom2pipe import data_source_composable as dsc from caom2pipe.manage_composable import build_uri, CaomName, ISO_8601_FORMAT, make_datetime, query_endpoint_session from caom2pipe.manage_composable import StorageName +from gem2caom2.obs_file_relationship import repair_data_label __all__ = ['GEM_BOOKMARK', 'IncrementalSource', 'PublicIncremental'] @@ -284,6 +285,8 @@ def get_time_box_work(self, prev_exec_dt, exec_dt): file_name = value.get('filename') storage_name = self._storage_name_ctor(file_name, self._filter_cache) storage_name.file_info[storage_name.destination_uris[0]] = value + repaired_data_label = repair_data_label(file_name, value.get('datalabel')) + storage_name.obs_id = repaired_data_label entries.append(dsc.RunnerMeta(storage_name, entry_dt)) finally: if response is not None: @@ -304,9 +307,12 @@ def _parse_diskfiles_response(self, html_string): for row in rows: cells = row.find_all('td') entry_time = make_datetime(cells[5].text.strip()) # what the https query is keyed on + file_name = cells[0].text.strip() + if file_name.endswith('-fits!-md!'): + continue value = { - 'filename': cells[0].text.strip(), - 'datalabel': cells[1].text.strip(), + 'filename': file_name, + 'datalabel': cells[1].text.strip().split('\n')[-1], 'instrument': cells[2].text.strip(), 'lastmod': make_datetime(cells[6].text.strip()), 'data_size': cells[10].text.strip(), diff --git a/gem2caom2/gemini_metadata.py b/gem2caom2/gemini_metadata.py index 24aa846..d4f5abe 100644 --- a/gem2caom2/gemini_metadata.py +++ b/gem2caom2/gemini_metadata.py @@ -636,10 +636,6 @@ def _set_preconditions(self): else: self._storage_name._file_info[uri] = self._clients.data_client.info(uri) - file_name = self._storage_name._json_metadata[uri].get('filename') - data_label = self._storage_name._json_metadata[uri].get('data_label') - repaired_data_label = obs_file_relationship.repair_data_label(file_name, data_label) - self._storage_name.obs_id = repaired_data_label self._logger.debug('End _set_preconditions') @@ -723,9 +719,11 @@ def retrieve_headers(source_name, logger, clients, config): if config.use_local_files: result = data_util.get_local_file_headers(source_name) else: - result = clients.data_client.get_head(f'{config.scheme}:{config.collection}/{path.basename(source_name)}') - if not result: - # if the header is not at CADC, retrieve it from archive.gemini.edu + try: + result = clients.data_client.get_head(f'{config.scheme}:{config.collection}/{path.basename(source_name)}') + except exceptions.UnexpectedException as e: + # the exceptions.NotFoundException is turned into exceptions.UnexpectedException in data_util + # the header is not at CADC, retrieve it from archive.gemini.edu result = retrieve_gemini_headers(source_name, logger, clients.gemini_session) return result diff --git a/gem2caom2/tests/gem_mocks.py b/gem2caom2/tests/gem_mocks.py index 8cc4147..7f932d9 100644 --- a/gem2caom2/tests/gem_mocks.py +++ b/gem2caom2/tests/gem_mocks.py @@ -305,6 +305,14 @@ 'S20170905S0318': ['GS-2017A-Q-58-66-027', Inst.F2, 'GS-2017A-Q-58'], 'S20191214S0301': ['GS-CAL20191214-1-029', Inst.F2, 'GS-CAL20191214'], 'S20141130S0001': ['GS-CAL20141129-3-001', Inst.F2, 'GS-CAL20141129'], + 'S20210522S0033': ['GS-2021A-Q-322-12-033', Inst.F2, 'GS-2021A-Q-322'], + 'S20230301S0170': ['GS-2023A-LP-103-23-017', Inst.F2, '>GS-2023A-LP-103'], + 'S20210530S0047': ['GS-2021A-Q-416-20-001', Inst.F2, 'GS-2021A-Q-416'], + 'S20220220S0198': ['GS-CAL20220220-3-012', Inst.F2, 'GS-CAL20220220'], + 'S20220912S0299': ['GS-2022B-Q-306-70-014', Inst.F2, 'GS-2022B-Q-306'], + 'S20221020S0034': ['GS-2022B-DD-101-31-004', Inst.F2, 'GS-2022B-DD-101'], + 'S20220203S0019': ['GS-CAL20220203-1-005', Inst.F2, 'GS-CAL20220203'], + 'S20221115S0124': ['GS-2022B-Q-235-137-045', Inst.F2, 'GS-2022B-Q-235'], # Flamingos '02jul07.0186': ['GS-2002A-Q-13-2-0186', Inst.FLAMINGOS, 'GS-2002A-Q-13'], '02jun25.0071': ['GS-2002A-Q-7-1-0071', Inst.FLAMINGOS, 'GS-2002A-Q-7'], @@ -329,6 +337,12 @@ # GHOST 'S20240601S0038_blue001_dragons': ['GS-2024A-LP-106-12-013-BLUE-001-SQ-BLUE001-DRAGONS', Inst.GHOST, 'GS-2024A-LP-106-12-013'], 'S20240607S0038': ['GS-2024A-Q-144-3-004', Inst.GHOST, 'GS-2024A-Q-144'], + 'S20230517S0047': ['GS-CAL20230517-12-001', Inst.GHOST, 'GS-CAL20230517'], + 'S20240215S0050': ['GS-CAL20240215-15-001', Inst.GHOST, 'GS-CAL20240215'], + 'S20231224S0444': ['GS-CAL20231224-19-001', Inst.GHOST, 'GS-CAL20231224'], + 'S20230518S0121': ['GS-2023A-SV-101-13-009', Inst.GHOST, 'GS-2023A-SV-101'], + 'S20230516S0039': ['GS-2023A-SV-104-12-003', Inst.GHOST, 'GS-2023A-SV-104'], + 'S20231208S0060': ['GS-2023B-FT-104-11-001', Inst.GHOST, 'GS-2023B-FT-104'], # GMOS 'N20030107S0163': ['GN-2003A-Q-22-3-004', Inst.GMOS, 'GN-2003A-Q-22'], 'N20071219S0193': ['GN-2007B-Q-112-14-018', Inst.GMOS, 'GN-2007B-Q-112'], @@ -367,6 +381,7 @@ 'N20120117S0009_stack_fringe': ['GN-CAL20120117-900-009-STACK-FRINGE', Inst.GMOS, 'GS-CAL20131007-1'], 'rS20040502S0077': ['GS-CAL20040502-3-002', Inst.GMOS, 'GS-CAL20040502-3'], 'S20131007S0001_flat': ['GS-CAL20131007-1-001-FLAT', Inst.GMOS, 'GS-CAL20131007-1'], + 'N20220915S0113': ['GN-CAL20220915-20-001', Inst.GMOSN, 'GN-CAL20220915'], # GNIRS 'N20100915S0167': ['GN-2010B-Q-2-44-003', Inst.GNIRS, 'GN-2010B-Q-2'], 'N20100722S0185': ['GN-2010B-SV-142-10-007', Inst.GNIRS, 'GN-2010B-SV-142'], @@ -388,6 +403,8 @@ 'N20180224S0063': ['GN-CAL20180224-3-001', Inst.GNIRS, 'GN-CAL20180224-3'], 'N20171106S0187': ['GN-2017B-LP-16-470-002', Inst.GNIRS, 'GN-2017B-LP-16'], 'N20170210S0013': ['GN-CAL20170209-5-003', Inst.GNIRS, 'GN-CAL20170209-5'], + 'S20040212S0191': ['GS-2004A-SV-1-1-002', Inst.GNIRS, 'GS-2004A-SV-1'], + 'S20040212S0281': ['GS-2004A-SV-1-4-024', Inst.GNIRS, 'GS-2004A-SV-1'], # GPI 'S20140422S0167': ['GS-2014A-SV-408-6-003', Inst.GPI, 'GS-2014A-SV-408'], 'S20180313S0108': ['GS-2018A-FT-101-5-043', Inst.GPI, 'GS-2018A-FT-101'], @@ -433,6 +450,7 @@ 'N20050826S0137': ['GN-2005B-Q-16-85-001', Inst.MICHELLE, 'GN-2005B-Q-16'], 'N20060413S0129': ['GN-CAL20060413-7-001', Inst.MICHELLE, 'GN-CAL20060413'], 'N20080308S0086': ['GN-CAL20080308-8-016', Inst.MICHELLE, 'GN-CAL20080308'], + 'N20100116S0154': ['GN-2009B-Q-3-64-002', Inst.MICHELLE, 'GN-2009B-Q-3'], # NICI 'S20100102S0035': ['GS-2009B-Q-14-129-029', Inst.NICI, 'GS-2009B-Q-14'], 'S20100218S0028': ['GS-2009B-Q-21-19-001', Inst.NICI, 'GS-2009B-Q-21'], @@ -472,6 +490,7 @@ 'N20141203S0891': ['GN-2014B-C-1-157-100', Inst.NIRI, 'GN-2014B-C-1'], 'N20030325S0098': ['GN-2003A-Q-51-2-004', Inst.NIRI, 'GN-2003A-Q-51'], 'N20211017S0139': ['GN-2021B-Q-110-28-126', Inst.NIRI, 'GN-2021B-Q-110'], + 'N20030325S0353': ['GN-CAL20030325-21-003', Inst.NIRI, 'GN-CAL20030325'], # OSCIR 'r01dec05_007': ['GS-2001B-Q-31-9-007', Inst.OSCIR, 'GS-2001B-Q-31'], '01MAY08_023': ['GN-2001A-C-4-11-9023', Inst.OSCIR, 'GN-2001A-C-4'], @@ -801,6 +820,9 @@ def mock_query_endpoint_5(url, timeout=-1): if url.startswith('https://archive.gemini.edu/diskfiles/entrytimedaterange=2024-08-28T17:05:00'): with open(f'{TEST_DATA_DIR}/diskfiles_mock/query_limit.html') as f: result.text = f.read() + elif url.startswith('https://archive.gemini.edu/diskfiles/entrytimedaterange=2024-08-27T03:50:00'): + with open(f'{TEST_DATA_DIR}/diskfiles_mock/md.html') as f: + result.text = f.read() return result @@ -1039,17 +1061,18 @@ def _run_test_common( test_reporter = mc.ExecutionReporter2(test_config) filter_cache = svofps.FilterMetadataCache(svofps_mock) clients_mock = Mock() - for entry in test_set: - storage_name = GemName(entry, filter_cache) + for test_f_name, test_obs_id in test_set.items(): + storage_name = GemName(test_f_name, filter_cache) + storage_name.obs_id = test_obs_id test_subject = gemini_metadata.GeminiMetaVisitRunnerMeta( clients_mock, test_config, [fits2caom2_augmentation], test_reporter ) def _read_header_mock(ignore1, ignore2, ignore3, ignore4): - if 'S20210518S0022' in entry: + if 'S20210518S0022' in test_f_name: return [] else: - return get_local_file_headers(entry) + return get_local_file_headers(test_f_name) header_mock.side_effect = _read_header_mock clients_mock.metadata_client.read.return_value = observation diff --git a/gem2caom2/tests/test_caom_gen_visit.py b/gem2caom2/tests/test_caom_gen_visit.py index b17c72d..a0ad4a1 100644 --- a/gem2caom2/tests/test_caom_gen_visit.py +++ b/gem2caom2/tests/test_caom_gen_visit.py @@ -192,6 +192,10 @@ def _read_header_mock(ignore1, ignore2, ignore3, ignore4): clients_mock, test_config, [fits2caom2_augmentation], test_reporter ) storage_name = GemName(test_name, filter_cache) + if gem_mocks.LOOKUP[test_file_id][1] == Inst.ZORRO: + storage_name.obs_id = test_file_id[:-1] + else: + storage_name.obs_id = gem_mocks.LOOKUP[test_file_id][0] context = {'storage_name': storage_name} try: test_subject.execute(context) diff --git a/gem2caom2/tests/test_data_source.py b/gem2caom2/tests/test_data_source.py index 3e39da0..217bdaf 100644 --- a/gem2caom2/tests/test_data_source.py +++ b/gem2caom2/tests/test_data_source.py @@ -190,3 +190,34 @@ def test_diskfiles_incremental_source_limit(query_mock, test_config): assert test_reporter.capture_todo.called, 'capture_todo' assert test_reporter.capture_todo.call_count == 1, 'wrong number of capture_todo calls' assert test_subject.max_records_encountered(), 'limit warning' + + +@patch('gem2caom2.data_source.query_endpoint_session') +def test_diskfiles_incremental_source_md(query_mock, test_config): + # https://archive.gemini.edu/diskfiles/entrytimedaterange=-- + # get results + query_mock.side_effect = gem_mocks.mock_query_endpoint_5 + + test_http_session = Mock() + test_subject = data_source.IncrementalSourceDiskfiles(test_config, test_http_session, GemName, Mock()) + assert test_subject is not None, 'expect construction success' + test_reporter = Mock() + test_subject.reporter = test_reporter + + prev_exec_time = datetime(year=2024, month=8, day=27, hour=3, minute=50, second=0) + exec_time = datetime(year=2024, month=8, day=27, hour=4, minute=0, second=0) + + test_result = test_subject.get_time_box_work(prev_exec_time, exec_time) + assert test_result is not None, 'expect a result' + assert len(test_result) == 3, 'wrong number of results' + test_first_entry = test_result.popleft() + assert test_first_entry.storage_entry.file_name == 'S20240827S0034.fits', 'wrong first file' + assert test_first_entry.entry_dt == datetime(2024, 8, 27, 3, 54, 50, 692569), 'wrong fits datetime' + assert test_first_entry.storage_entry.obs_id == 'GS-2024B-DD-103-8-001', 'wrong first obs id' + test_last_entry = test_result.pop() + assert test_last_entry.storage_entry.file_name == 'S20240827S0035.fits', 'wrong 2nd file' + assert test_last_entry.entry_dt == datetime(2024, 8, 27, 3, 56, 43, 418974), 'wrong last datetime' + assert test_last_entry.storage_entry.obs_id == 'GS-2024B-DD-103-8-002', 'wrong last obs id' + assert test_reporter.capture_todo.called, 'capture_todo' + assert test_reporter.capture_todo.call_count == 1, 'wrong number of capture_todo calls' + assert not test_subject.max_records_encountered(), 'limit warning' diff --git a/gem2caom2/tests/test_gemini_metadata.py b/gem2caom2/tests/test_gemini_metadata.py index fcfcb14..6c8147f 100644 --- a/gem2caom2/tests/test_gemini_metadata.py +++ b/gem2caom2/tests/test_gemini_metadata.py @@ -71,7 +71,7 @@ from astropy.io import fits from astropy.table import Table -from mock import patch, Mock +from mock import ANY, patch, Mock from cadcutils import exceptions from caom2pipe import manage_composable as mc @@ -187,3 +187,19 @@ def test_header_not_at_cadc(retrieve_json_mock, clients_mock, test_config): test_session_mock.get.assert_called_with( 'https://archive.gemini.edu/fullheader/N20220314S0229.fits', timeout=20 ), 'wrong mock args' + + +@patch('caom2pipe.client_composable.ClientCollection') +@patch('gem2caom2.gemini_metadata.retrieve_gemini_headers') +def test_header_not_at_cadc_no_reader(retrieve_gemini_mock, clients_mock, test_config): + # the file is private, re-ingestion fails to find headers at CADC, needs to go back to archive.gemini.edu + test_f_name = 'N20220314S0229.fits.bz2' + test_obs_id = 'GN-CAL20220314-18-083' + retrieve_gemini_mock.side_effect = gem_mocks._mock_retrieve_headers + clients_mock.data_client.get_head.side_effect = exceptions.UnexpectedException + test_storage_name = gem_name.GemName(file_name=test_f_name) + test_storage_name.obs_id = test_obs_id + test_result = gemini_metadata.retrieve_headers(test_f_name, Mock(), clients_mock, test_config) + assert test_result is not None, 'expect a result' + assert retrieve_gemini_mock.called, 'retrieve mock not called' + retrieve_gemini_mock.assert_called_with(test_f_name, ANY, ANY ), 'wrong mock args' diff --git a/gem2caom2/tests/test_meta_visit_edge_cases.py b/gem2caom2/tests/test_meta_visit_edge_cases.py index 8561c2f..c3744f0 100644 --- a/gem2caom2/tests/test_meta_visit_edge_cases.py +++ b/gem2caom2/tests/test_meta_visit_edge_cases.py @@ -104,6 +104,8 @@ def test_broken_obs( f'{gem_mocks.TEST_DATA_DIR}/broken_files/{test_obs_id}.expected.xml' ) + test_set = {test_fqn: test_obs_id} + gem_mocks._run_test_common( data_sources=[f'{gem_mocks.TEST_DATA_DIR}/broken_files'], get_pi_mock=get_pi_mock, @@ -112,7 +114,7 @@ def test_broken_obs( header_mock=header_mock, json_mock=json_mock, file_type_mock=file_type_mock, - test_set=[test_fqn], + test_set=test_set, expected_fqn=expected_fqn, test_config=test_config, tmp_path=tmp_path, @@ -149,6 +151,7 @@ def test_unauthorized_at_gemini( # non-zero length list test_fqn = f'{gem_mocks.TEST_DATA_DIR}/broken_files/{test_f_name}' expected_fqn = f'{gem_mocks.TEST_DATA_DIR}/GMOS/{test_fid}.expected.xml' + test_set = {test_fqn: 'GS-2021A-Q-777-1-001'} gem_mocks._run_test_common( data_sources=[f'{gem_mocks.TEST_DATA_DIR}/broken_files'], get_pi_mock=get_pi_mock, @@ -157,7 +160,7 @@ def test_unauthorized_at_gemini( json_mock=json_mock, header_mock=header_mock, file_type_mock=file_type_mock, - test_set=[test_fqn], + test_set=test_set, expected_fqn=expected_fqn, test_config=test_config, tmp_path=tmp_path, From 46febab740648a4437dbcb30178d43f727d021a9 Mon Sep 17 00:00:00 2001 From: Sharon Goliath Date: Tue, 10 Dec 2024 13:43:37 -0800 Subject: [PATCH 4/5] CADC-13844 - integrating the existing working code back in. --- gem2caom2/fits2caom2_augmentation.py | 22 ++- gem2caom2/main_app.py | 8 +- gem2caom2/preview_augmentation.py | 11 +- gem2caom2/pull_augmentation.py | 10 +- gem2caom2/tests/data/diskfiles_mock/md.html | 131 ++++++++++++++++++ .../tests/data/programs/GN-CAL20220915.xml | 27 ++++ 6 files changed, 199 insertions(+), 10 deletions(-) create mode 100644 gem2caom2/tests/data/diskfiles_mock/md.html create mode 100644 gem2caom2/tests/data/programs/GN-CAL20220915.xml diff --git a/gem2caom2/fits2caom2_augmentation.py b/gem2caom2/fits2caom2_augmentation.py index a216a0a..9d5fdaa 100644 --- a/gem2caom2/fits2caom2_augmentation.py +++ b/gem2caom2/fits2caom2_augmentation.py @@ -70,8 +70,23 @@ from caom2pipe import caom_composable as cc from gem2caom2 import main_app +class GeminiFits2caom2Visitor(cc.Fits2caom2Visitor): + def __init__(self, observation, **kwargs): + super().__init__(observation, **kwargs) + + def _get_mapping(self, headers, _): + return main_app.mapping_factory( + self._storage_name, + headers, + self._metadata_reader, + self._clients, + self._observable, + self._observation, + self._config, + ) + -class GeminiFits2caom2Visitor(cc.Fits2caom2VisitorRunnerMeta): +class GeminiFits2caom2VisitorRunnerMeta(cc.Fits2caom2VisitorRunnerMeta): def __init__(self, observation, **kwargs): super().__init__(observation, **kwargs) @@ -88,4 +103,7 @@ def _get_mapping(self, dest_uri): def visit(observation, **kwargs): - return GeminiFits2caom2Visitor(observation, **kwargs).visit() + if 'reporter' in kwargs: + return GeminiFits2caom2VisitorRunnerMeta(observation, **kwargs).visit() + else: + return GeminiFits2caom2Visitor(observation, **kwargs).visit() diff --git a/gem2caom2/main_app.py b/gem2caom2/main_app.py index fbd70f3..02b32bd 100644 --- a/gem2caom2/main_app.py +++ b/gem2caom2/main_app.py @@ -692,7 +692,10 @@ def update(self): continue if GemName.is_preview(artifact.uri): continue - update_artifact_meta(artifact, self._storage_name.file_info.get(artifact.uri)) + if self._lookup._reader: + update_artifact_meta(artifact, self._lookup._reader.file_info.get(artifact.uri)) + else: + update_artifact_meta(artifact, self._storage_name.file_info.get(artifact.uri)) self._update_artifact(artifact) processed = ofr.is_processed(self._storage_name.file_name) if self._instrument in [ @@ -2344,7 +2347,8 @@ def _update_energy(self, chunk, data_product_type, filter_name): 'R600': 3744.0, 'R400': 1918.0, 'R150': 631.0, - # 'B480': 1522.0, # WF - 16-09-22 ## TODO WF - 23-09-22 - need more accurate min/max values + # current best value available from https://gemini.edu/instrumentation/gmos/components#Gratings + 'B480': 1522.0, # WF - 16-09-22 ## TODO WF - 23-09-22 - need more accurate min/max values } # DB 02-12-19 # Found basic info for the Lya395 filter in a published paper. diff --git a/gem2caom2/preview_augmentation.py b/gem2caom2/preview_augmentation.py index 7820295..52d53b6 100644 --- a/gem2caom2/preview_augmentation.py +++ b/gem2caom2/preview_augmentation.py @@ -94,9 +94,14 @@ def visit(observation, **kwargs): clients = kwargs.get('clients') if clients is None or clients.data_client is None: logging.warning('Need a cadc_client to update preview records.') - observable = kwargs.get('observable') - if observable is None: - raise mc.CadcException('Visitor needs a observable parameter.') + reporter = kwargs.get('reporter') + observer = kwargs.get('observable') + if reporter is None and observer is None: + raise mc.CadcException('Visitor needs a reporter or observable parameter.') + if reporter: + observable = reporter._observable + else: + observable = observer storage_name = kwargs.get('storage_name') if storage_name is None: raise mc.CadcException('Visitor needs a storage_name parameter.') diff --git a/gem2caom2/pull_augmentation.py b/gem2caom2/pull_augmentation.py index a38c321..a45ca49 100644 --- a/gem2caom2/pull_augmentation.py +++ b/gem2caom2/pull_augmentation.py @@ -89,9 +89,13 @@ def visit(observation, **kwargs): logging.warning('Need clients to update. Stopping pull visitor.') return reporter = kwargs.get('reporter') - if reporter is None: - raise mc.CadcException('Visitor needs a reporter parameter.') - observable = reporter._observable + observer = kwargs.get('observable') + if reporter is None and observer is None: + raise mc.CadcException('Visitor needs a reporter or observable parameter.') + if reporter: + observable = reporter._observable + else: + observable = observer storage_name = kwargs.get('storage_name') if storage_name is None: raise mc.CadcException('Visitor needs a storage_name parameter.') diff --git a/gem2caom2/tests/data/diskfiles_mock/md.html b/gem2caom2/tests/data/diskfiles_mock/md.html new file mode 100644 index 0000000..5d626fe --- /dev/null +++ b/gem2caom2/tests/data/diskfiles_mock/md.html @@ -0,0 +1,131 @@ + + + + + + + + +FITS header diskfiles table + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Filename + Data Label + UT Date Time + Inst + Present + Entry Time + LastMod + File Size + File MD5 + Compressed + Data Size + Data MD5 +
S20240827S0036.fits + +[A] +GS-2024B-DD-103-8-003 + 2024-08-27 00:41:40 + GMOS-S + True + 2024-08-27 03:56:21.223390+00:00 + 2024-08-27 03:56:21.191324+00:00 + 4901634 + 5b03d1510e846953dce1f4aae0d3a491 + True + 14849280 + 250e972fc2cfbebe3acaf918b0a0293b +
S20240827S0035.fits-fits!-md! + +[A] +GS-2024B-DD-103-8-002 + 2024-08-27 00:21:07 + GMOS-S + False + 2024-08-27 03:53:04.068584+00:00 + 2024-08-27 03:53:04.036587+00:00 + 4923541 + de5d0659483d00bb58a5fea9f32254cd + True + 14849280 + 8ea7e29801fec81aa54c966bb3584490 +
S20240827S0035.fits + +[A] +GS-2024B-DD-103-8-002 + 2024-08-27 00:21:07 + GMOS-S + True + 2024-08-27 03:56:43.418974+00:00 + 2024-08-27 03:56:43.391849+00:00 + 4923541 + de5d0659483d00bb58a5fea9f32254cd + True + 14849280 + 8ea7e29801fec81aa54c966bb3584490 +
S20240827S0034.fits + +[A] + +[L] +GS-2024B-DD-103-8-001 + 2024-08-27 00:00:37 + GMOS-S + True + 2024-08-27 03:54:50.692569+00:00 + 2024-08-27 03:54:50.659167+00:00 + 4931086 + e7a70c43b0fd458fc5b81a270359501e + True + 14849280 + 1a8f8b3c07dbde49ffeb8cc9eabed540 +
+ + + + + + + + \ No newline at end of file diff --git a/gem2caom2/tests/data/programs/GN-CAL20220915.xml b/gem2caom2/tests/data/programs/GN-CAL20220915.xml new file mode 100644 index 0000000..1eef58c --- /dev/null +++ b/gem2caom2/tests/data/programs/GN-CAL20220915.xml @@ -0,0 +1,27 @@ + + + + + + + +Detail for Program: GN-CAL20220915 + + + +

Program: GN-CAL20220915

+ + + + + +
Title:GN-CAL20220915
PI:
Co-I(s):
+

Abstract

+
+No abstract +
+ + + + + \ No newline at end of file From 6c362c35ae07124e2bfb94485bc7e6a807b08571 Mon Sep 17 00:00:00 2001 From: Sharon Goliath Date: Tue, 10 Dec 2024 14:00:52 -0800 Subject: [PATCH 5/5] fix(data_source.py): ensure the file metadata is in the FileInfo dataclass format --- gem2caom2/data_source.py | 10 +++++++++- gem2caom2/tests/test_data_source.py | 6 ++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/gem2caom2/data_source.py b/gem2caom2/data_source.py index a92f5a6..f9606ec 100644 --- a/gem2caom2/data_source.py +++ b/gem2caom2/data_source.py @@ -70,6 +70,9 @@ from collections import defaultdict, deque, OrderedDict from datetime import datetime +from cadcdata import FileInfo +from caom2utils.blueprints import _to_int +from caom2utils.data_util import get_file_type from caom2pipe import client_composable as clc from caom2pipe import data_source_composable as dsc from caom2pipe.manage_composable import build_uri, CaomName, ISO_8601_FORMAT, make_datetime, query_endpoint_session @@ -284,7 +287,12 @@ def get_time_box_work(self, prev_exec_dt, exec_dt): for value in values: file_name = value.get('filename') storage_name = self._storage_name_ctor(file_name, self._filter_cache) - storage_name.file_info[storage_name.destination_uris[0]] = value + storage_name.file_info[storage_name.destination_uris[0]] = FileInfo( + id=file_name, + size=_to_int(value.get('data_size')), + md5sum=value.get('data_md5'), + file_type=get_file_type(file_name), + ) repaired_data_label = repair_data_label(file_name, value.get('datalabel')) storage_name.obs_id = repaired_data_label entries.append(dsc.RunnerMeta(storage_name, entry_dt)) diff --git a/gem2caom2/tests/test_data_source.py b/gem2caom2/tests/test_data_source.py index 217bdaf..e14ba8b 100644 --- a/gem2caom2/tests/test_data_source.py +++ b/gem2caom2/tests/test_data_source.py @@ -218,6 +218,12 @@ def test_diskfiles_incremental_source_md(query_mock, test_config): assert test_last_entry.storage_entry.file_name == 'S20240827S0035.fits', 'wrong 2nd file' assert test_last_entry.entry_dt == datetime(2024, 8, 27, 3, 56, 43, 418974), 'wrong last datetime' assert test_last_entry.storage_entry.obs_id == 'GS-2024B-DD-103-8-002', 'wrong last obs id' + test_file_info = test_last_entry.storage_entry.file_info.get('gemini:GEMINI/S20240827S0035.fits') + assert test_file_info is not None, 'file info' + assert test_file_info.id == 'S20240827S0035.fits', 'file info id' + assert test_file_info.size == 14849280, 'file info size' + assert test_file_info.md5sum == '8ea7e29801fec81aa54c966bb3584490', 'file info checksum' + assert test_file_info.file_type == 'application/fits', 'file info type' assert test_reporter.capture_todo.called, 'capture_todo' assert test_reporter.capture_todo.call_count == 1, 'wrong number of capture_todo calls' assert not test_subject.max_records_encountered(), 'limit warning'