Beispiel #1
0
    def to_protobuf(self, version=2):
        """
        Return protobuf compliant measure log object representation
        of this class.

        Returns
        -------
        log_message : obj
                      MeasureLogData object suitable to append to a MeasureLog
                      repeated field.
        """
        # I do not see a better way to get to the inner MeasureLogData obj than this
        # imports were not working because it looks like these need to instantiate off
        # an object
        if version == 2:
            log_message = cnf.ControlPointFileEntryV0002().Measure(
            ).MeasureLogData()
        elif version == 5:
            log_message = cnp5.ControlPointFileEntryV0005().Measure(
            ).MeasureLogData()
        log_message.doubleDataValue = self.value
        log_message.doubleDataType = self.messagetype
        return log_message
Beispiel #2
0
    def read(self):
        """
        Given an ISIS store, read the underlying ISIS3 compatible control network and
        return an IsisControlNetwork dataframe.
        """
        pvl_header = pvl.load(self._path)
        header_start_byte = find_in_dict(pvl_header, 'HeaderStartByte')
        header_bytes = find_in_dict(pvl_header, 'HeaderBytes')
        point_start_byte = find_in_dict(pvl_header, 'PointsStartByte')
        version = find_in_dict(pvl_header, 'Version')

        if version == 2:
            self.point_attrs = [
                i for i in cnf._CONTROLPOINTFILEENTRYV0002.fields_by_name
                if i != 'measures'
            ]
            self.measure_attrs = [
                i
                for i in cnf._CONTROLPOINTFILEENTRYV0002_MEASURE.fields_by_name
            ]

            cp = cnf.ControlPointFileEntryV0002()
            self._handle.seek(header_start_byte)
            pbuf_header = cnf.ControlNetFileHeaderV0002()
            pbuf_header.ParseFromString(self._handle.read(header_bytes))

            self._handle.seek(point_start_byte)
            cp = cnf.ControlPointFileEntryV0002()
            pts = []
            for s in pbuf_header.pointMessageSizes:
                cp.ParseFromString(self._handle.read(s))
                pt = [
                    getattr(cp, i) for i in self.point_attrs if i != 'measures'
                ]

                for measure in cp.measures:
                    meas = pt + [
                        getattr(measure, j) for j in self.measure_attrs
                    ]
                    pts.append(meas)

        elif version == 5:
            self.point_attrs = [
                i for i in cnp5._CONTROLPOINTFILEENTRYV0005.fields_by_name
                if i != 'measures'
            ]
            self.measure_attrs = [
                i for i in
                cnp5._CONTROLPOINTFILEENTRYV0005_MEASURE.fields_by_name
            ]

            cp = cnp5.ControlPointFileEntryV0005()
            self._handle.seek(header_start_byte)
            pbuf_header = cnh5.ControlNetFileHeaderV0005()
            pbuf_header.ParseFromString(self._handle.read(header_bytes))

            self._handle.seek(point_start_byte)
            cp = cnp5.ControlPointFileEntryV0005()
            pts = []
            byte_count = 0
            while byte_count < find_in_dict(pvl_header, 'PointsBytes'):
                message_size = struct.unpack('I', self._handle.read(4))[0]
                cp.ParseFromString(self._handle.read(message_size))
                pt = [
                    getattr(cp, i) for i in self.point_attrs if i != 'measures'
                ]

                for measure in cp.measures:
                    meas = pt + [
                        getattr(measure, j) for j in self.measure_attrs
                    ]
                    pts.append(meas)

                byte_count += 4 + message_size

        # Some point and measure fields have the same name, so mangle them as point_ and measure_
        point_cols = [
            self.point_field_map[attr]
            if attr in self.point_field_map else attr
            for attr in self.point_attrs
        ]
        measure_cols = [
            self.measure_field_map[attr]
            if attr in self.measure_field_map else attr
            for attr in self.measure_attrs
        ]
        cols = point_cols + measure_cols
        df = IsisControlNetwork(pts, columns=cols)
        # Convert the (0.5, 0.5) origin pixels back to (0,0) pixels
        df['line'] -= 0.5
        df['sample'] -= 0.5
        df.header = pvl_header
        return df
Beispiel #3
0
    def read(self):
        """
        Given an ISIS store, read the underlying ISIS3 compatible control network and
        return an IsisControlNetwork dataframe.
        """
        pvl_header = pvl.load(self._path)
        header_start_byte = find_in_dict(pvl_header, 'HeaderStartByte')
        header_bytes = find_in_dict(pvl_header, 'HeaderBytes')
        point_start_byte = find_in_dict(pvl_header, 'PointsStartByte')
        version = find_in_dict(pvl_header, 'Version')

        if version == 2:
            self.point_attrs = [
                i for i in cnf._CONTROLPOINTFILEENTRYV0002.fields_by_name
                if i != 'measures'
            ]
            self.measure_attrs = [
                i
                for i in cnf._CONTROLPOINTFILEENTRYV0002_MEASURE.fields_by_name
            ]

            cp = cnf.ControlPointFileEntryV0002()
            self._handle.seek(header_start_byte)
            pbuf_header = cnf.ControlNetFileHeaderV0002()
            pbuf_header.ParseFromString(self._handle.read(header_bytes))

            self._handle.seek(point_start_byte)
            cp = cnf.ControlPointFileEntryV0002()
            pts = []
            for s in pbuf_header.pointMessageSizes:
                cp.ParseFromString(self._handle.read(s))
                pt = [
                    getattr(cp, i) for i in self.point_attrs if i != 'measures'
                ]

                for measure in cp.measures:
                    meas = pt + [
                        getattr(measure, j) for j in self.measure_attrs
                    ]
                    pts.append(meas)

        elif version == 5:
            self.point_attrs = [
                i for i in cnp5._CONTROLPOINTFILEENTRYV0005.fields_by_name
                if i != 'measures'
            ]
            self.measure_attrs = [
                i for i in
                cnp5._CONTROLPOINTFILEENTRYV0005_MEASURE.fields_by_name
            ]

            cp = cnp5.ControlPointFileEntryV0005()
            self._handle.seek(header_start_byte)
            pbuf_header = cnh5.ControlNetFileHeaderV0005()
            pbuf_header.ParseFromString(self._handle.read(header_bytes))

            self._handle.seek(point_start_byte)
            cp = cnp5.ControlPointFileEntryV0005()
            pts = []
            byte_count = 0
            while byte_count < find_in_dict(pvl_header, 'PointsBytes'):
                message_size = struct.unpack('I', self._handle.read(4))[0]
                cp.ParseFromString(self._handle.read(message_size))
                pt = [
                    getattr(cp, i) for i in self.point_attrs if i != 'measures'
                ]

                for measure in cp.measures:
                    meas = pt + [
                        getattr(measure, j) for j in self.measure_attrs
                    ]
                    pts.append(meas)

                byte_count += 4 + message_size
        self.point_attrs = [
            i if i != 'jigsawRejected' else 'pointJigsawRejected'
            for i in self.point_attrs
        ]
        cols = self.point_attrs + self.measure_attrs

        cols = self.point_attrs + self.measure_attrs
        df = IsisControlNetwork(pts, columns=cols)
        df.header = pvl_header
        return df