def _transfer_metadata(self): info = self.l1b.info # Processing System info info.set_attribute("pysiral_version", PYSIRAL_VERSION) # General CryoSat-2 metadata info.set_attribute("mission", self._mission) info.set_attribute("mission_data_version", self.cs2l1b.baseline) info.set_attribute("orbit", self.cs2l1b.sph.abs_orbit_start) info.set_attribute("cycle", self.cs2l1b.mph.cycle) mission_data_source = filename_from_path(self.cs2l1b.filename) info.set_attribute("mission_data_source", mission_data_source) # Get the product timeliness from the processor stage code # `proc_stage` in the L1b main product header uses the following # conventions: N=Near-Real Time, T=Test, O=Off Line (Systematic), # R=Reprocessing, L=Long Term Archive # # We do want to use the following timelines codes adopted from the # S3 notation: NRT: Near-real time, STC: short-time critical # NTC: Non-Time Critical, REP: Reprocessed # # We therefore define a dictionary and use NTC as default value timeliness_dct = {"N": "NRT", "O": "NTC", "R": "REP", "L": "REP"} proc_stage = self.cs2l1b.mph.get_by_fieldname("proc_stage")[0] info.set_attribute("timeliness", timeliness_dct.get(proc_stage, "NTC")) # Time-Orbit Metadata start_time = parse_datetime_str(self.cs2l1b.sph.start_record_tai_time) stop_time = parse_datetime_str(self.cs2l1b.sph.stop_record_tai_time) info.set_attribute("start_time", start_time) info.set_attribute("stop_time", stop_time)
def _set_input_file_metadata(self): """ Populates the product info segment of the Level1Data object with information from the global attributes of the netCDF and content of the xml manifest :return: None """ # Short cuts metadata = self.nc.attrs info = self.l1.info # Get xml manifest content product_info = self._get_xml_content( "generalProductInformation", "sentinel3:generalProductInformation") sral_info = self._get_xml_content("sralProductInformation", "sralProductInformation") # Processing environment metadata info.set_attribute("pysiral_version", pysiral_version) # General product metadata mission = metadata["mission_name"].lower().replace(" ", "") info.set_attribute("mission", str(mission)) info.set_attribute("mission_sensor", "sral") info.set_attribute("mission_data_version", metadata["source"]) info.set_attribute("orbit", metadata["absolute_rev_number"]) info.set_attribute("cycle", metadata["cycle_number"]) info.set_attribute("mission_data_source", metadata["product_name"]) info.set_attribute( "timeliness", self.cfg.timeliness_dict[str( product_info["sentinel3:timeliness"])]) # Time-Orbit Metadata lats = [ float(metadata["first_meas_lat"]), float(metadata["last_meas_lat"]) ] lons = [ float(metadata["first_meas_lon"]), float(metadata["last_meas_lon"]) ] info.set_attribute("start_time", parse_datetime_str(metadata["first_meas_time"][4:])) info.set_attribute("stop_time", parse_datetime_str(metadata["last_meas_time"][4:])) info.set_attribute("lat_min", np.amin(lats)) info.set_attribute("lat_max", np.amax(lats)) info.set_attribute("lon_min", np.amin(lons)) info.set_attribute("lon_max", np.amax(lons)) # Product Content Metadata for mode in ["sar", "sin", "lrm"]: percent_value = 0.0 if mode == "sar": percent_value = 100. info.set_attribute("{}_mode_percent".format(mode), percent_value) info.set_attribute("open_ocean_percent", float(sral_info["sral:openOceanPercentage"]))
def _set_input_file_metadata(self): """ Fill the product info """ # Short cuts metadata = self.nc.attrs info = self.l1.info # Processing environment metadata info.set_attribute("pysiral_version", pysiral_version) # General product metadata info.set_attribute("mission", "cryosat2") info.set_attribute("mission_sensor", "siral") info.set_attribute("mission_data_version", "D") info.set_attribute("orbit", metadata["abs_orbit_start"]) info.set_attribute("cycle", metadata["cycle_number"]) info.set_attribute("mission_data_source", filename_from_path(self.filepath)) info.set_attribute( "timeliness", cs2_procstage2timeliness(metadata["processing_stage"])) # Time-Orbit Metadata lats = [ float(metadata["first_record_lat"]) * 1e-6, float(metadata["last_record_lat"]) * 1e-6 ] lons = [ float(metadata["first_record_lon"]) * 1e-6, float(metadata["last_record_lon"]) * 1e-6 ] info.set_attribute("start_time", parse_datetime_str( metadata["first_record_time"][4:])) # TAI=.... info.set_attribute("stop_time", parse_datetime_str( metadata["last_record_time"][4:])) # TAI=.... info.set_attribute("lat_min", np.amin(lats)) info.set_attribute("lat_max", np.amax(lats)) info.set_attribute("lon_min", np.amin(lons)) info.set_attribute("lon_max", np.amax(lons)) # Product Content Metadata for mode in ["sar", "sin", "lrm"]: percent_value = 0.0 if metadata["sir_op_mode"].strip().lower() == mode: percent_value = 100. info.set_attribute("{}_mode_percent".format(mode), percent_value) info.set_attribute("open_ocean_percent", float(metadata["open_ocean_percent"]) * 0.01)
def _transfer_metadata(self): info = self.l1b.info glah13 = self.glah13 # Processing System info info.set_attribute("pysiral_version", PYSIRAL_VERSION) # General CryoSat-2 metadata info.set_attribute("mission", self._mission) info.set_attribute("mission_data_version", glah13.product_version) info.set_attribute("orbit", glah13.get_attr("OrbitNumber")) info.set_attribute("is_merged_orbit", True) info.set_attribute("cycle", glah13.get_attr("Cycle")) info.set_attribute("mission_data_source", glah13.get_attr("LocalGranuleID")) info.set_attribute("timeliness", "REP") # Time-Orbit Metadata start_time = parse_datetime_str(glah13.get_attr("time_coverage_start")) stop_time = parse_datetime_str(glah13.get_attr("time_coverage_end")) info.set_attribute("start_time", start_time) info.set_attribute("stop_time", stop_time)