Пример #1
0
 class Item(Object):
     part_num = SKU.T(xmlstyle='attribute')
     product_name = String.T()
     quantity = Quantity.T()
     us_price = Float.T(xmltagname='USPrice')
     comment = Comment.T(optional=True)
     ship_date = DateTimestamp.T(optional=True)
Пример #2
0
class GNSSCampaign(Object):

    stations = List.T(GNSSStation.T(),
                      help='List of GNSS campaign measurements')

    name = String.T(help='Campaign name', default='Unnamed campaign')

    survey_start = DateTimestamp.T(optional=True)

    survey_end = DateTimestamp.T(optional=True)

    def add_station(self, station):
        return self.stations.append(station)

    def get_station(self, station_code):
        for sta in self.stations:
            if sta.code == station_code:
                return sta
        raise ValueError('Could not find station %s' % station_code)

    def get_center_latlon(self):
        return od.geographic_midpoint_locations(self.stations)

    def get_radius(self):
        coords = self.coordinates
        return od.distance_accurate50m(coords[:, 0].min(), coords[:, 1].min(),
                                       coords[:, 0].max(),
                                       coords[:, 1].max()) / 2.

    @property
    def coordinates(self):
        return num.array([loc.effective_latlon for loc in self.stations])

    @property
    def nstations(self):
        return len(self.stations)
Пример #3
0
class GNSSStation(Location):
    ''' Representation of a GNSS station during a campaign measurement

    For more information see
    http://kb.unavco.org/kb/assets/660/UNAVCO_Campaign_GPS_GNSS_Handbook.pdf
    '''

    code = String.T(help='Four letter station code', optional=True)

    style = StringChoice.T(choices=['static', 'rapid_static', 'kinematic'],
                           default='static')

    survey_start = DateTimestamp.T(optional=True)

    survey_end = DateTimestamp.T(optional=True)

    north = GNSSComponent.T(default=GNSSComponent.D())

    east = GNSSComponent.T(default=GNSSComponent.D())

    up = GNSSComponent.T(default=GNSSComponent.D())

    def __init__(self, *args, **kwargs):
        Location.__init__(self, *args, **kwargs)
Пример #4
0
class GNSSStation(Location):
    ''' Representation of a GNSS station during a campaign measurement

    For more information see
    http://kb.unavco.org/kb/assets/660/UNAVCO_Campaign_GPS_GNSS_Handbook.pdf
    '''

    code = String.T(help='Four letter station code', optional=True)

    style = StringChoice.T(choices=['static', 'rapid_static', 'kinematic'],
                           default='static')

    survey_start = DateTimestamp.T(optional=True, help='Survey start time')

    survey_end = DateTimestamp.T(optional=True, help='Survey end time')

    correlation_ne = Float.T(default=0.,
                             help='North-East component correlation')

    correlation_eu = Float.T(default=0., help='East-Up component correlation')

    correlation_nu = Float.T(default=0., help='North-Up component correlation')

    north = GNSSComponent.T(optional=True)

    east = GNSSComponent.T(optional=True)

    up = GNSSComponent.T(optional=True)

    def __eq__(self, other):
        try:
            return self.code == other.code
        except AttributeError:
            return False

    def get_covariance_matrix(self):
        components = self.components.values()
        ncomponents = self.ncomponents

        covar = num.zeros((ncomponents, ncomponents))
        for ic1, comp1 in enumerate(components):
            for ic2, comp2 in enumerate(components):
                corr = self._get_comp_correlation(comp1, comp2)
                covar[ic1, ic2] = corr * comp1.sigma * comp2.sigma

        # This floating point operation is inaccurate:
        # corr * comp1.sigma * comp2.sigma != corr * comp2.sigma * comp1.sigma
        #
        # Hence this identity
        covar[num.tril_indices_from(covar, k=-1)] = \
            covar[num.triu_indices_from(covar, k=1)]

        return covar

    def get_correlation_matrix(self):
        components = self.components.values()
        ncomponents = self.ncomponents

        corr = num.zeros((ncomponents, ncomponents))
        corr[num.diag_indices_from(corr)] = num.array(
            [c.sigma for c in components])

        for ic1, comp1 in enumerate(components):
            for ic2, comp2 in enumerate(components):
                if comp1 is comp2:
                    continue
                corr[ic1, ic2] = self._get_comp_correlation(comp1, comp2)

        # See comment at get_covariance_matrix
        corr[num.tril_indices_from(corr, k=-1)] = \
            corr[num.triu_indices_from(corr, k=1)]

        return corr

    def get_displacement_data(self):
        return num.array([c.shift for c in self.components.values()])

    def get_component_mask(self):
        return num.array([
            False if self.__getattribute__(name) is None else True
            for name in ('north', 'east', 'up')
        ],
                         dtype=num.bool)

    @property
    def components(self):
        return OrderedDict([(name, self.__getattribute__(name))
                            for name in ('north', 'east', 'up')
                            if self.__getattribute__(name) is not None])

    @property
    def ncomponents(self):
        return len(self.components)

    def _get_comp_correlation(self, comp1, comp2):
        if comp1 is comp2:
            return 1.

        s = self

        correlation_map = {
            (s.north, s.east): s.correlation_ne,
            (s.east, s.up): s.correlation_eu,
            (s.north, s.up): s.correlation_nu
        }

        return correlation_map.get((comp1, comp2),
                                   correlation_map.get((comp2, comp1), False))
