diff --git a/plio/io/io_controlnetwork.py b/plio/io/io_controlnetwork.py index 87b877a604648018d03daedd4f8695890c28ea40..a52d58097723627958bf7bbc54c847e57c8f60e0 100644 --- a/plio/io/io_controlnetwork.py +++ b/plio/io/io_controlnetwork.py @@ -1,6 +1,7 @@ from time import gmtime, strftime import pandas as pd +import numpy as np import pvl from plio.io import ControlNetFileV0002_pb2 as cnf @@ -189,19 +190,19 @@ class IsisStore(object): 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)) + cp.ParseFromString(self._handle.read(s)) pt = [getattr(cp, i) for i in point_attrs if i != 'measures'] for measure in cp.measures: @@ -267,24 +268,24 @@ class IsisStore(object): # As per protobuf docs for assigning to a repeated field. if attr == 'aprioriCovar': arr = g.iloc[0]['aprioriCovar'] - point_spec.aprioriCovar.extend(arr.ravel().tolist()) + if isinstance(arr, np.ndarray): + arr = arr.ravel().tolist() + + point_spec.aprioriCovar.extend(arr) else: setattr(point_spec, attr, attrtype(g.iloc[0][attr])) - point_spec.type = 2 # Hardcoded to free + point_spec.type = 2 # Hardcoded to free this is bad # The reference index should always be the image with the lowest index point_spec.referenceIndex = 0 - # A single extend call is cheaper than many add calls to pack points measure_iterable = [] - for node_id, m in g.iterrows(): measure_spec = point_spec.Measure() # For all of the attributes, set if they are an dict accessible attr of the obj. for attr, attrtype in self.measure_attrs: if attr in g.columns: setattr(measure_spec, attr, attrtype(m[attr])) - measure_spec.serialnumber = serials[m.image_index] measure_spec.sample = m.x measure_spec.line = m.y @@ -298,7 +299,6 @@ class IsisStore(object): point_message = point_spec.SerializeToString() point_sizes.append(point_spec.ByteSize()) point_messages.append(point_message) - return point_messages, point_sizes def create_buffer_header(self, networkid, targetname,