def read_metadata(prologue, image_files, epilogue): """ Selected items from the MSG prologue file. """ segment_size = 464 # number of lines in a segment fp = StringIO(prologue.data) hdr = read_proheader(fp) fp = StringIO(epilogue.data) ftr = read_epiheader(fp) im = _xrit.read_imagedata(image_files[0]) md = Metadata() md.calibrate = _Calibrator(hdr, im.product_name) md.sublon = hdr["ProjectionDescription"]["LongitudeOfSSP"] md.product_name = im.product_id md.channel = im.product_name if md.channel == "HRV": md.image_size = np.array((hdr["ReferenceGridHRV"]["NumberOfLines"], hdr["ReferenceGridHRV"]["NumberOfColumns"])) else: md.image_size = np.array((hdr["ReferenceGridVIS_IR"]["NumberOfLines"], hdr["ReferenceGridVIS_IR"]["NumberOfColumns"])) md.satname = im.platform.lower() md.product_type = 'full disc' md.region_name = 'full disc' if md.channel == "HRV": md.first_pixel = hdr["ReferenceGridHRV"]["GridOrigin"] ns_, ew_ = md.first_pixel.split() md.boundaries = np.array([[ ftr["LowerSouthLineActual"], ftr["LowerNorthLineActual"], ftr["LowerEastColumnActual"], ftr["LowerWestColumnActual"]], [ftr["UpperSouthLineActual"], ftr["UpperNorthLineActual"], ftr["UpperEastColumnActual"], ftr["UpperWestColumnActual"]]]) md.coff = (ftr["Lower"+ew_.capitalize()+"ColumnActual"] + im.navigation.coff - 1) md.loff = im.navigation.loff + segment_size * (im.segment.seg_no - 1) else: md.first_pixel = hdr["ReferenceGridVIS_IR"]["GridOrigin"] ns_, ew_ = md.first_pixel.split() md.boundaries = np.array([[ ftr["SouthernLineActual"], ftr["NorthernLineActual"], ftr["EasternColumnActual"], ftr["WesternColumnActual"]]]) md.coff = im.navigation.coff md.loff = im.navigation.loff + segment_size * (im.segment.seg_no - 1) md.data_type = im.structure.nb md.no_data_value = no_data_value md.line_offset = 0 md.time_stamp = im.time_stamp md.production_time = im.production_time md.calibration_unit = 'counts' return md
def read_metadata(prologue, image_files, epilogue): """ Selected items from the MSG prologue file. """ segment_size = 464 # number of lines in a segment fp = StringIO(prologue.data) hdr = read_proheader(fp) fp = StringIO(epilogue.data) ftr = read_epiheader(fp) try: im = _xrit.read_imagedata(image_files[0]) except IndexError: raise ReaderError("No image segments available") md = Metadata() md.calibrate = _Calibrator(hdr, im.product_name, bits_per_pixel=im.structure.nb) md.sublon = hdr["ProjectionDescription"]["LongitudeOfSSP"] md.product_name = im.product_id md.channel = im.product_name if md.channel == "HRV": md.image_size = np.array((hdr["ReferenceGridHRV"]["NumberOfLines"], hdr["ReferenceGridHRV"]["NumberOfColumns"])) else: md.image_size = np.array( (hdr["ReferenceGridVIS_IR"]["NumberOfLines"], hdr["ReferenceGridVIS_IR"]["NumberOfColumns"])) md.satname = im.platform.lower() md.satnumber = SATNUM[hdr["SatelliteDefinition"]["SatelliteId"]] logger.debug("%s %s", md.satname, md.satnumber) md.product_type = 'full disc' md.region_name = 'full disc' if md.channel == "HRV": md.first_pixel = hdr["ReferenceGridHRV"]["GridOrigin"] ns_, ew_ = md.first_pixel.split() md.boundaries = np.array([[ ftr["LowerSouthLineActual"], ftr["LowerNorthLineActual"], ftr["LowerEastColumnActual"], ftr["LowerWestColumnActual"] ], [ ftr["UpperSouthLineActual"], ftr["UpperNorthLineActual"], ftr["UpperEastColumnActual"], ftr["UpperWestColumnActual"] ]]) md.coff = (ftr["Lower" + ew_.capitalize() + "ColumnActual"] - 1 + im.navigation.coff - 1) md.loff = im.navigation.loff + \ segment_size * (im.segment.seg_no - 1) - 1 if (hdr["GeometricProcessing"]["EarthModel"]["TypeOfEarthModel"] < 2): md.coff += 1.5 md.loff += 1.5 else: md.first_pixel = hdr["ReferenceGridVIS_IR"]["GridOrigin"] ns_, ew_ = md.first_pixel.split() md.boundaries = np.array([[ ftr["SouthernLineActual"], ftr["NorthernLineActual"], ftr["EasternColumnActual"], ftr["WesternColumnActual"] ]]) md.coff = im.navigation.coff - 1 md.loff = im.navigation.loff + \ segment_size * (im.segment.seg_no - 1) - 1 if (hdr["GeometricProcessing"]["EarthModel"]["TypeOfEarthModel"] < 2): md.coff += .5 md.loff += .5 md.x_pixel_size = np.deg2rad(2.**16 / im.navigation.cfac) * MSG_HEIGHT * -1 md.y_pixel_size = np.deg2rad(2.**16 / im.navigation.lfac) * MSG_HEIGHT * -1 md.data_type = im.structure.nb md.no_data_value = no_data_value md.line_offset = 0 md.time_stamp = im.time_stamp md.production_time = im.production_time md.calibration_unit = "" return md
def read_metadata(prologue, image_files, epilogue): """ Selected items from the MSG prologue file. """ segment_size = 464 # number of lines in a segment fp = StringIO(prologue.data) hdr = read_proheader(fp) fp = StringIO(epilogue.data) ftr = read_epiheader(fp) im = _xrit.read_imagedata(image_files[0]) md = Metadata() md.calibrate = _Calibrator(hdr, im.product_name) md.sublon = hdr["ProjectionDescription"]["LongitudeOfSSP"] md.product_name = im.product_id md.channel = im.product_name if md.channel == "HRV": md.image_size = np.array((hdr["ReferenceGridHRV"]["NumberOfLines"], hdr["ReferenceGridHRV"]["NumberOfColumns"])) else: md.image_size = np.array( (hdr["ReferenceGridVIS_IR"]["NumberOfLines"], hdr["ReferenceGridVIS_IR"]["NumberOfColumns"])) md.satname = im.platform.lower() md.product_type = 'full disc' md.region_name = 'full disc' if md.channel == "HRV": md.first_pixel = hdr["ReferenceGridHRV"]["GridOrigin"] ns_, ew_ = md.first_pixel.split() md.boundaries = np.array([[ ftr["LowerSouthLineActual"], ftr["LowerNorthLineActual"], ftr["LowerEastColumnActual"], ftr["LowerWestColumnActual"] ], [ ftr["UpperSouthLineActual"], ftr["UpperNorthLineActual"], ftr["UpperEastColumnActual"], ftr["UpperWestColumnActual"] ]]) md.coff = (ftr["Lower" + ew_.capitalize() + "ColumnActual"] + im.navigation.coff - 1) md.loff = im.navigation.loff + segment_size * (im.segment.seg_no - 1) else: md.first_pixel = hdr["ReferenceGridVIS_IR"]["GridOrigin"] ns_, ew_ = md.first_pixel.split() md.boundaries = np.array([[ ftr["SouthernLineActual"], ftr["NorthernLineActual"], ftr["EasternColumnActual"], ftr["WesternColumnActual"] ]]) md.coff = im.navigation.coff md.loff = im.navigation.loff + segment_size * (im.segment.seg_no - 1) md.data_type = im.structure.nb md.no_data_value = no_data_value md.line_offset = 0 md.time_stamp = im.time_stamp md.production_time = im.production_time md.calibration_unit = 'counts' return md
def _get_metadata(hdr, ftr, channel_name): md = Metadata() md.calibrate = _Calibrator(hdr, channel_name) if channel_name == "HRV": md.pixel_size = (1000.134348869, 1000.134348869) else: md.pixel_size = (3000.403165817, 3000.403165817) md.sublon = hdr["ProjectionDescription"]["LongitudeOfSSP"] md.channel = channel_name if md.channel == "HRV": md.image_size = np.array((hdr["ReferenceGridHRV"]["NumberOfLines"], hdr["ReferenceGridHRV"]["NumberOfColumns"])) else: md.image_size = np.array((hdr["ReferenceGridVIS_IR"]["NumberOfLines"], hdr["ReferenceGridVIS_IR"]["NumberOfColumns"])) #md.satname = im.platform.lower() md.product_type = 'full disc' md.region_name = 'full disc' if md.channel == "HRV": md.first_pixel = hdr["ReferenceGridHRV"]["GridOrigin"] ns_, ew_ = md.first_pixel.split() del ns_ md.boundaries = np.array([[ ftr["LowerSouthLineActual"], ftr["LowerNorthLineActual"], ftr["LowerEastColumnActual"], ftr["LowerWestColumnActual"]], [ftr["UpperSouthLineActual"], ftr["UpperNorthLineActual"], ftr["UpperEastColumnActual"], ftr["UpperWestColumnActual"]]]) hcoff = 1856 * 3 hloff = 1856 * 3 md.coff = (ftr["Lower"+ew_.capitalize()+"ColumnActual"] + hcoff - 1) md.loff = hloff else: md.first_pixel = hdr["ReferenceGridVIS_IR"]["GridOrigin"] ns_, ew_ = md.first_pixel.split() md.boundaries = np.array([[ ftr["SouthernLineActual"], ftr["NorthernLineActual"], ftr["EasternColumnActual"], ftr["WesternColumnActual"]]]) lcoff = 1856 lloff = 1856 md.coff = lcoff md.loff = lloff md.no_data_value = no_data_value md.line_offset = 0 #md.time_stamp = im.time_stamp #md.production_time = im.production_time md.calibration_unit = 'counts' return md
def read_metadata(prologue, image_files, epilogue): """ Selected items from the MSG prologue file. """ segment_size = 464 # number of lines in a segment fp = StringIO(prologue.data) hdr = read_proheader(fp) fp = StringIO(epilogue.data) ftr = read_epiheader(fp) try: im = _xrit.read_imagedata(image_files[0]) except IndexError: raise ReaderError("No image segments available") md = Metadata() md.calibrate = _Calibrator( hdr, im.product_name, bits_per_pixel=im.structure.nb) md.sublon = hdr["ProjectionDescription"]["LongitudeOfSSP"] md.product_name = im.product_id md.channel = im.product_name if md.channel == "HRV": md.image_size = np.array((hdr["ReferenceGridHRV"]["NumberOfLines"], hdr["ReferenceGridHRV"]["NumberOfColumns"])) else: md.image_size = np.array((hdr["ReferenceGridVIS_IR"]["NumberOfLines"], hdr["ReferenceGridVIS_IR"]["NumberOfColumns"])) md.satname = im.platform.lower() md.satnumber = SATNUM[hdr["SatelliteDefinition"]["SatelliteId"]] logger.debug("%s %s", md.satname, md.satnumber) md.product_type = 'full disc' md.region_name = 'full disc' if md.channel == "HRV": md.first_pixel = hdr["ReferenceGridHRV"]["GridOrigin"] ns_, ew_ = md.first_pixel.split() md.boundaries = np.array([[ ftr["LowerSouthLineActual"], ftr["LowerNorthLineActual"], ftr["LowerEastColumnActual"], ftr["LowerWestColumnActual"]], [ftr["UpperSouthLineActual"], ftr["UpperNorthLineActual"], ftr["UpperEastColumnActual"], ftr["UpperWestColumnActual"]]]) md.coff = (ftr["Lower" + ew_.capitalize() + "ColumnActual"] - 1 + im.navigation.coff - 1) md.loff = im.navigation.loff + \ segment_size * (im.segment.seg_no - 1) - 1 if (hdr["GeometricProcessing"]["EarthModel"]["TypeOfEarthModel"] < 2): md.coff += 1.5 md.loff += 1.5 else: md.first_pixel = hdr["ReferenceGridVIS_IR"]["GridOrigin"] ns_, ew_ = md.first_pixel.split() md.boundaries = np.array([[ ftr["SouthernLineActual"], ftr["NorthernLineActual"], ftr["EasternColumnActual"], ftr["WesternColumnActual"]]]) md.coff = im.navigation.coff - 1 md.loff = im.navigation.loff + \ segment_size * (im.segment.seg_no - 1) - 1 if (hdr["GeometricProcessing"]["EarthModel"]["TypeOfEarthModel"] < 2): md.coff += .5 md.loff += .5 md.x_pixel_size = np.deg2rad(2.**16 / im.navigation.cfac) * MSG_HEIGHT * -1 md.y_pixel_size = np.deg2rad(2.**16 / im.navigation.lfac) * MSG_HEIGHT * -1 md.data_type = im.structure.nb md.no_data_value = no_data_value md.line_offset = 0 md.time_stamp = im.time_stamp md.production_time = im.production_time md.calibration_unit = "" return md