Пример #5
0
class GNSSCampaign(Object):

    stations = List.T(GNSSStation.T(),
                      help='List of GNSS campaign measurements')

    name = String.T(help='Campaign name', default='Unnamed campaign')

    survey_start = DateTimestamp.T(optional=True)

    survey_end = DateTimestamp.T(optional=True)

    def __init__(self, *args, **kwargs):
        Object.__init__(self, *args, **kwargs)
        self._cov_mat = None
        self._cor_mat = None

    def add_station(self, station):
        self._cor_mat = None
        self._cov_mat = None
        return self.stations.append(station)

    def remove_station(self, station_code):
        try:
            station = self.get_station(station_code)
            self.stations.remove(station)
            self._cor_mat = None
            self._cov_mat = None
        except ValueError:
            logger.warn('Station {} does not exist in campaign, '
                        'do nothing.'.format(station_code))

    def get_station(self, station_code):
        for sta in self.stations:
            if sta.code == station_code:
                return sta
        raise ValueError('Could not find station %s' % station_code)

    def get_center_latlon(self):
        return od.geographic_midpoint_locations(self.stations)

    def get_radius(self):
        coords = self.coordinates
        return od.distance_accurate50m(coords[:, 0].min(), coords[:, 1].min(),
                                       coords[:, 0].max(),
                                       coords[:, 1].max()) / 2.

    def get_covariance_matrix(self):
        if self._cov_mat is None:
            ncomponents = self.ncomponents
            cov_arr = num.zeros((ncomponents, ncomponents))

            idx = 0
            for ista, sta in enumerate(self.stations):
                ncomp = sta.ncomponents
                cov_arr[idx:idx+ncomp, idx:idx+ncomp] = \
                    sta.get_covariance_matrix()
                idx += ncomp

            self._cov_mat = cov_arr
        return self._cov_mat

    def get_correlation_matrix(self):
        if self._cor_mat is None:
            ncomponents = self.ncomponents
            cor_arr = num.zeros((ncomponents, ncomponents))

            idx = 0
            for ista, sta in enumerate(self.stations):
                ncomp = sta.ncomponents
                cor_arr[idx:idx+ncomp, idx:idx+ncomp] = \
                    sta.get_correlation_matrix()
                idx += ncomp

            self._cor_mat = cor_arr
        return self._cor_mat

    def get_component_mask(self):
        return num.concatenate([s.get_component_mask() for s in self.stations])

    def dump(self, *args, **kwargs):
        self.regularize()
        return Object.dump(self, *args, **kwargs)

    @property
    def coordinates(self):
        return num.array([loc.effective_latlon for loc in self.stations])

    @property
    def nstations(self):
        return len(self.stations)

    @property
    def ncomponents(self):
        return sum([s.ncomponents for s in self.stations])
Пример #6
0
 class PurchaseOrderType(Object):
     order_date = DateTimestamp.T(optional=True, xmlstyle='attribute')
     ship_to = USAddress.T()
     bill_to = USAddress.T()
     comment = Comment.T(optional=True)
     items = Items.T()
