def testSObject(self): class DotName(SObject): network = String.T() station = String.T() def __init__(self, s=None, **kwargs): if s is not None: network, station = s.split('.') kwargs = dict(network=network, station=station) SObject.__init__(self, **kwargs) def __str__(self): return '.'.join((self.network, self.station)) class X(Object): xmltagname = 'root' dn = DotName.T() x = X(dn=DotName(network='abc', station='def')) self.assertEqual(x.dn.network, 'abc') self.assertEqual(x.dn.station, 'def') x = load_string(dump(x)) self.assertEqual(x.dn.network, 'abc') self.assertEqual(x.dn.station, 'def') x = load_xml_string(dump_xml(x)) self.assertEqual(x.dn.network, 'abc') self.assertEqual(x.dn.station, 'def')
def call(self): if not self.viewer_connected: self.get_viewer().about_to_close.connect( self.file_serving_worker.stop) self.viewer_connected = True try: from OpenGL import GL # noqa except ImportError: logger.warn('Could not find package OpenGL, ' 'if the map does not work try installing OpenGL\n' 'e.g. sudo pip install PyOpenGL') self.cleanup() try: viewer = self.get_viewer() cli_mode = False except NoViewerSet: viewer = None cli_mode = True if not cli_mode: if self.only_active: _, active_stations = \ self.get_active_event_and_stations() else: active_stations = viewer.stations.values() elif cli_mode: active_stations = self.stations station_list = [] if active_stations: for stat in active_stations: is_blacklisted = util.match_nslc(viewer.blacklist, stat.nsl()) if (viewer and not is_blacklisted) or cli_mode: xml_station_marker = XMLStationMarker( nsl='.'.join(stat.nsl()), longitude=float(stat.lon), latitude=float(stat.lat), active='yes') station_list.append(xml_station_marker) active_station_list = StationMarkerList(stations=station_list) if self.only_active: markers = [viewer.get_active_event_marker()] else: if cli_mode: markers = self.markers else: markers = self.get_selected_markers() if len(markers) == 0: tmin, tmax = self.get_selected_time_range(fallback=True) markers = [ m for m in viewer.get_markers() if isinstance(m, gui_util.EventMarker) and m.tmin >= tmin and m.tmax <= tmax ] ev_marker_list = [] for m in markers: if not isinstance(m, gui_util.EventMarker): continue xmleventmarker = convert_event_marker(m) if xmleventmarker is None: continue ev_marker_list.append(xmleventmarker) event_list = EventMarkerList(events=ev_marker_list) event_station_list = MarkerLists( station_marker_list=active_station_list, event_marker_list=event_list) event_station_list.validate() if self.map_kind != 'GMT': tempdir = self.marker_tempdir if self.map_kind == 'Google Maps': map_fn = 'map_googlemaps.html' elif self.map_kind == 'OpenStreetMap': map_fn = 'map_osm.html' url = 'http://localhost:' + str(self.port) + '/%s' % map_fn files = ['loadxmldoc.js', 'map_util.js', 'plates.kml', map_fn] snuffling_dir = op.dirname(op.abspath(__file__)) for entry in files: shutil.copy(os.path.join(snuffling_dir, entry), os.path.join(tempdir, entry)) logger.debug('copied data to %s' % tempdir) markers_fn = os.path.join(self.marker_tempdir, 'markers.xml') self.data_proxy.content_to_serve.emit(self.port) dump_xml(event_station_list, filename=markers_fn) if self.open_external: qg.QDesktopServices.openUrl(qc.QUrl(url)) else: global g_counter g_counter += 1 self.web_frame(url, name='Map %i (%s)' % (g_counter, self.map_kind)) else: lats_all = [] lons_all = [] slats = [] slons = [] slabels = [] for s in active_stations: slats.append(s.lat) slons.append(s.lon) slabels.append('.'.join(s.nsl())) elats = [] elons = [] elats = [] elons = [] psmeca_input = [] markers = self.get_selected_markers() for m in markers: if isinstance(m, gui_util.EventMarker): e = m.get_event() elats.append(e.lat) elons.append(e.lon) if e.moment_tensor is not None: mt = e.moment_tensor.m6() psmeca_input.append((e.lon, e.lat, e.depth / 1000., mt[0], mt[1], mt[2], mt[3], mt[4], mt[5], 1., e.lon, e.lat, e.name)) else: if e.magnitude is None: moment = -1. else: moment = moment_tensor.magnitude_to_moment( e.magnitude) psmeca_input.append( (e.lon, e.lat, e.depth / 1000., moment / 3., moment / 3., moment / 3., 0., 0., 0., 1., e.lon, e.lat, e.name)) lats_all.extend(elats) lons_all.extend(elons) lats_all.extend(slats) lons_all.extend(slons) lats_all = num.array(lats_all) lons_all = num.array(lons_all) if len(lats_all) == 0: return center_lat, center_lon = ortho.geographic_midpoint( lats_all, lons_all) ntotal = len(lats_all) clats = num.ones(ntotal) * center_lat clons = num.ones(ntotal) * center_lon dists = ortho.distance_accurate50m_numpy(clats, clons, lats_all, lons_all) maxd = num.max(dists) or 0. m = Map(lat=center_lat, lon=center_lon, radius=max(10000., maxd) * 1.1, width=35, height=25, show_grid=True, show_topo=True, color_dry=(238, 236, 230), topo_cpt_wet='light_sea_uniform', topo_cpt_dry='light_land_uniform', illuminate=True, illuminate_factor_ocean=0.15, show_rivers=False, show_plates=False) m.gmt.psxy(in_columns=(slons, slats), S='t15p', G='black', *m.jxyr) for i in range(len(active_stations)): m.add_label(slats[i], slons[i], slabels[i]) m.gmt.psmeca(in_rows=psmeca_input, S='m1.0', G='red', C='5p,0/0/0', *m.jxyr) tmpdir = self.tempdir() self.outfn = os.path.join(tmpdir, '%i.png' % self.figcount) m.save(self.outfn) f = self.pixmap_frame(self.outfn) # noqa
def call(self): if not self.viewer_connected: self.get_viewer().about_to_close.connect( self.file_serving_worker.stop) self.viewer_connected = True try: from OpenGL import GL # noqa except ImportError: logger.warn( 'Could not find package OpenGL, ' 'if the map does not work try installing OpenGL\n' 'e.g. sudo pip install PyOpenGL') self.cleanup() try: viewer = self.get_viewer() cli_mode = False except NoViewerSet: viewer = None cli_mode = True if not cli_mode: if self.only_active: _, active_stations = \ self.get_active_event_and_stations() else: active_stations = viewer.stations.values() elif cli_mode: active_stations = self.stations station_list = [] if active_stations: for stat in active_stations: is_blacklisted = util.match_nslc(viewer.blacklist, stat.nsl()) if (viewer and not is_blacklisted) or cli_mode: xml_station_marker = XMLStationMarker( nsl='.'.join(stat.nsl()), longitude=float(stat.lon), latitude=float(stat.lat), active='yes') station_list.append(xml_station_marker) active_station_list = StationMarkerList(stations=station_list) if self.only_active: markers = [viewer.get_active_event_marker()] else: if cli_mode: markers = self.markers else: markers = self.get_selected_markers() if len(markers) == 0: tmin, tmax = self.get_selected_time_range(fallback=True) markers = [m for m in viewer.get_markers() if isinstance(m, gui_util.EventMarker) and m.tmin >= tmin and m.tmax <= tmax] ev_marker_list = [] for m in markers: if not isinstance(m, gui_util.EventMarker): continue xmleventmarker = convert_event_marker(m) if xmleventmarker is None: continue ev_marker_list.append(xmleventmarker) event_list = EventMarkerList(events=ev_marker_list) event_station_list = MarkerLists( station_marker_list=active_station_list, event_marker_list=event_list) event_station_list.validate() if self.map_kind != 'GMT': tempdir = self.marker_tempdir if self.map_kind == 'Google Maps': map_fn = 'map_googlemaps.html' elif self.map_kind == 'OpenStreetMap': map_fn = 'map_osm.html' url = 'http://localhost:' + str(self.port) + '/%s' % map_fn files = ['loadxmldoc.js', 'map_util.js', 'plates.kml', map_fn] snuffling_dir = op.dirname(op.abspath(__file__)) for entry in files: shutil.copy(os.path.join(snuffling_dir, entry), os.path.join(tempdir, entry)) logger.debug('copied data to %s' % tempdir) markers_fn = os.path.join(self.marker_tempdir, 'markers.xml') self.data_proxy.content_to_serve.emit(self.port) dump_xml(event_station_list, filename=markers_fn) if self.open_external: qg.QDesktopServices.openUrl(qc.QUrl(url)) else: global g_counter g_counter += 1 self.web_frame( url, name='Map %i (%s)' % (g_counter, self.map_kind)) else: lats_all = [] lons_all = [] slats = [] slons = [] slabels = [] for s in active_stations: slats.append(s.lat) slons.append(s.lon) slabels.append('.'.join(s.nsl())) elats = [] elons = [] elats = [] elons = [] psmeca_input = [] markers = self.get_selected_markers() for m in markers: if isinstance(m, gui_util.EventMarker): e = m.get_event() elats.append(e.lat) elons.append(e.lon) if e.moment_tensor is not None: mt = e.moment_tensor.m6() psmeca_input.append( (e.lon, e.lat, e.depth/1000., mt[0], mt[1], mt[2], mt[3], mt[4], mt[5], 1., e.lon, e.lat, e.name)) else: if e.magnitude is None: moment = -1. else: moment = moment_tensor.magnitude_to_moment( e.magnitude) psmeca_input.append( (e.lon, e.lat, e.depth/1000., moment/3., moment/3., moment/3., 0., 0., 0., 1., e.lon, e.lat, e.name)) lats_all.extend(elats) lons_all.extend(elons) lats_all.extend(slats) lons_all.extend(slons) lats_all = num.array(lats_all) lons_all = num.array(lons_all) if len(lats_all) == 0: return center_lat, center_lon = ortho.geographic_midpoint( lats_all, lons_all) ntotal = len(lats_all) clats = num.ones(ntotal) * center_lat clons = num.ones(ntotal) * center_lon dists = ortho.distance_accurate50m_numpy( clats, clons, lats_all, lons_all) maxd = num.max(dists) or 0. m = Map( lat=center_lat, lon=center_lon, radius=max(10000., maxd) * 1.1, width=35, height=25, show_grid=True, show_topo=True, color_dry=(238, 236, 230), topo_cpt_wet='light_sea_uniform', topo_cpt_dry='light_land_uniform', illuminate=True, illuminate_factor_ocean=0.15, show_rivers=False, show_plates=False) m.gmt.psxy(in_columns=(slons, slats), S='t15p', G='black', *m.jxyr) for i in range(len(active_stations)): m.add_label(slats[i], slons[i], slabels[i]) m.gmt.psmeca( in_rows=psmeca_input, S='m1.0', G='red', C='5p,0/0/0', *m.jxyr) tmpdir = self.tempdir() self.outfn = os.path.join(tmpdir, '%i.png' % self.figcount) m.save(self.outfn) f = self.pixmap_frame(self.outfn) # noqa