Exemple #1
0
    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)
Exemple #2
0
    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"]))
Exemple #3
0
    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)
Exemple #4
0
    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)