Пример #7
0
class GNSSStation(Location):
    ''' Representation of a GNSS station during a campaign measurement

    For more information see
    http://kb.unavco.org/kb/assets/660/UNAVCO_Campaign_GPS_GNSS_Handbook.pdf
    '''

    code = String.T(
        help='Four letter station code',
        optional=True)

    style = StringChoice.T(
        choices=['static', 'rapid_static', 'kinematic'],
        default='static')

    survey_start = DateTimestamp.T(
        optional=True,
        help='Survey start time')

    survey_end = DateTimestamp.T(
        optional=True,
        help='Survey end time')

    correlation_ne = Float.T(
        optional=True,
        help='North-East component correlation')

    correlation_eu = Float.T(
        optional=True,
        help='East-Up component correlation')

    correlation_nu = Float.T(
        optional=True,
        help='North-Up component correlation')

    north = GNSSComponent.T(
        default=GNSSComponent.D())

    east = GNSSComponent.T(
        default=GNSSComponent.D())

    up = GNSSComponent.T(
        default=GNSSComponent.D())

    def __init__(self, *args, **kwargs):
        Location.__init__(self, *args, **kwargs)

    def get_covariance_matrix(self, full=True):
        s = self

        covar = num.zeros((3, 3))
        covar[num.diag_indices_from(covar)] = num.array(
            [c.sigma**2 for c in (s.north, s.east, s.up)])

        if s.correlation_ne is not None:
            covar[0, 1] = s.correlation_ne * s.north.sigma * s.east.sigma
        if s.correlation_nu is not None:
            covar[0, 2] = s.correlation_nu * s.north.sigma * s.up.sigma
        if s.correlation_eu is not None:
            covar[1, 2] = s.correlation_eu * s.east.sigma * s.up.sigma

        if full:
            covar[num.tril_indices_from(covar, k=-1)] = \
                covar[num.triu_indices_from(covar, k=1)]

        return covar

    def get_correlation_matrix(self, full=True):
        s = self

        corr = num.zeros((3, 3))
        corr[num.diag_indices_from(corr)] = num.array(
            [c.sigma for c in (s.north, s.east, s.up)])

        if s.correlation_ne is not None:
            corr[0, 1] = s.correlation_ne
        if s.correlation_nu is not None:
            corr[0, 2] = s.correlation_nu
        if s.correlation_eu is not None:
            corr[1, 2] = s.correlation_eu

        if full:
            corr[num.tril_indices_from(corr, k=-1)] = \
                corr[num.triu_indices_from(corr, k=1)]

        return corr
Пример #8
0
class GNSSCampaign(Object):

    stations = List.T(
        GNSSStation.T(),
        help='List of GNSS campaign measurements')

    name = String.T(
        help='Campaign name',
        default='Unnamed campaign')

    survey_start = DateTimestamp.T(
        optional=True)

    survey_end = DateTimestamp.T(
        optional=True)

    def __init__(self, *args, **kwargs):
        Object.__init__(self, *args, **kwargs)
        self._cov_mat = None
        self._cor_mat = None

    def add_station(self, station):
        return self.stations.append(station)

    def get_station(self, station_code):
        for sta in self.stations:
            if sta.code == station_code:
                return sta
        raise ValueError('Could not find station %s' % station_code)

    def get_center_latlon(self):
        return od.geographic_midpoint_locations(self.stations)

    def get_radius(self):
        coords = self.coordinates
        return od.distance_accurate50m(
            coords[:, 0].min(), coords[:, 1].min(),
            coords[:, 0].max(), coords[:, 1].max()) / 2.

    def get_covariance_matrix(self):
        if self._cov_mat is None:
            cov_arr = num.zeros((self.nstations*3, self.nstations*3))

            for ista, sta in enumerate(self.stations):
                cov_arr[ista*3:ista*3+3, ista*3:ista*3+3] = \
                    sta.get_covariance_matrix(full=True)

            self._cov_mat = cov_arr
        return self._cov_mat

    def get_correlation_matrix(self):
        if self._cor_mat is None:
            cov_arr = num.zeros((self.nstations*3, self.nstations*3))

            for ista, sta in enumerate(self.stations):
                cov_arr[ista*3:ista*3+3, ista*3:ista*3+3] = \
                    sta.get_correlation_matrix(full=True)

            self._cor_mat = cov_arr
        return self._cor_mat

    def dump(self, *args, **kwargs):
        self.regularize()
        Object.dump(self, *args, **kwargs)

    @property
    def coordinates(self):
        return num.array([loc.effective_latlon for loc in self.stations])

    @property
    def nstations(self):
        return len(self.stations)