Moduł Python umożliwia wykorzystanie języka i środowiska Python do rozszerzenia możliwości SWIP5. W szczególności bibliotek sejsmicznych m.in ObsPy. Można tworzyć własne skrypty Pythona, które zachowują się jak wtyczki programu SWIP5, m.in rozbudowują menu programu i mogą być z menu wywoływane.
...
Wtyczkami napisanymi w Python, są odpowiednie skrypty napisane w języku Python, zawierające informacje potrzebne do rozpoznania ich jak moduły dla SWIP5 i umieszczone w podkatalogu Python. Skrypty te będą widoczne, jako pozycje w menu programu SWIP5, których wybranie powoduje przesłanie odpowiednich danych do programu Python, wykonanie zadanego programu i przekazanie odpowiednich danych z powrotem do programu SWIP5. Są to typowe skrypty Pythona poprzedzone definicjami dla SWIP, które są odpowiednimi liniami na początku skryptu traktowanymi przez Python, jako komentarze. Linie te są poprzedzone znakami "# !"Na ich podstawie podstawie program SWIP5 rozpoznaje je, jako funkcje dla programu SWIP5, umieszcza w odpowiednich pozycjach menu, przekazuje i odbiera odpowiednie dane z programu Python.Skrypty te mogą być wywoływane w programie Python bez pośrednictwa SWIP-a, co pozwala je testować przed dodaniem do programu.
...
informującą program, że jest to skrypt przeznaczony dla programu SWIP5. Następnie musi wystąpić jedna, lub kilka linii opisujących menu:
# !MENU …
a następnie kilka linii opisujących sposób przekazywania danych miedzy SWIP5 a Python . Oczywiście w przypadku testowania skryptów w samym Pythonie dane trzeba wczytać przed wywołaniem skryptu. Można korzystać w skryptach z innych bibliotek, ale trzeba zdefiniować do nich dostęp.
Poniżej dwa przykładowe skrypty:
1. Skrypt rysujący w Maltabie ObsPy sejsmogramy z okna powiększenia:
# !SWIP5
# !MENU Test plot
# !DATA FROM ZOOM WINDOW
for i=1:numel(WaveForms)
subplot(numel(WaveForms),1,i)
plot(WaveForms(i).data.data)
title(WaveForms(i).name)
endstreamSWIP5.spectrogram(log=True, title='PL network ' + str(st[0].stats.starttime))
2. Skrypt generujący IS-EPOS NORDIC katalog (wcześniej, należy wczytać wszystkie zjawiska do SWIP):
# !SWIP5
# !MENU Create IS-EPOS catalog
# !QUAKEML
addpath 'c:\Users\jwisz\Documents\Python'
addpath 'c:\Users\jwisz\Documents\Python\SWIDB'
Catalog = QuakeML2Catalog(QuakeML);
save('Catalog_VERIS.mat','Catalog','-v6');catalogSWIP5.write("example.dat", format="NORDIC")
Anchor | ||||
---|---|---|---|---|
|
Menu definiowane jest przez jedną, lub kilka linii opisujących menu w skrypcie, w postaci:
...
Wtedy nazwa „…” będzie traktowana, jako pozycja na belce głównej menu programu SWIP5 np.
# !TOP MENU OBSPY"
Powyższe definicje muszą wystąpić na początku skryptu po linii
...
Poniżej przedstawione są przykładowe definicje w skrypcie i odpowiadające im pozycje w menu:
# !SWIP5 | Python→Create IS-EPOS catalog |
# !SWIP5 | Python→Create catalogs→ |
# !SWIP5 |
Anchor | ||||
---|---|---|---|---|
|
...
przekazywania danych w skryptach Python
Linie definiujące sposób przekazywania danych do Pythona muszą znajdować się poniżej linii definiujących menu. W zależności od odpowiednich linii na początku skryptu odpowiednie dane są przekazane do programu Python. Przedstawia to poniższa tabela:
Dane eksportowane do Pythona | Linie skryptu Python | |
1 | Bieżące zjawisko. Jeżeli SWIP wczytał wiele zjawisk, tylko bieżąco opracowywane (zaznaczone) zjawisko jest przekazywane (patrz Praca na wielu wstrząsach). Opracowanie zjawiska jest dostępne w skrypcie jako zmienna globalna catalogSWIP5 typu QuakeML. | # !CURRENT EVENT |
2 | EventParameters QuakeML – cała struktura QuakeML, w tym wszystkie wczytane zjawiska, jest przekazywana do programu Maltab Python. Jest to przydatne np. gdy w Pythonie mamy funkcje do tworzenia katalogu lub chcemy w Pythonie padać sejsmiczność danego obszaru, badać statystyki itp. Katalog jest dostępny w skrypcie jako zmienna globalna catalogSWIP5 typu QuakeML. | # !QUAKEML |
3 | Wszystkie kanały widoczne w oknie głównym programu SWIP5 obcinane czasowo do sygnału widocznego w oknie głównym są wysyłane do Pythona. Kanały sejsmiczne są dostępne w skrypcie jako zmienna globalna streamSWIP5 typu Stream. | # !DATA FROM MAIN WINDOW |
4 | Wszystkie kanały widoczne w oknie powiększenia programu SWIP5 obcinane czasowo do sygnału widocznego w oknie powiększenia są wysyłane do Pythona. Kanały sejsmiczne są dostępne w skrypcie jako zmienna globalna streamSWIP5 typu Stream. | # !DATA FROM ZOOM WINDOW |
5 | Kanały zaznaczone (widoczne, jako niebieskie w oknie głównym) nieobcinane czasowo są wysyłane do Pythona. Kanały sejsmiczne są dostępne w skrypcie jako zmienna globalna streamSWIP5 typu Stream. | # !DATA FROM SELECTION |
Dane importowane z Pythona | ||
6 | Opracowanie zjawiska trzymane w zmiennej catalogSWIP5zostaje zaimportowane do SWIP5 zastępując istniejące opracowanie lub katalog | # !REPLACE QUAKEML |
7 | Opracowanie zjawiska trzymane w zmiennej catalogSWIP5zostaje zaimportowane do SWIP5. Dodawane są do bieżącego opracowania zjawiska nowe wartości: originu, magnitudy, magnitudy stacyjnej, amplitudy, mechanizmy lub piku. Dodawane są tylko nowe wartości. Nie zmienia się już istniejących. W opracowaniu eksportowanym z pythona musi być zjawisko z ID takim samym jak bieżące zjawisko w SWIP5. W przeciwnym wypadku dane są ignorowane. | # !INSERT TO QUAKEML |
8 | Wczytywany jest do SWIP5 plik zapisywany przez skrypt Pythona. W skrypcie musi być komenda zapisu do pliku, którego nazwa jest w zbiorze konfiguracyjnym. | # !READ MINISEED |
9 | Dodawane są do sejsmogramu w SWIP5 kanały z pliku zapisanego przez skrypt Pythona. W skrypcie musi być komenda zapisu do pliku, którego nazwa jest w zbiorze konfiguracyjnym. | # !ADD MINISEED |
Parametry zjawisk lub całych biuletynów z QuakeML są przekazywane do Pythona w formacie QuakeML i widziane są jako zmienna catalogSWIP5 bez względu ile kanałów jest przekazywanych, natomiast zapisy sejsmiczne w formacie MiniSEED .Bieżące zjawiska lub cały biuletyn w QuakeML (tabela, linie 1,2) są widziane w skrypcie jako zmienna QuakeML, natomiast zapisy sejsmiczne (tabela linie 3-5) są widziane jak zmienna WaveFormsi widziane są jako zmienna streamSWIP5. W skrypcie może wystąpić jedna linia opisująca sposób przekazania QuakeML i jedna linia opisująca sposób przekazania zapisów sejsmicznych.