Пример #1
0
def test_create_buffer_header(cnet_dataframe, tmpdir):
    with open(tmpdir.join('test.net'), 'rb') as f:

        f.seek(io_controlnetwork.HEADERSTARTBYTE)
        raw_header_message = f.read(cnet_dataframe.header_message_size)
        header_protocol = cnf.ControlNetFileHeaderV0002()
        header_protocol.ParseFromString(raw_header_message)
        #Non-repeating
        #self.assertEqual('None', header_protocol.networkId)
        assert 'Moon' == header_protocol.targetName
        assert io_controlnetwork.DEFAULTUSERNAME == header_protocol.userName
        assert cnet_dataframe.creation_date == header_protocol.created
        assert 'None' == header_protocol.description
        assert cnet_dataframe.modified_date == header_protocol.lastModified
        #Repeating
        assert cnet_dataframe.measure_size == header_protocol.pointMessageSizes
Пример #2
0
    def create_buffer_header(self, networkid, targetname,
                             description, username, point_sizes,
                             creation_date,
                             modified_date):
        """
        Create the Google Protocol Buffer header using the
        protobuf spec.

        Parameters
        ----------
        networkid : str
                    The user defined identifier of this control network

        targetname : str
                 The name of the target, e.g. Moon

        description : str
                  A description for the network.

        username : str
               The name of the user / application that created the control network

        point_sizes : list
                      of the point sizes for each point message

        Returns
        -------
        header_message : str
                  The serialized message to write

        header_message_size : int
                              The size of the serialized header, in bytes
        """
        raw_header_message = cnf.ControlNetFileHeaderV0002()
        raw_header_message.created = creation_date
        raw_header_message.lastModified = modified_date
        raw_header_message.networkId = networkid
        raw_header_message.description = description
        raw_header_message.targetName = targetname
        raw_header_message.userName = username
        raw_header_message.pointMessageSizes.extend(point_sizes)

        header_message_size = raw_header_message.ByteSize()
        header_message = raw_header_message.SerializeToString()

        return header_message, header_message_size
Пример #3
0
    def test_create_buffer_header(self):
        npts = 5
        serial_times = {
            295: '1971-07-31T01:24:11.754',
            296: '1971-07-31T01:24:36.970'
        }
        serials = {
            i: 'APOLLO15/METRIC/{}'.format(j)
            for i, j in enumerate(serial_times.values())
        }
        columns = [
            'id', 'pointType', 'serialnumber', 'measureType', 'sample', 'line',
            'image_index'
        ]

        data = []
        for i in range(self.npts):
            data.append((i, 2, serials[0], 2, 0, 0, 0))
            data.append((i, 2, serials[1], 2, 0, 0, 1))

        df = pd.DataFrame(data, columns=columns)

        self.creation_date = strftime("%Y-%m-%d %H:%M:%S", gmtime())
        self.modified_date = strftime("%Y-%m-%d %H:%M:%S", gmtime())
        io_controlnetwork.to_isis(df, 'test.net', mode='wb', targetname='Moon')

        self.header_message_size = 78
        self.point_start_byte = 65614  # 66949

        with open('test.net', 'rb') as f:
            f.seek(io_controlnetwork.HEADERSTARTBYTE)
            raw_header_message = f.read(self.header_message_size)
            header_protocol = cnf.ControlNetFileHeaderV0002()
            header_protocol.ParseFromString(raw_header_message)
            #Non-repeating
            #self.assertEqual('None', header_protocol.networkId)
            self.assertEqual('Moon', header_protocol.targetName)
            self.assertEqual(io_controlnetwork.DEFAULTUSERNAME,
                             header_protocol.userName)
            self.assertEqual(self.creation_date, header_protocol.created)
            self.assertEqual('None', header_protocol.description)
            self.assertEqual(self.modified_date, header_protocol.lastModified)
            #Repeating
            self.assertEqual([135] * self.npts,
                             header_protocol.pointMessageSizes)
Пример #4
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:
            point_attrs = [
                i for i in cnf._CONTROLPOINTFILEENTRYV0002.fields_by_name
                if i != 'measures'
            ]
            measure_attrs = [
                i
                for i in cnf._CONTROLPOINTFILEENTRYV0002_MEASURE.fields_by_name
            ]

        cols = point_attrs + measure_attrs

        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 point_attrs if i != 'measures']

            for measure in cp.measures:
                meas = pt + [getattr(measure, j) for j in measure_attrs]
                pts.append(meas)
        df = IsisControlNetwork(pts, columns=cols)
        df.header = pvl_header
        return df
Пример #5
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
Пример #6
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