release version: 0.1a
release notes: ============== Features - consistent manual phase picking through predefined SNR dependant zoom level - uniform uncertainty estimation from waveform's properties for automatic and manual picks - pdf representation and comparison of picks taking the uncertainty intrinsically into account - Richter and moment magnitude estimation - location determination with external installation of [NonLinLoc](http://alomax.free.fr/nlloc/index.html) Known issues - Magnitude estimation from manual PyLoT takes some time (instrument correction)
This commit is contained in:
		
							parent
							
								
									889e632198
								
							
						
					
					
						commit
						417316a8bb
					
				
							
								
								
									
										1177
									
								
								QtPyLoT.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										1177
									
								
								QtPyLoT.py
									
									
									
									
									
										Executable file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								icons/compare.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								icons/compare.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 3.0 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								icons/locate.png
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								icons/locate.png
									
									
									
									
									
										Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 7.1 KiB  | 
							
								
								
									
										21
									
								
								icons_rc.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								icons_rc.py
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										100
									
								
								inputs/autoPyLoT.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										100
									
								
								inputs/autoPyLoT.in
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,100 @@
 | 
			
		||||
%This is a parameter input file for autoPyLoT.
 | 
			
		||||
%All main and special settings regarding data handling
 | 
			
		||||
%and picking are to be set here!
 | 
			
		||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 | 
			
		||||
 | 
			
		||||
#main settings#
 | 
			
		||||
/DATA/Insheim                       #rootpath#     %project path
 | 
			
		||||
EVENT_DATA/LOCAL		    #datapath#     %data path
 | 
			
		||||
2013.02_Insheim                     #database#     %name of data base
 | 
			
		||||
e0019.048.13                        #eventID#      %certain evnt ID for processing
 | 
			
		||||
True                                #apverbose#
 | 
			
		||||
PILOT				    #datastructure#  %choose data structure
 | 
			
		||||
0                                   #iplot#        %flag for plotting: 0 none, 1, partly, >1 everything
 | 
			
		||||
AUTOPHASES_AIC_HOS4_ARH             #phasefile#    %name of autoPILOT output phase file 
 | 
			
		||||
AUTOLOC_AIC_HOS4_ARH                #locfile#      %name of autoPILOT output location file 
 | 
			
		||||
AUTOFOCMEC_AIC_HOS4_ARH.in          #focmecin#     %name of focmec input file containing polarities
 | 
			
		||||
HYPOSAT                             #locrt#        %location routine used ("HYPOINVERSE" or "HYPOSAT")
 | 
			
		||||
6                                   #pmin#         %minimum required P picks for location
 | 
			
		||||
4                                   #p0min#        %minimum required P picks for location if at least
 | 
			
		||||
                                                   %3 excellent P picks are found
 | 
			
		||||
2                                   #smin#         %minimum required S picks for location
 | 
			
		||||
/home/ludger/bin/run_HYPOSAT4autoPILOT.csh #cshellp# %path and name of c-shell script to run location routine
 | 
			
		||||
7.6 8.5                             #blon#         %longitude bounding for location map
 | 
			
		||||
49 49.4                             #blat#         %lattitude bounding for location map
 | 
			
		||||
#parameters for moment magnitude estimation#
 | 
			
		||||
5000                                #vp#           %average P-wave velocity
 | 
			
		||||
2800                                #vs#           %average S-wave velocity
 | 
			
		||||
2200                                #rho#          %rock density [kg/m^3]
 | 
			
		||||
300                                 #Qp#           %quality factor for P waves
 | 
			
		||||
100                                 #Qs#           %quality factor for S waves
 | 
			
		||||
#common settings picker#
 | 
			
		||||
15                                  #pstart#       %start time [s] for calculating CF for P-picking
 | 
			
		||||
40                                  #pstop#        %end time [s] for calculating CF for P-picking
 | 
			
		||||
-1.0                                #sstart#       %start time [s] after or before(-) P-onset for calculating CF for S-picking
 | 
			
		||||
7                                   #sstop#        %end time [s] after P-onset for calculating CF for S-picking
 | 
			
		||||
2 20                                #bpz1#         %lower/upper corner freq. of first band pass filter Z-comp. [Hz]
 | 
			
		||||
2 30                                #bpz2#         %lower/upper corner freq. of second band pass filter Z-comp. [Hz]
 | 
			
		||||
2 15                                #bph1#         %lower/upper corner freq. of first band pass filter H-comp. [Hz]
 | 
			
		||||
2 20                                #bph2#         %lower/upper corner freq. of second band pass filter z-comp. [Hz]
 | 
			
		||||
#special settings for calculating CF#
 | 
			
		||||
%!!Be careful when editing the following!!
 | 
			
		||||
#Z-component#
 | 
			
		||||
HOS                                 #algoP#        %choose algorithm for P-onset determination (HOS, ARZ, or AR3)
 | 
			
		||||
7                                   #tlta#         %for HOS-/AR-AIC-picker, length of LTA window [s] 
 | 
			
		||||
4                                   #hosorder#     %for HOS-picker, order of Higher Order Statistics
 | 
			
		||||
2                                   #Parorder#     %for AR-picker, order of AR process of Z-component
 | 
			
		||||
1.2                                 #tdet1z#       %for AR-picker, length of AR determination window [s] for Z-component, 1st pick
 | 
			
		||||
0.4                                 #tpred1z#      %for AR-picker, length of AR prediction window [s] for Z-component, 1st pick
 | 
			
		||||
0.6                                 #tdet2z#       %for AR-picker, length of AR determination window [s] for Z-component, 2nd pick
 | 
			
		||||
0.2                                 #tpred2z#      %for AR-picker, length of AR prediction window [s] for Z-component, 2nd pick
 | 
			
		||||
0.001                               #addnoise#     %add noise to seismogram for stable AR prediction
 | 
			
		||||
3 0.1 0.5 0.1                       #tsnrz#        %for HOS/AR, window lengths for SNR-and slope estimation [tnoise,tsafetey,tsignal,tslope] [s]
 | 
			
		||||
3                                   #pickwinP#     %for initial AIC pick, length of P-pick window [s]
 | 
			
		||||
8                                   #Precalcwin#   %for HOS/AR, window length [s] for recalculation of CF (relative to 1st pick)
 | 
			
		||||
0                                   #peps4aic#     %for HOS/AR, artificial uplift of samples of AIC-function (P)
 | 
			
		||||
0.2                                 #aictsmooth#   %for HOS/AR, take average of samples for smoothing of AIC-function [s]
 | 
			
		||||
0.1                                 #tsmoothP#     %for HOS/AR, take average of samples for smoothing CF [s]
 | 
			
		||||
0.001                               #ausP#         %for HOS/AR, artificial uplift of samples (aus) of CF (P)
 | 
			
		||||
1.3                                 #nfacP#        %for HOS/AR, noise factor for noise level determination (P)
 | 
			
		||||
#H-components#
 | 
			
		||||
ARH                                 #algoS#        %choose algorithm for S-onset determination (ARH or AR3)
 | 
			
		||||
0.8                                 #tdet1h#       %for HOS/AR, length of AR-determination window [s], H-components, 1st pick
 | 
			
		||||
0.4                                 #tpred1h#      %for HOS/AR, length of AR-prediction window [s], H-components, 1st pick
 | 
			
		||||
0.6                                 #tdet2h#       %for HOS/AR, length of AR-determinaton window [s], H-components, 2nd pick
 | 
			
		||||
0.3                                 #tpred2h#      %for HOS/AR, length of AR-prediction window [s], H-components, 2nd pick
 | 
			
		||||
4                                   #Sarorder#     %for AR-picker, order of AR process of H-components
 | 
			
		||||
6                                   #Srecalcwin#   %for AR-picker, window length [s] for recalculation of CF (2nd pick) (H)
 | 
			
		||||
3                                   #pickwinS#     %for initial AIC pick, length of S-pick window [s]
 | 
			
		||||
2 0.2 1.5 0.5                       #tsnrh#        %for ARH/AR3, window lengths for SNR-and slope estimation [tnoise,tsafetey,tsignal,tslope] [s]
 | 
			
		||||
0.05                                #aictsmoothS#  %for AIC-picker, take average of samples for smoothing of AIC-function [s]
 | 
			
		||||
0.02                                #tsmoothS#     %for AR-picker, take average of samples for smoothing CF [s] (S)
 | 
			
		||||
0.2                                 #pepsS#        %for AR-picker, artificial uplift of samples of CF (S) 
 | 
			
		||||
0.4                                 #ausS#         %for HOS/AR, artificial uplift of samples (aus) of CF (S)
 | 
			
		||||
1.5                                 #nfacS#        %for AR-picker, noise factor for noise level determination (S)
 | 
			
		||||
%first-motion picker%
 | 
			
		||||
1                                   #minfmweight#  %minimum required p weight for first-motion determination
 | 
			
		||||
2                                   #minFMSNR#     %miniumum required SNR for first-motion determination
 | 
			
		||||
0.2                                 #fmpickwin#    %pick window around P onset for calculating zero crossings
 | 
			
		||||
%quality assessment%
 | 
			
		||||
#inital AIC onset#
 | 
			
		||||
0.01 0.02 0.04 0.08                 #timeerrorsP#   %discrete time errors [s] corresponding to picking weights [0 1 2 3] for P
 | 
			
		||||
0.04 0.08 0.16 0.32                 #timeerrorsS#   %discrete time errors [s] corresponding to picking weights [0 1 2 3] for S
 | 
			
		||||
80                                  #minAICPslope#  %below this slope [counts/s] the initial P pick is rejected
 | 
			
		||||
1.2                                 #minAICPSNR#    %below this SNR the initial P pick is rejected
 | 
			
		||||
50                                  #minAICSslope#  %below this slope [counts/s] the initial S pick is rejected
 | 
			
		||||
1.5                                 #minAICSSNR#    %below this SNR the initial S pick is rejected
 | 
			
		||||
#check duration of signal using envelope function#
 | 
			
		||||
1.5                                 #prepickwin#   %pre-signal window length [s] for noise level estimation 
 | 
			
		||||
0.7                                 #minsiglength# %minimum required length of signal [s]
 | 
			
		||||
0.2                                 #sgap#         %safety gap between noise and signal window [s]
 | 
			
		||||
2                                   #noisefactor#  %noiselevel*noisefactor=threshold
 | 
			
		||||
60                                  #minpercent#   %per cent of samples required higher than threshold
 | 
			
		||||
#check for spuriously picked S-onsets#
 | 
			
		||||
3.0                                 #zfac#         %P-amplitude must exceed zfac times RMS-S amplitude 
 | 
			
		||||
#jackknife-processing for P-picks#
 | 
			
		||||
3                                   #thresholdweight#%minimum required weight of picks
 | 
			
		||||
3                                   #dttolerance#  %maximum allowed deviation of P picks from median [s]
 | 
			
		||||
4                                   #minstats#     %minimum number of stations with reliable P picks
 | 
			
		||||
3                                   #Sdttolerance# %maximum allowed deviation from Wadati-diagram
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										99
									
								
								inputs/autoPyLoT_local.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										99
									
								
								inputs/autoPyLoT_local.in
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,99 @@
 | 
			
		||||
%This is a parameter input file for autoPyLoT.
 | 
			
		||||
%All main and special settings regarding data handling
 | 
			
		||||
%and picking are to be set here!
 | 
			
		||||
%Parameters are optimized for local data sets!
 | 
			
		||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 | 
			
		||||
#main settings#
 | 
			
		||||
/DATA/Insheim                       #rootpath#     %project path
 | 
			
		||||
EVENT_DATA/LOCAL		    #datapath#     %data path
 | 
			
		||||
2016.08_Insheim                     #database#     %name of data base
 | 
			
		||||
e0007.224.16                        #eventID#      %event ID for single event processing
 | 
			
		||||
/DATA/Insheim/STAT_INFO             #invdir#       %full path to inventory or dataless-seed file
 | 
			
		||||
PILOT				    #datastructure#%choose data structure
 | 
			
		||||
0                                   #iplot#        %flag for plotting: 0 none, 1 partly, >1 everything
 | 
			
		||||
True                                #apverbose#    %choose 'True' or 'False' for terminal output
 | 
			
		||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 | 
			
		||||
#NLLoc settings#
 | 
			
		||||
/home/ludger/NLLOC                  #nllocbin#     %path to NLLoc executable
 | 
			
		||||
/home/ludger/NLLOC/Insheim          #nllocroot#    %root of NLLoc-processing directory
 | 
			
		||||
AUTOPHASES.obs                      #phasefile#    %name of autoPyLoT-output phase file for NLLoc
 | 
			
		||||
                                                   %(in nllocroot/obs)
 | 
			
		||||
Insheim_min1d032016_auto.in         #ctrfile#      %name of autoPyLoT-output control file for NLLoc
 | 
			
		||||
                                                   %(in nllocroot/run)
 | 
			
		||||
ttime                               #ttpatter#     %pattern of NLLoc ttimes from grid
 | 
			
		||||
                                                   %(in nllocroot/times)
 | 
			
		||||
AUTOLOC_nlloc                       #outpatter#    %pattern of NLLoc-output file
 | 
			
		||||
                                                   %(returns 'eventID_outpatter')
 | 
			
		||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 | 
			
		||||
#parameters for seismic moment estimation#
 | 
			
		||||
3530                                #vp#           %average P-wave velocity
 | 
			
		||||
2500                                #rho#          %average rock density [kg/m^3]
 | 
			
		||||
300 0.8                             #Qp#           %quality factor for P waves ([Qp, ap], Qp*f^a)
 | 
			
		||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 | 
			
		||||
AUTOFOCMEC_AIC_HOS4_ARH.in          #focmecin#     %name of focmec input file containing derived polarities
 | 
			
		||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 | 
			
		||||
#common settings picker#
 | 
			
		||||
15.0                                #pstart#       %start time [s] for calculating CF for P-picking
 | 
			
		||||
60.0                                #pstop#        %end time [s] for calculating CF for P-picking
 | 
			
		||||
-1.0                                #sstart#       %start time [s] relative to P-onset for calculating CF for S-picking
 | 
			
		||||
10.0                                #sstop#        %end time [s] after P-onset for calculating CF for S-picking
 | 
			
		||||
2 20                                #bpz1#         %lower/upper corner freq. of first band pass filter Z-comp. [Hz]
 | 
			
		||||
2 30                                #bpz2#         %lower/upper corner freq. of second band pass filter Z-comp. [Hz]
 | 
			
		||||
2 15                                #bph1#         %lower/upper corner freq. of first band pass filter H-comp. [Hz]
 | 
			
		||||
2 20                                #bph2#         %lower/upper corner freq. of second band pass filter z-comp. [Hz]
 | 
			
		||||
#special settings for calculating CF#
 | 
			
		||||
%!!Edit the following only if you know what you are doing!!%
 | 
			
		||||
#Z-component#
 | 
			
		||||
HOS                                 #algoP#        %choose algorithm for P-onset determination (HOS, ARZ, or AR3)
 | 
			
		||||
7.0                                 #tlta#         %for HOS-/AR-AIC-picker, length of LTA window [s] 
 | 
			
		||||
4                                   #hosorder#     %for HOS-picker, order of Higher Order Statistics
 | 
			
		||||
2                                   #Parorder#     %for AR-picker, order of AR process of Z-component
 | 
			
		||||
1.2                                 #tdet1z#       %for AR-picker, length of AR determination window [s] for Z-component, 1st pick
 | 
			
		||||
0.4                                 #tpred1z#      %for AR-picker, length of AR prediction window [s] for Z-component, 1st pick
 | 
			
		||||
0.6                                 #tdet2z#       %for AR-picker, length of AR determination window [s] for Z-component, 2nd pick
 | 
			
		||||
0.2                                 #tpred2z#      %for AR-picker, length of AR prediction window [s] for Z-component, 2nd pick
 | 
			
		||||
0.001                               #addnoise#     %add noise to seismogram for stable AR prediction
 | 
			
		||||
3 0.1 0.5 0.5                       #tsnrz#        %for HOS/AR, window lengths for SNR-and slope estimation [tnoise,tsafetey,tsignal,tslope] [s]
 | 
			
		||||
3.0                                 #pickwinP#     %for initial AIC pick, length of P-pick window [s]
 | 
			
		||||
6.0                                 #Precalcwin#   %for HOS/AR, window length [s] for recalculation of CF (relative to 1st pick)
 | 
			
		||||
0.2                                 #aictsmooth#   %for HOS/AR, take average of samples for smoothing of AIC-function [s]
 | 
			
		||||
0.1                                 #tsmoothP#     %for HOS/AR, take average of samples for smoothing CF [s]
 | 
			
		||||
0.001                               #ausP#         %for HOS/AR, artificial uplift of samples (aus) of CF (P)
 | 
			
		||||
1.3                                 #nfacP#        %for HOS/AR, noise factor for noise level determination (P)
 | 
			
		||||
#H-components#
 | 
			
		||||
ARH                                 #algoS#        %choose algorithm for S-onset determination (ARH or AR3)
 | 
			
		||||
0.8                                 #tdet1h#       %for HOS/AR, length of AR-determination window [s], H-components, 1st pick
 | 
			
		||||
0.4                                 #tpred1h#      %for HOS/AR, length of AR-prediction window [s], H-components, 1st pick
 | 
			
		||||
0.6                                 #tdet2h#       %for HOS/AR, length of AR-determinaton window [s], H-components, 2nd pick
 | 
			
		||||
0.3                                 #tpred2h#      %for HOS/AR, length of AR-prediction window [s], H-components, 2nd pick
 | 
			
		||||
4                                   #Sarorder#     %for AR-picker, order of AR process of H-components
 | 
			
		||||
5.0                                 #Srecalcwin#   %for AR-picker, window length [s] for recalculation of CF (2nd pick) (H)
 | 
			
		||||
3.0                                 #pickwinS#     %for initial AIC pick, length of S-pick window [s]
 | 
			
		||||
2 0.2 1.5 0.5                       #tsnrh#        %for ARH/AR3, window lengths for SNR-and slope estimation [tnoise,tsafetey,tsignal,tslope] [s]
 | 
			
		||||
0.5                                 #aictsmoothS#  %for AIC-picker, take average of samples for smoothing of AIC-function [s]
 | 
			
		||||
0.7                                 #tsmoothS#     %for AR-picker, take average of samples for smoothing CF [s] (S)
 | 
			
		||||
0.9                                 #ausS#         %for HOS/AR, artificial uplift of samples (aus) of CF (S)
 | 
			
		||||
1.5                                 #nfacS#        %for AR-picker, noise factor for noise level determination (S)
 | 
			
		||||
%first-motion picker%
 | 
			
		||||
1                                   #minfmweight#  %minimum required P weight for first-motion determination
 | 
			
		||||
2                                   #minFMSNR#     %miniumum required SNR for first-motion determination
 | 
			
		||||
0.2                                 #fmpickwin#    %pick window around P onset for calculating zero crossings
 | 
			
		||||
%quality assessment%
 | 
			
		||||
#inital AIC onset#
 | 
			
		||||
0.01 0.02 0.04 0.08                 #timeerrorsP#   %discrete time errors [s] corresponding to picking weights [0 1 2 3] for P
 | 
			
		||||
0.04 0.08 0.16 0.32                 #timeerrorsS#   %discrete time errors [s] corresponding to picking weights [0 1 2 3] for S
 | 
			
		||||
4                                   #minAICPslope#  %below this slope [counts/s] the initial P pick is rejected
 | 
			
		||||
1.2                                 #minAICPSNR#    %below this SNR the initial P pick is rejected
 | 
			
		||||
2                                   #minAICSslope#  %below this slope [counts/s] the initial S pick is rejected
 | 
			
		||||
1.5                                 #minAICSSNR#    %below this SNR the initial S pick is rejected
 | 
			
		||||
#check duration of signal using envelope function#
 | 
			
		||||
3                                   #minsiglength# %minimum required length of signal [s]
 | 
			
		||||
1.0                                 #noisefactor#  %noiselevel*noisefactor=threshold
 | 
			
		||||
40                                  #minpercent#   %required percentage of samples higher than threshold
 | 
			
		||||
#check for spuriously picked S-onsets#
 | 
			
		||||
2.0                                 #zfac#         %P-amplitude must exceed at least zfac times RMS-S amplitude 
 | 
			
		||||
#check statistics of P onsets#
 | 
			
		||||
2.5                                 #mdttolerance#  %maximum allowed deviation of P picks from median [s]
 | 
			
		||||
#wadati check#
 | 
			
		||||
1.0                                 #wdttolerance# %maximum allowed deviation from Wadati-diagram
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										100
									
								
								inputs/autoPyLoT_regional.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										100
									
								
								inputs/autoPyLoT_regional.in
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,100 @@
 | 
			
		||||
%This is a parameter input file for autoPyLoT.
 | 
			
		||||
%All main and special settings regarding data handling
 | 
			
		||||
%and picking are to be set here!
 | 
			
		||||
%Parameters are optimized for regional data sets!
 | 
			
		||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 | 
			
		||||
 | 
			
		||||
#main settings#
 | 
			
		||||
/DATA/Egelados                      #rootpath#     %project path
 | 
			
		||||
EVENT_DATA/LOCAL		    #datapath#     %data path
 | 
			
		||||
2006.01_Nisyros                     #database#     %name of data base
 | 
			
		||||
e1412.008.06                        #eventID#      %event ID for single event processing
 | 
			
		||||
/DATA/Egelados/STAT_INFO            #invdir#       %full path to inventory or dataless-seed file
 | 
			
		||||
PILOT				    #datastructure#  %choose data structure
 | 
			
		||||
0                                   #iplot#        %flag for plotting: 0 none, 1, partly, >1 everything
 | 
			
		||||
True                                #apverbose#    %choose 'True' or 'False' for terminal output
 | 
			
		||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 | 
			
		||||
#NLLoc settings#
 | 
			
		||||
/home/ludger/NLLOC                  #nllocbin#     %path to NLLoc executable
 | 
			
		||||
/home/ludger/NLLOC/Insheim          #nllocroot#    %root of NLLoc-processing directory
 | 
			
		||||
AUTOPHASES.obs                      #phasefile#    %name of autoPyLoT-output phase file for NLLoc
 | 
			
		||||
                                                   %(in nllocroot/obs)
 | 
			
		||||
Insheim_min1d2015_auto.in           #ctrfile#      %name of autoPyLoT-output control file for NLLoc
 | 
			
		||||
                                                   %(in nllocroot/run)
 | 
			
		||||
ttime                               #ttpatter#     %pattern of NLLoc ttimes from grid
 | 
			
		||||
                                                   %(in nllocroot/times)
 | 
			
		||||
AUTOLOC_nlloc                       #outpatter#    %pattern of NLLoc-output file
 | 
			
		||||
                                                   %(returns 'eventID_outpatter')
 | 
			
		||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 | 
			
		||||
#parameters for seismic moment estimation#
 | 
			
		||||
3530                                #vp#           %average P-wave velocity
 | 
			
		||||
2700                                #rho#          %average rock density [kg/m^3]
 | 
			
		||||
1000f**0.8                          #Qp#           %quality factor for P waves (Qp*f^a)
 | 
			
		||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 | 
			
		||||
AUTOFOCMEC_AIC_HOS4_ARH.in          #focmecin#     %name of focmec input file containing derived polarities
 | 
			
		||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 | 
			
		||||
#common settings picker#
 | 
			
		||||
20                                  #pstart#       %start time [s] for calculating CF for P-picking
 | 
			
		||||
100                                 #pstop#        %end time [s] for calculating CF for P-picking
 | 
			
		||||
1.0                                 #sstart#       %start time [s] after or before(-) P-onset for calculating CF for S-picking
 | 
			
		||||
100                                 #sstop#        %end time [s] after P-onset for calculating CF for S-picking
 | 
			
		||||
3 10                                #bpz1#         %lower/upper corner freq. of first band pass filter Z-comp. [Hz]
 | 
			
		||||
3 12                                #bpz2#         %lower/upper corner freq. of second band pass filter Z-comp. [Hz]
 | 
			
		||||
3 8                                 #bph1#         %lower/upper corner freq. of first band pass filter H-comp. [Hz]
 | 
			
		||||
3 6                                 #bph2#         %lower/upper corner freq. of second band pass filter H-comp. [Hz]
 | 
			
		||||
#special settings for calculating CF#
 | 
			
		||||
%!!Be careful when editing the following!!
 | 
			
		||||
#Z-component#
 | 
			
		||||
HOS                                 #algoP#        %choose algorithm for P-onset determination (HOS, ARZ, or AR3)
 | 
			
		||||
7                                   #tlta#         %for HOS-/AR-AIC-picker, length of LTA window [s] 
 | 
			
		||||
4                                   #hosorder#     %for HOS-picker, order of Higher Order Statistics
 | 
			
		||||
2                                   #Parorder#     %for AR-picker, order of AR process of Z-component
 | 
			
		||||
1.2                                 #tdet1z#       %for AR-picker, length of AR determination window [s] for Z-component, 1st pick
 | 
			
		||||
0.4                                 #tpred1z#      %for AR-picker, length of AR prediction window [s] for Z-component, 1st pick
 | 
			
		||||
0.6                                 #tdet2z#       %for AR-picker, length of AR determination window [s] for Z-component, 2nd pick
 | 
			
		||||
0.2                                 #tpred2z#      %for AR-picker, length of AR prediction window [s] for Z-component, 2nd pick
 | 
			
		||||
0.001                               #addnoise#     %add noise to seismogram for stable AR prediction
 | 
			
		||||
5 0.2 3.0 1.5                       #tsnrz#        %for HOS/AR, window lengths for SNR-and slope estimation [tnoise,tsafetey,tsignal,tslope] [s]
 | 
			
		||||
3                                   #pickwinP#     %for initial AIC and refined pick, length of P-pick window [s]
 | 
			
		||||
8                                   #Precalcwin#   %for HOS/AR, window length [s] for recalculation of CF (relative to 1st pick)
 | 
			
		||||
1.0                                 #aictsmooth#   %for HOS/AR, take average of samples for smoothing of AIC-function [s]
 | 
			
		||||
0.3                                 #tsmoothP#     %for HOS/AR, take average of samples for smoothing CF [s]
 | 
			
		||||
0.3                                 #ausP#         %for HOS/AR, artificial uplift of samples (aus) of CF (P)
 | 
			
		||||
1.3                                 #nfacP#        %for HOS/AR, noise factor for noise level determination (P)
 | 
			
		||||
#H-components#
 | 
			
		||||
ARH                                 #algoS#        %choose algorithm for S-onset determination (ARH or AR3)
 | 
			
		||||
0.8                                 #tdet1h#       %for HOS/AR, length of AR-determination window [s], H-components, 1st pick
 | 
			
		||||
0.4                                 #tpred1h#      %for HOS/AR, length of AR-prediction window [s], H-components, 1st pick
 | 
			
		||||
0.6                                 #tdet2h#       %for HOS/AR, length of AR-determinaton window [s], H-components, 2nd pick
 | 
			
		||||
0.3                                 #tpred2h#      %for HOS/AR, length of AR-prediction window [s], H-components, 2nd pick
 | 
			
		||||
4                                   #Sarorder#     %for AR-picker, order of AR process of H-components
 | 
			
		||||
10                                  #Srecalcwin#   %for AR-picker, window length [s] for recalculation of CF (2nd pick) (H)
 | 
			
		||||
25                                  #pickwinS#     %for initial AIC and refined pick, length of S-pick window [s]
 | 
			
		||||
5 0.2 3.0 3.0                       #tsnrh#        %for ARH/AR3, window lengths for SNR-and slope estimation [tnoise,tsafetey,tsignal,tslope] [s]
 | 
			
		||||
3.5                                 #aictsmoothS#  %for AIC-picker, take average of samples for smoothing of AIC-function [s]
 | 
			
		||||
1.0                                 #tsmoothS#     %for AR-picker, take average of samples for smoothing CF [s] (S)
 | 
			
		||||
0.2                                 #ausS#         %for HOS/AR, artificial uplift of samples (aus) of CF (S)
 | 
			
		||||
1.5                                 #nfacS#        %for AR-picker, noise factor for noise level determination (S)
 | 
			
		||||
%first-motion picker%
 | 
			
		||||
1                                   #minfmweight#  %minimum required p weight for first-motion determination
 | 
			
		||||
2                                   #minFMSNR#     %miniumum required SNR for first-motion determination
 | 
			
		||||
6.0                                 #fmpickwin#    %pick window around P onset for calculating zero crossings
 | 
			
		||||
%quality assessment%
 | 
			
		||||
#inital AIC onset#
 | 
			
		||||
0.04 0.08 0.16 0.32                 #timeerrorsP#   %discrete time errors [s] corresponding to picking weights [0 1 2 3] for P
 | 
			
		||||
0.04 0.08 0.16 0.32                 #timeerrorsS#   %discrete time errors [s] corresponding to picking weights [0 1 2 3] for S
 | 
			
		||||
3                                   #minAICPslope#  %below this slope [counts/s] the initial P pick is rejected
 | 
			
		||||
1.2                                 #minAICPSNR#    %below this SNR the initial P pick is rejected
 | 
			
		||||
5                                   #minAICSslope#  %below this slope [counts/s] the initial S pick is rejected
 | 
			
		||||
2.5                                 #minAICSSNR#    %below this SNR the initial S pick is rejected
 | 
			
		||||
#check duration of signal using envelope function#
 | 
			
		||||
30                                  #minsiglength# %minimum required length of signal [s]
 | 
			
		||||
2.5                                 #noisefactor#  %noiselevel*noisefactor=threshold
 | 
			
		||||
60                                  #minpercent#   %required percentage of samples higher than threshold
 | 
			
		||||
#check for spuriously picked S-onsets#
 | 
			
		||||
0.5                                 #zfac#         %P-amplitude must exceed at least zfac times RMS-S amplitude 
 | 
			
		||||
#check statistics of P onsets#
 | 
			
		||||
45                                  #mdttolerance#  %maximum allowed deviation of P picks from median [s]
 | 
			
		||||
#wadati check#
 | 
			
		||||
3.0                                 #wdttolerance# %maximum allowed deviation from Wadati-diagram
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										2
									
								
								inputs/filter.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								inputs/filter.in
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,2 @@
 | 
			
		||||
P bandpass 4 2.0 20.0
 | 
			
		||||
S bandpass 4 2.0 15.0
 | 
			
		||||
							
								
								
									
										98
									
								
								inputs/pylot.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										98
									
								
								inputs/pylot.in
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,98 @@
 | 
			
		||||
%This is a example parameter input file for PyLoT.
 | 
			
		||||
%All main and special settings regarding data handling
 | 
			
		||||
%and picking are to be set here!
 | 
			
		||||
%Parameters shown here are optimized for local data sets!
 | 
			
		||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 | 
			
		||||
#main settings#
 | 
			
		||||
/data/Geothermie/Insheim            #rootpath#      %project path
 | 
			
		||||
EVENT_DATA/LOCAL                    #datapath#      %data path
 | 
			
		||||
2013.02_Insheim                     #database#      %name of data base
 | 
			
		||||
e0019.048.13                        #eventID#       %event ID for single event processing
 | 
			
		||||
/data/Geothermie/Insheim/STAT_INFO  #invdir#        %full path to  inventory or dataless-seed file
 | 
			
		||||
PILOT                               #datastructure# %choose data structure
 | 
			
		||||
0                                   #iplot#         %flag for plotting: 0 none, 1 partly, >1 everything
 | 
			
		||||
True                                #apverbose#     %choose 'True' or 'False' for terminal output
 | 
			
		||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 | 
			
		||||
#NLLoc settings#
 | 
			
		||||
/progs/bin                          #nllocbin#      %path to NLLoc executable
 | 
			
		||||
/data/Geothermie/Insheim/LOCALISATION/NLLoc          #nllocroot#     %root of NLLoc-processing directory
 | 
			
		||||
AUTOPHASES.obs                      #phasefile#     %name of autoPyLoT-output phase file for NLLoc
 | 
			
		||||
                                                    %(in nllocroot/obs)
 | 
			
		||||
Insheim_min1d2015.in           #ctrfile#       %name of PyLoT-output control file for NLLoc
 | 
			
		||||
                                                    %(in nllocroot/run)
 | 
			
		||||
ttime                               #ttpatter#      %pattern of NLLoc ttimes from grid
 | 
			
		||||
                                                    %(in nllocroot/times)
 | 
			
		||||
AUTOLOC_nlloc                       #outpatter#     %pattern of NLLoc-output file
 | 
			
		||||
                                                    %(returns 'eventID_outpatter')
 | 
			
		||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 | 
			
		||||
#parameters for seismic moment estimation#
 | 
			
		||||
3530                                #vp#            %average P-wave velocity
 | 
			
		||||
2500                                #rho#           %average rock density [kg/m^3]
 | 
			
		||||
300 0.8                           #Qp#            %quality factor for P waves (Qp*f^a); list(Qp, a)
 | 
			
		||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 | 
			
		||||
AUTOFOCMEC_AIC_HOS4_ARH.in          #focmecin#      %name of focmec input file containing derived polarities
 | 
			
		||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 | 
			
		||||
#common settings picker#
 | 
			
		||||
15.0                                #pstart#        %start time [s] for calculating CF for P-picking
 | 
			
		||||
60.0                                #pstop#         %end time [s] for calculating CF for P-picking
 | 
			
		||||
-1.0                                #sstart#        %start time [s] relative to P-onset for calculating CF for S-picking
 | 
			
		||||
10.0                                #sstop#         %end time [s] after P-onset for calculating CF for S-picking
 | 
			
		||||
2 20                                #bpz1#          %lower/upper corner freq. of first band pass filter Z-comp. [Hz]
 | 
			
		||||
2 30                                #bpz2#          %lower/upper corner freq. of second band pass filter Z-comp. [Hz]
 | 
			
		||||
2 15                                #bph1#          %lower/upper corner freq. of first band pass filter H-comp. [Hz]
 | 
			
		||||
2 20                                #bph2#          %lower/upper corner freq. of second band pass filter z-comp. [Hz]
 | 
			
		||||
#special settings for calculating CF#
 | 
			
		||||
%!!Edit the following only if you know what you are doing!!%
 | 
			
		||||
#Z-component#
 | 
			
		||||
HOS                                 #algoP#         %choose algorithm for P-onset determination (HOS, ARZ, or AR3)
 | 
			
		||||
7.0                                 #tlta#          %for HOS-/AR-AIC-picker, length of LTA window [s]
 | 
			
		||||
4                                   #hosorder#      %for HOS-picker, order of Higher Order Statistics
 | 
			
		||||
2                                   #Parorder#      %for AR-picker, order of AR process of Z-component
 | 
			
		||||
1.2                                 #tdet1z#        %for AR-picker, length of AR determination window [s] for Z-component, 1st pick
 | 
			
		||||
0.4                                 #tpred1z#       %for AR-picker, length of AR prediction window [s] for Z-component, 1st pick
 | 
			
		||||
0.6                                 #tdet2z#        %for AR-picker, length of AR determination window [s] for Z-component, 2nd pick
 | 
			
		||||
0.2                                 #tpred2z#       %for AR-picker, length of AR prediction window [s] for Z-component, 2nd pick
 | 
			
		||||
0.001                               #addnoise#      %add noise to seismogram for stable AR prediction
 | 
			
		||||
3 0.1 0.5 0.5                       #tsnrz#         %for HOS/AR, window lengths for SNR-and slope estimation [tnoise,tsafetey,tsignal,tslope] [s]
 | 
			
		||||
3.0                                 #pickwinP#      %for initial AIC pick, length of P-pick window [s]
 | 
			
		||||
6.0                                 #Precalcwin#    %for HOS/AR, window length [s] for recalculation of CF (relative to 1st pick)
 | 
			
		||||
0.2                                 #aictsmooth#    %for HOS/AR, take average of samples for smoothing of AIC-function [s]
 | 
			
		||||
0.1                                 #tsmoothP#      %for HOS/AR, take average of samples for smoothing CF [s]
 | 
			
		||||
0.001                               #ausP#          %for HOS/AR, artificial uplift of samples (aus) of CF (P)
 | 
			
		||||
1.3                                 #nfacP#         %for HOS/AR, noise factor for noise level determination (P)
 | 
			
		||||
#H-components#
 | 
			
		||||
ARH                                 #algoS#         %choose algorithm for S-onset determination (ARH or AR3)
 | 
			
		||||
0.8                                 #tdet1h#        %for HOS/AR, length of AR-determination window [s], H-components, 1st pick
 | 
			
		||||
0.4                                 #tpred1h#       %for HOS/AR, length of AR-prediction window [s], H-components, 1st pick
 | 
			
		||||
0.6                                 #tdet2h#        %for HOS/AR, length of AR-determinaton window [s], H-components, 2nd pick
 | 
			
		||||
0.3                                 #tpred2h#       %for HOS/AR, length of AR-prediction window [s], H-components, 2nd pick
 | 
			
		||||
4                                   #Sarorder#      %for AR-picker, order of AR process of H-components
 | 
			
		||||
5.0                                 #Srecalcwin#    %for AR-picker, window length [s] for recalculation of CF (2nd pick) (H)
 | 
			
		||||
3.0                                 #pickwinS#      %for initial AIC pick, length of S-pick window [s]
 | 
			
		||||
2 0.2 1.5 0.5                       #tsnrh#         %for ARH/AR3, window lengths for SNR-and slope estimation [tnoise,tsafetey,tsignal,tslope] [s]
 | 
			
		||||
0.5                                 #aictsmoothS#   %for AIC-picker, take average of samples for smoothing of AIC-function [s]
 | 
			
		||||
0.7                                 #tsmoothS#      %for AR-picker, take average of samples for smoothing CF [s] (S)
 | 
			
		||||
0.9                                 #ausS#          %for HOS/AR, artificial uplift of samples (aus) of CF (S)
 | 
			
		||||
1.5                                 #nfacS#         %for AR-picker, noise factor for noise level determination (S)
 | 
			
		||||
%first-motion picker%
 | 
			
		||||
1                                   #minfmweight#   %minimum required P weight for first-motion determination
 | 
			
		||||
2                                   #minFMSNR#      %miniumum required SNR for first-motion determination
 | 
			
		||||
0.2                                 #fmpickwin#     %pick window around P onset for calculating zero crossings
 | 
			
		||||
%quality assessment%
 | 
			
		||||
#inital AIC onset#
 | 
			
		||||
0.01 0.02 0.04 0.08                 #timeerrorsP#   %discrete time errors [s] corresponding to picking weights [0 1 2 3] for P
 | 
			
		||||
0.04 0.08 0.16 0.32                 #timeerrorsS#   %discrete time errors [s] corresponding to picking weights [0 1 2 3] for S
 | 
			
		||||
4                                   #minAICPslope#  %below this slope [counts/s] the initial P pick is rejected
 | 
			
		||||
1.2                                 #minAICPSNR#    %below this SNR the initial P pick is rejected
 | 
			
		||||
2                                   #minAICSslope#  %below this slope [counts/s] the initial S pick is rejected
 | 
			
		||||
1.5                                 #minAICSSNR#    %below this SNR the initial S pick is rejected
 | 
			
		||||
#check duration of signal using envelope function#
 | 
			
		||||
3                                   #minsiglength#  %minimum required length of signal [s]
 | 
			
		||||
1.0                                 #noisefactor#   %noiselevel*noisefactor=threshold
 | 
			
		||||
40                                  #minpercent#    %required percentage of samples higher than threshold
 | 
			
		||||
#check for spuriously picked S-onsets#
 | 
			
		||||
2.0                                 #zfac#          %P-amplitude must exceed at least zfac times RMS-S amplitude
 | 
			
		||||
#check statistics of P onsets#
 | 
			
		||||
2.5                                 #mdttolerance#  %maximum allowed deviation of P picks from median [s]
 | 
			
		||||
#wadati check#
 | 
			
		||||
1.0                                 #wdttolerance#  %maximum allowed deviation from Wadati-diagram
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								pylot/PyLoT.ico
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								pylot/PyLoT.ico
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 2.2 KiB  | 
							
								
								
									
										1
									
								
								pylot/RELEASE-VERSION
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								pylot/RELEASE-VERSION
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
			
		||||
0.1a
 | 
			
		||||
							
								
								
									
										21
									
								
								pylot/core/loc/hsat.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								pylot/core/loc/hsat.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,21 @@
 | 
			
		||||
#!/usr/bin/env python
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
 | 
			
		||||
from pylot.core.io.phases import writephases
 | 
			
		||||
from pylot.core.util.version import get_git_version as _getVersionString
 | 
			
		||||
 | 
			
		||||
__version__ = _getVersionString()
 | 
			
		||||
 | 
			
		||||
def export(picks, fnout):
 | 
			
		||||
    '''
 | 
			
		||||
    Take <picks> dictionary and exports picking data to a NLLOC-obs
 | 
			
		||||
    <phasefile> without creating an ObsPy event object.
 | 
			
		||||
 | 
			
		||||
    :param picks: picking data dictionary
 | 
			
		||||
    :type picks: dict
 | 
			
		||||
 | 
			
		||||
    :param fnout: complete path to the exporting obs file
 | 
			
		||||
    :type fnout: str
 | 
			
		||||
    '''
 | 
			
		||||
    # write phases to NLLoc-phase file
 | 
			
		||||
    writephases(picks, 'HYPO71', fnout)
 | 
			
		||||
							
								
								
									
										0
									
								
								pylot/testing/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								pylot/testing/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										12
									
								
								pylot/testing/testHelpForm.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										12
									
								
								pylot/testing/testHelpForm.py
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,12 @@
 | 
			
		||||
#!/usr/bin/env python
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
 | 
			
		||||
import sys, time
 | 
			
		||||
from PySide.QtGui import QApplication
 | 
			
		||||
from pylot.core.util.widgets import HelpForm
 | 
			
		||||
 | 
			
		||||
app = QApplication(sys.argv)
 | 
			
		||||
 | 
			
		||||
win = HelpForm()
 | 
			
		||||
win.show()
 | 
			
		||||
app.exec_()
 | 
			
		||||
							
								
								
									
										20
									
								
								pylot/testing/testPickDlg.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										20
									
								
								pylot/testing/testPickDlg.py
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,20 @@
 | 
			
		||||
#!/usr/bin/env python
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
 | 
			
		||||
import sys
 | 
			
		||||
import matplotlib
 | 
			
		||||
 | 
			
		||||
matplotlib.use('Qt4Agg')
 | 
			
		||||
matplotlib.rcParams['backend.qt4'] = 'PySide'
 | 
			
		||||
 | 
			
		||||
from PySide.QtGui import QApplication
 | 
			
		||||
from obspy.core import read
 | 
			
		||||
from pylot.core.util.widgets import PickDlg
 | 
			
		||||
import icons_rc
 | 
			
		||||
 | 
			
		||||
app = QApplication(sys.argv)
 | 
			
		||||
 | 
			
		||||
data = read()
 | 
			
		||||
win = PickDlg(data=data)
 | 
			
		||||
win.show()
 | 
			
		||||
app.exec_()
 | 
			
		||||
							
								
								
									
										12
									
								
								pylot/testing/testPropDlg.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										12
									
								
								pylot/testing/testPropDlg.py
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,12 @@
 | 
			
		||||
#!/usr/bin/env python
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
 | 
			
		||||
import sys, time
 | 
			
		||||
from PySide.QtGui import QApplication
 | 
			
		||||
from pylot.core.util.widgets import PropertiesDlg
 | 
			
		||||
 | 
			
		||||
app = QApplication(sys.argv)
 | 
			
		||||
 | 
			
		||||
win = PropertiesDlg()
 | 
			
		||||
win.show()
 | 
			
		||||
app.exec_()
 | 
			
		||||
							
								
								
									
										17
									
								
								pylot/testing/testUIcomponents.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										17
									
								
								pylot/testing/testUIcomponents.py
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,17 @@
 | 
			
		||||
#!/usr/bin/env python
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
import sys, time
 | 
			
		||||
from PySide.QtGui import QApplication
 | 
			
		||||
from pylot.core.util.widgets import FilterOptionsDialog, PropertiesDlg, HelpForm
 | 
			
		||||
 | 
			
		||||
dialogs = [FilterOptionsDialog, PropertiesDlg, HelpForm]
 | 
			
		||||
 | 
			
		||||
app = QApplication(sys.argv)
 | 
			
		||||
 | 
			
		||||
for dlg in dialogs:
 | 
			
		||||
    win = dlg()
 | 
			
		||||
    win.show()
 | 
			
		||||
    time.sleep(1)
 | 
			
		||||
    win.destroy()
 | 
			
		||||
							
								
								
									
										27
									
								
								pylot/testing/testUtils.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								pylot/testing/testUtils.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,27 @@
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
'''
 | 
			
		||||
Created on 10.11.2014
 | 
			
		||||
 | 
			
		||||
@author: sebastianw
 | 
			
		||||
'''
 | 
			
		||||
import unittest
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Test(unittest.TestCase):
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    def setUp(self):
 | 
			
		||||
        pass
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    def tearDown(self):
 | 
			
		||||
        pass
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    def testName(self):
 | 
			
		||||
        pass
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if __name__ == "__main__":
 | 
			
		||||
    #import sys;sys.argv = ['', 'Test.testName']
 | 
			
		||||
    unittest.main()
 | 
			
		||||
							
								
								
									
										19
									
								
								pylot/testing/testWidgets.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								pylot/testing/testWidgets.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,19 @@
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
'''
 | 
			
		||||
Created on 10.11.2014
 | 
			
		||||
 | 
			
		||||
@author: sebastianw
 | 
			
		||||
'''
 | 
			
		||||
import unittest
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Test(unittest.TestCase):
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    def testName(self):
 | 
			
		||||
        pass
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if __name__ == "__main__":
 | 
			
		||||
    #import sys;sys.argv = ['', 'Test.testName']
 | 
			
		||||
    unittest.main()
 | 
			
		||||
							
								
								
									
										303
									
								
								pylot/testing/test_autopick.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										303
									
								
								pylot/testing/test_autopick.py
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,303 @@
 | 
			
		||||
#!/usr/bin/env python
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
 | 
			
		||||
"""
 | 
			
		||||
   Script to run autoPyLoT-script "makeCF.py".
 | 
			
		||||
   Only for test purposes!
 | 
			
		||||
"""
 | 
			
		||||
 | 
			
		||||
from obspy.core import read
 | 
			
		||||
import matplotlib.pyplot as plt
 | 
			
		||||
import numpy as np
 | 
			
		||||
from pylot.core.pick.charfuns import *
 | 
			
		||||
from pylot.core.pick.picker import *
 | 
			
		||||
import glob
 | 
			
		||||
import argparse
 | 
			
		||||
 | 
			
		||||
def run_makeCF(project, database, event, iplot, station=None):
 | 
			
		||||
    #parameters for CF calculation
 | 
			
		||||
    t2 = 7                   #length of moving window for HOS calculation [sec]
 | 
			
		||||
    p = 4                    #order of HOS
 | 
			
		||||
    cuttimes = [10, 50]      #start and end time for CF calculation
 | 
			
		||||
    bpz = [2, 30]            #corner frequencies of bandpass filter, vertical component
 | 
			
		||||
    bph = [2, 15]            #corner frequencies of bandpass filter, horizontal components
 | 
			
		||||
    tdetz= 1.2               #length of AR-determination window [sec], vertical component
 | 
			
		||||
    tdeth= 0.8               #length of AR-determination window [sec], horizontal components
 | 
			
		||||
    tpredz = 0.4             #length of AR-prediction window [sec], vertical component
 | 
			
		||||
    tpredh = 0.4             #length of AR-prediction window [sec], horizontal components
 | 
			
		||||
    addnoise = 0.001         #add noise to seismogram for stable AR prediction
 | 
			
		||||
    arzorder = 2             #chosen order of AR process, vertical component
 | 
			
		||||
    arhorder = 4             #chosen order of AR process, horizontal components
 | 
			
		||||
    TSNRhos = [5, 0.5, 1, 0.1] #window lengths [s] for calculating SNR for earliest/latest pick and quality assessment
 | 
			
		||||
                             #from HOS-CF [noise window, safety gap, signal window, slope determination window]
 | 
			
		||||
    TSNRarz = [5, 0.5, 1, 0.5] #window lengths [s] for calculating SNR for earliest/lates pick and quality assessment
 | 
			
		||||
                             #from ARZ-CF
 | 
			
		||||
    #get waveform data
 | 
			
		||||
    if station:
 | 
			
		||||
       dpz = '/data/%s/EVENT_DATA/LOCAL/%s/%s/%s*HZ.msd' % (project, database, event, station)
 | 
			
		||||
       dpe = '/data/%s/EVENT_DATA/LOCAL/%s/%s/%s*HE.msd' % (project, database, event, station)
 | 
			
		||||
       dpn = '/data/%s/EVENT_DATA/LOCAL/%s/%s/%s*HN.msd' % (project, database, event, station)
 | 
			
		||||
       #dpz = '/DATA/%s/EVENT_DATA/LOCAL/%s/%s/%s*_z.gse' % (project, database, event, station)
 | 
			
		||||
       #dpe = '/DATA/%s/EVENT_DATA/LOCAL/%s/%s/%s*_e.gse' % (project, database, event, station)
 | 
			
		||||
       #dpn = '/DATA/%s/EVENT_DATA/LOCAL/%s/%s/%s*_n.gse' % (project, database, event, station)
 | 
			
		||||
    else:
 | 
			
		||||
        # dpz = '/DATA/%s/EVENT_DATA/LOCAL/%s/%s/*_z.gse' % (project, database, event)
 | 
			
		||||
        # dpe = '/DATA/%s/EVENT_DATA/LOCAL/%s/%s/*_e.gse' % (project, database, event)
 | 
			
		||||
        # dpn = '/DATA/%s/EVENT_DATA/LOCAL/%s/%s/*_n.gse' % (project, database, event)
 | 
			
		||||
        dpz = '/data/%s/EVENT_DATA/LOCAL/%s/%s/*HZ.msd' % (project, database, event)
 | 
			
		||||
        dpe = '/data/%s/EVENT_DATA/LOCAL/%s/%s/*HE.msd' % (project, database, event)
 | 
			
		||||
        dpn = '/data/%s/EVENT_DATA/LOCAL/%s/%s/*HN.msd' % (project, database, event)
 | 
			
		||||
    wfzfiles = glob.glob(dpz)
 | 
			
		||||
    wfefiles = glob.glob(dpe)
 | 
			
		||||
    wfnfiles = glob.glob(dpn)
 | 
			
		||||
    if wfzfiles:
 | 
			
		||||
       for i in range(len(wfzfiles)):
 | 
			
		||||
          print 'Vertical component data found ...'
 | 
			
		||||
          print wfzfiles[i]
 | 
			
		||||
          st = read('%s' % wfzfiles[i])
 | 
			
		||||
          st_copy = st.copy()
 | 
			
		||||
          #filter and taper data
 | 
			
		||||
          tr_filt = st[0].copy()
 | 
			
		||||
          tr_filt.filter('bandpass', freqmin=bpz[0], freqmax=bpz[1], zerophase=False)
 | 
			
		||||
          tr_filt.taper(max_percentage=0.05, type='hann')
 | 
			
		||||
          st_copy[0].data = tr_filt.data
 | 
			
		||||
          ##############################################################
 | 
			
		||||
          #calculate HOS-CF using subclass HOScf of class CharacteristicFunction
 | 
			
		||||
          hoscf = HOScf(st_copy, cuttimes, t2, p) #instance of HOScf
 | 
			
		||||
          ##############################################################
 | 
			
		||||
          #calculate AIC-HOS-CF using subclass AICcf of class CharacteristicFunction
 | 
			
		||||
          #class needs stream object => build it
 | 
			
		||||
          tr_aic = tr_filt.copy()
 | 
			
		||||
          tr_aic.data = hoscf.getCF()
 | 
			
		||||
          st_copy[0].data = tr_aic.data
 | 
			
		||||
          aiccf = AICcf(st_copy, cuttimes) #instance of AICcf
 | 
			
		||||
          ##############################################################
 | 
			
		||||
          #get prelimenary onset time from AIC-HOS-CF using subclass AICPicker of class AutoPicking
 | 
			
		||||
          aicpick = AICPicker(aiccf, None, TSNRhos, 3, 10, None, 0.1)
 | 
			
		||||
          ##############################################################
 | 
			
		||||
          #get refined onset time from HOS-CF using class Picker
 | 
			
		||||
          hospick = PragPicker(hoscf, None, TSNRhos, 2, 10, 0.001, 0.2, aicpick.getpick())
 | 
			
		||||
          #get earliest and latest possible picks
 | 
			
		||||
          hosELpick = EarlLatePicker(hoscf, 1.5, TSNRhos, None, 10, None, None, hospick.getpick())
 | 
			
		||||
          ##############################################################
 | 
			
		||||
          #calculate ARZ-CF using subclass ARZcf of class CharcteristicFunction
 | 
			
		||||
          #get stream object of filtered data
 | 
			
		||||
          st_copy[0].data = tr_filt.data
 | 
			
		||||
          arzcf = ARZcf(st_copy, cuttimes, tpredz, arzorder, tdetz, addnoise) #instance of ARZcf
 | 
			
		||||
          ##############################################################
 | 
			
		||||
          #calculate AIC-ARZ-CF using subclass AICcf of class CharacteristicFunction
 | 
			
		||||
          #class needs stream object => build it
 | 
			
		||||
          tr_arzaic = tr_filt.copy()
 | 
			
		||||
          tr_arzaic.data = arzcf.getCF()
 | 
			
		||||
          st_copy[0].data = tr_arzaic.data
 | 
			
		||||
          araiccf = AICcf(st_copy, cuttimes, tpredz, 0, tdetz) #instance of AICcf
 | 
			
		||||
          ##############################################################
 | 
			
		||||
          #get onset time from AIC-ARZ-CF using subclass AICPicker of class AutoPicking
 | 
			
		||||
          aicarzpick = AICPicker(araiccf, 1.5, TSNRarz, 2, 10, None, 0.1)
 | 
			
		||||
          ##############################################################
 | 
			
		||||
          #get refined onset time from ARZ-CF using class Picker
 | 
			
		||||
          arzpick = PragPicker(arzcf, 1.5, TSNRarz, 2.0, 10, 0.1, 0.05, aicarzpick.getpick())
 | 
			
		||||
          #get earliest and latest possible picks
 | 
			
		||||
          arzELpick = EarlLatePicker(arzcf, 1.5, TSNRarz, None, 10, None, None, arzpick.getpick())
 | 
			
		||||
    elif not wfzfiles:
 | 
			
		||||
       print 'No vertical component data found!'
 | 
			
		||||
 | 
			
		||||
    if wfefiles and wfnfiles:
 | 
			
		||||
       for i in range(len(wfefiles)):
 | 
			
		||||
          print 'Horizontal component data found ...'
 | 
			
		||||
          print wfefiles[i]
 | 
			
		||||
          print wfnfiles[i]
 | 
			
		||||
          #merge streams
 | 
			
		||||
          H = read('%s' % wfefiles[i])
 | 
			
		||||
          H += read('%s' % wfnfiles[i])
 | 
			
		||||
          H_copy = H.copy()
 | 
			
		||||
          #filter and taper data
 | 
			
		||||
          trH1_filt = H[0].copy()
 | 
			
		||||
          trH2_filt = H[1].copy()
 | 
			
		||||
          trH1_filt.filter('bandpass', freqmin=bph[0], freqmax=bph[1], zerophase=False)
 | 
			
		||||
          trH2_filt.filter('bandpass', freqmin=bph[0], freqmax=bph[1], zerophase=False)
 | 
			
		||||
          trH1_filt.taper(max_percentage=0.05, type='hann')
 | 
			
		||||
          trH2_filt.taper(max_percentage=0.05, type='hann')
 | 
			
		||||
          H_copy[0].data = trH1_filt.data
 | 
			
		||||
          H_copy[1].data = trH2_filt.data
 | 
			
		||||
 | 
			
		||||
          ##############################################################
 | 
			
		||||
          #calculate ARH-CF using subclass ARHcf of class CharcteristicFunction
 | 
			
		||||
          arhcf = ARHcf(H_copy, cuttimes, tpredh, arhorder, tdeth, addnoise) #instance of ARHcf
 | 
			
		||||
          ##############################################################
 | 
			
		||||
          #calculate AIC-ARH-CF using subclass AICcf of class CharacteristicFunction
 | 
			
		||||
          #class needs stream object => build it
 | 
			
		||||
          tr_arhaic = trH1_filt.copy()
 | 
			
		||||
          tr_arhaic.data = arhcf.getCF()
 | 
			
		||||
          H_copy[0].data = tr_arhaic.data
 | 
			
		||||
          #calculate ARH-AIC-CF
 | 
			
		||||
          arhaiccf = AICcf(H_copy, cuttimes, tpredh, 0, tdeth) #instance of AICcf
 | 
			
		||||
          ##############################################################
 | 
			
		||||
          #get onset time from AIC-ARH-CF using subclass AICPicker of class AutoPicking
 | 
			
		||||
          aicarhpick = AICPicker(arhaiccf, 1.5, TSNRarz, 4, 10, None, 0.1)
 | 
			
		||||
          ###############################################################
 | 
			
		||||
          #get refined onset time from ARH-CF using class Picker
 | 
			
		||||
          arhpick = PragPicker(arhcf, 1.5, TSNRarz, 2.5, 10, 0.1, 0.05, aicarhpick.getpick())
 | 
			
		||||
          #get earliest and latest possible picks
 | 
			
		||||
          arhELpick = EarlLatePicker(arhcf, 1.5, TSNRarz, None, 10, None, None, arhpick.getpick())
 | 
			
		||||
 | 
			
		||||
          #create stream with 3 traces
 | 
			
		||||
          #merge streams
 | 
			
		||||
          AllC = read('%s' % wfefiles[i])
 | 
			
		||||
          AllC += read('%s' % wfnfiles[i])
 | 
			
		||||
          AllC += read('%s' % wfzfiles[i])
 | 
			
		||||
          #filter and taper data
 | 
			
		||||
          All1_filt = AllC[0].copy()
 | 
			
		||||
          All2_filt = AllC[1].copy()
 | 
			
		||||
          All3_filt = AllC[2].copy()
 | 
			
		||||
          All1_filt.filter('bandpass', freqmin=bph[0], freqmax=bph[1], zerophase=False)
 | 
			
		||||
          All2_filt.filter('bandpass', freqmin=bph[0], freqmax=bph[1], zerophase=False)
 | 
			
		||||
          All3_filt.filter('bandpass', freqmin=bpz[0], freqmax=bpz[1], zerophase=False)
 | 
			
		||||
          All1_filt.taper(max_percentage=0.05, type='hann')
 | 
			
		||||
          All2_filt.taper(max_percentage=0.05, type='hann')
 | 
			
		||||
          All3_filt.taper(max_percentage=0.05, type='hann')
 | 
			
		||||
          AllC[0].data = All1_filt.data
 | 
			
		||||
          AllC[1].data = All2_filt.data
 | 
			
		||||
          AllC[2].data = All3_filt.data
 | 
			
		||||
          #calculate AR3C-CF using subclass AR3Ccf of class CharacteristicFunction
 | 
			
		||||
          ar3ccf = AR3Ccf(AllC, cuttimes, tpredz, arhorder, tdetz, addnoise) #instance of AR3Ccf
 | 
			
		||||
          #get earliest and latest possible pick from initial ARH-pick
 | 
			
		||||
          ar3cELpick = EarlLatePicker(ar3ccf, 1.5, TSNRarz, None, 10, None, None, arhpick.getpick())
 | 
			
		||||
          ##############################################################
 | 
			
		||||
          if iplot:
 | 
			
		||||
             #plot vertical trace
 | 
			
		||||
             plt.figure()
 | 
			
		||||
             tr = st[0]
 | 
			
		||||
             tdata = np.arange(0, tr.stats.npts / tr.stats.sampling_rate, tr.stats.delta)
 | 
			
		||||
             p1, = plt.plot(tdata, tr_filt.data/max(tr_filt.data), 'k')
 | 
			
		||||
             p2, = plt.plot(hoscf.getTimeArray(), hoscf.getCF() / max(hoscf.getCF()), 'r')
 | 
			
		||||
             p3, = plt.plot(aiccf.getTimeArray(), aiccf.getCF()/max(aiccf.getCF()), 'b')
 | 
			
		||||
             p4, = plt.plot(arzcf.getTimeArray(), arzcf.getCF()/max(arzcf.getCF()), 'g')
 | 
			
		||||
             p5, = plt.plot(araiccf.getTimeArray(), araiccf.getCF()/max(araiccf.getCF()), 'y')
 | 
			
		||||
             plt.plot([aicpick.getpick(), aicpick.getpick()], [-1, 1], 'b--')
 | 
			
		||||
             plt.plot([aicpick.getpick()-0.5, aicpick.getpick()+0.5], [1, 1], 'b')
 | 
			
		||||
             plt.plot([aicpick.getpick()-0.5, aicpick.getpick()+0.5], [-1, -1], 'b')
 | 
			
		||||
             plt.plot([hospick.getpick(), hospick.getpick()], [-1.3, 1.3], 'r', linewidth=2)
 | 
			
		||||
             plt.plot([hospick.getpick()-0.5, hospick.getpick()+0.5], [1.3, 1.3], 'r')
 | 
			
		||||
             plt.plot([hospick.getpick()-0.5, hospick.getpick()+0.5], [-1.3, -1.3], 'r')
 | 
			
		||||
             plt.plot([hosELpick.getLpick(), hosELpick.getLpick()], [-1.1, 1.1], 'r--')
 | 
			
		||||
             plt.plot([hosELpick.getEpick(), hosELpick.getEpick()], [-1.1, 1.1], 'r--')
 | 
			
		||||
             plt.plot([aicarzpick.getpick(), aicarzpick.getpick()], [-1.2, 1.2], 'y', linewidth=2)
 | 
			
		||||
             plt.plot([aicarzpick.getpick()-0.5, aicarzpick.getpick()+0.5], [1.2, 1.2], 'y')
 | 
			
		||||
             plt.plot([aicarzpick.getpick()-0.5, aicarzpick.getpick()+0.5], [-1.2, -1.2], 'y')
 | 
			
		||||
             plt.plot([arzpick.getpick(), arzpick.getpick()], [-1.4, 1.4], 'g', linewidth=2)
 | 
			
		||||
             plt.plot([arzpick.getpick()-0.5, arzpick.getpick()+0.5], [1.4, 1.4], 'g')
 | 
			
		||||
             plt.plot([arzpick.getpick()-0.5, arzpick.getpick()+0.5], [-1.4, -1.4], 'g')
 | 
			
		||||
             plt.plot([arzELpick.getLpick(), arzELpick.getLpick()], [-1.2, 1.2], 'g--')
 | 
			
		||||
             plt.plot([arzELpick.getEpick(), arzELpick.getEpick()], [-1.2, 1.2], 'g--')
 | 
			
		||||
             plt.yticks([])
 | 
			
		||||
             plt.ylim([-1.5, 1.5])
 | 
			
		||||
             plt.xlabel('Time [s]')
 | 
			
		||||
             plt.ylabel('Normalized Counts')
 | 
			
		||||
             plt.title('%s, %s, CF-SNR=%7.2f, CF-Slope=%12.2f' % (tr.stats.station, \
 | 
			
		||||
                        tr.stats.channel, aicpick.getSNR(), aicpick.getSlope()))
 | 
			
		||||
             plt.suptitle(tr.stats.starttime)
 | 
			
		||||
             plt.legend([p1, p2, p3, p4, p5], ['Data', 'HOS-CF', 'HOSAIC-CF', 'ARZ-CF', 'ARZAIC-CF'])
 | 
			
		||||
             #plot horizontal traces
 | 
			
		||||
             plt.figure(2)
 | 
			
		||||
             plt.subplot(2,1,1)
 | 
			
		||||
             tsteph = tpredh / 4
 | 
			
		||||
             th1data = np.arange(0, trH1_filt.stats.npts / trH1_filt.stats.sampling_rate, trH1_filt.stats.delta)
 | 
			
		||||
             th2data = np.arange(0, trH2_filt.stats.npts / trH2_filt.stats.sampling_rate, trH2_filt.stats.delta)
 | 
			
		||||
             tarhcf = np.arange(0, len(arhcf.getCF()) * tsteph, tsteph) + cuttimes[0] + tdeth +tpredh
 | 
			
		||||
             p21, = plt.plot(th1data, trH1_filt.data/max(trH1_filt.data), 'k')
 | 
			
		||||
             p22, = plt.plot(arhcf.getTimeArray(), arhcf.getCF()/max(arhcf.getCF()), 'r')
 | 
			
		||||
             p23, = plt.plot(arhaiccf.getTimeArray(), arhaiccf.getCF()/max(arhaiccf.getCF()))
 | 
			
		||||
             plt.plot([aicarhpick.getpick(), aicarhpick.getpick()], [-1, 1], 'b')
 | 
			
		||||
             plt.plot([aicarhpick.getpick()-0.5, aicarhpick.getpick()+0.5], [1, 1], 'b')
 | 
			
		||||
             plt.plot([aicarhpick.getpick()-0.5, aicarhpick.getpick()+0.5], [-1, -1], 'b')
 | 
			
		||||
             plt.plot([arhpick.getpick(), arhpick.getpick()], [-1, 1], 'r')
 | 
			
		||||
             plt.plot([arhpick.getpick()-0.5, arhpick.getpick()+0.5], [1, 1], 'r')
 | 
			
		||||
             plt.plot([arhpick.getpick()-0.5, arhpick.getpick()+0.5], [-1, -1], 'r')
 | 
			
		||||
             plt.plot([arhELpick.getLpick(), arhELpick.getLpick()], [-0.8, 0.8], 'r--')
 | 
			
		||||
             plt.plot([arhELpick.getEpick(), arhELpick.getEpick()], [-0.8, 0.8], 'r--')
 | 
			
		||||
             plt.plot([arhpick.getpick() + arhELpick.getPickError(), arhpick.getpick() + arhELpick.getPickError()], \
 | 
			
		||||
                       [-0.2, 0.2], 'r--')
 | 
			
		||||
             plt.plot([arhpick.getpick() - arhELpick.getPickError(), arhpick.getpick() - arhELpick.getPickError()], \
 | 
			
		||||
                       [-0.2, 0.2], 'r--')
 | 
			
		||||
             plt.yticks([])
 | 
			
		||||
             plt.ylim([-1.5, 1.5])
 | 
			
		||||
             plt.ylabel('Normalized Counts')
 | 
			
		||||
             plt.title([trH1_filt.stats.station, trH1_filt.stats.channel])
 | 
			
		||||
             plt.suptitle(trH1_filt.stats.starttime)
 | 
			
		||||
             plt.legend([p21, p22, p23], ['Data', 'ARH-CF', 'ARHAIC-CF'])
 | 
			
		||||
             plt.subplot(2,1,2)
 | 
			
		||||
             plt.plot(th2data, trH2_filt.data/max(trH2_filt.data), 'k')
 | 
			
		||||
             plt.plot(arhcf.getTimeArray(), arhcf.getCF()/max(arhcf.getCF()), 'r')
 | 
			
		||||
             plt.plot(arhaiccf.getTimeArray(), arhaiccf.getCF()/max(arhaiccf.getCF()))
 | 
			
		||||
             plt.plot([aicarhpick.getpick(), aicarhpick.getpick()], [-1, 1], 'b')
 | 
			
		||||
             plt.plot([aicarhpick.getpick()-0.5, aicarhpick.getpick()+0.5], [1, 1], 'b')
 | 
			
		||||
             plt.plot([aicarhpick.getpick()-0.5, aicarhpick.getpick()+0.5], [-1, -1], 'b')
 | 
			
		||||
             plt.plot([arhpick.getpick(), arhpick.getpick()], [-1, 1], 'r')
 | 
			
		||||
             plt.plot([arhpick.getpick()-0.5, arhpick.getpick()+0.5], [1, 1], 'r')
 | 
			
		||||
             plt.plot([arhpick.getpick()-0.5, arhpick.getpick()+0.5], [-1, -1], 'r')
 | 
			
		||||
             plt.plot([arhELpick.getLpick(), arhELpick.getLpick()], [-0.8, 0.8], 'r--')
 | 
			
		||||
             plt.plot([arhELpick.getEpick(), arhELpick.getEpick()], [-0.8, 0.8], 'r--')
 | 
			
		||||
             plt.plot([arhpick.getpick() + arhELpick.getPickError(), arhpick.getpick() + arhELpick.getPickError()], \
 | 
			
		||||
                       [-0.2, 0.2], 'r--')
 | 
			
		||||
             plt.plot([arhpick.getpick() - arhELpick.getPickError(), arhpick.getpick() - arhELpick.getPickError()], \
 | 
			
		||||
                       [-0.2, 0.2], 'r--')
 | 
			
		||||
             plt.title([trH2_filt.stats.station, trH2_filt.stats.channel])
 | 
			
		||||
             plt.yticks([])
 | 
			
		||||
             plt.ylim([-1.5, 1.5])
 | 
			
		||||
             plt.xlabel('Time [s]')
 | 
			
		||||
             plt.ylabel('Normalized Counts')
 | 
			
		||||
             #plot 3-component window
 | 
			
		||||
             plt.figure(3)
 | 
			
		||||
             plt.subplot(3,1,1)
 | 
			
		||||
             p31, = plt.plot(tdata, tr_filt.data/max(tr_filt.data), 'k')
 | 
			
		||||
             p32, = plt.plot(ar3ccf.getTimeArray(), ar3ccf.getCF()/max(ar3ccf.getCF()), 'r')
 | 
			
		||||
             plt.plot([arhpick.getpick(), arhpick.getpick()], [-1, 1], 'b')
 | 
			
		||||
             plt.plot([arhpick.getpick()-0.5, arhpick.getpick()+0.5], [-1, -1], 'b')
 | 
			
		||||
             plt.plot([arhpick.getpick()-0.5, arhpick.getpick()+0.5], [1, 1], 'b')
 | 
			
		||||
             plt.plot([ar3cELpick.getLpick(), ar3cELpick.getLpick()], [-0.8, 0.8], 'b--')
 | 
			
		||||
             plt.plot([ar3cELpick.getEpick(), ar3cELpick.getEpick()], [-0.8, 0.8], 'b--')
 | 
			
		||||
             plt.yticks([])
 | 
			
		||||
             plt.xticks([])
 | 
			
		||||
             plt.ylabel('Normalized Counts')
 | 
			
		||||
             plt.title([tr.stats.station, tr.stats.channel])
 | 
			
		||||
             plt.suptitle(trH1_filt.stats.starttime)
 | 
			
		||||
             plt.legend([p31, p32], ['Data', 'AR3C-CF'])
 | 
			
		||||
             plt.subplot(3,1,2)
 | 
			
		||||
             plt.plot(th1data, trH1_filt.data/max(trH1_filt.data), 'k')
 | 
			
		||||
             plt.plot(ar3ccf.getTimeArray(), ar3ccf.getCF()/max(ar3ccf.getCF()), 'r')
 | 
			
		||||
             plt.plot([arhpick.getpick(), arhpick.getpick()], [-1, 1], 'b')
 | 
			
		||||
             plt.plot([arhpick.getpick()-0.5, arhpick.getpick()+0.5], [-1, -1], 'b')
 | 
			
		||||
             plt.plot([arhpick.getpick()-0.5, arhpick.getpick()+0.5], [1, 1], 'b')
 | 
			
		||||
             plt.plot([ar3cELpick.getLpick(), ar3cELpick.getLpick()], [-0.8, 0.8], 'b--')
 | 
			
		||||
             plt.plot([ar3cELpick.getEpick(), ar3cELpick.getEpick()], [-0.8, 0.8], 'b--')
 | 
			
		||||
             plt.yticks([])
 | 
			
		||||
             plt.xticks([])
 | 
			
		||||
             plt.ylabel('Normalized Counts')
 | 
			
		||||
             plt.title([trH1_filt.stats.station, trH1_filt.stats.channel])
 | 
			
		||||
             plt.subplot(3,1,3)
 | 
			
		||||
             plt.plot(th2data, trH2_filt.data/max(trH2_filt.data), 'k')
 | 
			
		||||
             plt.plot(ar3ccf.getTimeArray(), ar3ccf.getCF()/max(ar3ccf.getCF()), 'r')
 | 
			
		||||
             plt.plot([arhpick.getpick(), arhpick.getpick()], [-1, 1], 'b')
 | 
			
		||||
             plt.plot([arhpick.getpick()-0.5, arhpick.getpick()+0.5], [-1, -1], 'b')
 | 
			
		||||
             plt.plot([arhpick.getpick()-0.5, arhpick.getpick()+0.5], [1, 1], 'b')
 | 
			
		||||
             plt.plot([ar3cELpick.getLpick(), ar3cELpick.getLpick()], [-0.8, 0.8], 'b--')
 | 
			
		||||
             plt.plot([ar3cELpick.getEpick(), ar3cELpick.getEpick()], [-0.8, 0.8], 'b--')
 | 
			
		||||
             plt.yticks([])
 | 
			
		||||
             plt.ylabel('Normalized Counts')
 | 
			
		||||
             plt.title([trH2_filt.stats.station, trH2_filt.stats.channel])
 | 
			
		||||
             plt.xlabel('Time [s]')
 | 
			
		||||
             plt.show()
 | 
			
		||||
             raw_input()
 | 
			
		||||
             plt.close()
 | 
			
		||||
 | 
			
		||||
if __name__ == '__main__':
 | 
			
		||||
    parser = argparse.ArgumentParser()
 | 
			
		||||
    parser.add_argument('--project', type=str, help='project name (e.g. Insheim)')
 | 
			
		||||
    parser.add_argument('--database', type=str, help='event data base (e.g. 2014.09_Insheim)')
 | 
			
		||||
    parser.add_argument('--event', type=str, help='event ID (e.g. e0010.015.14)')
 | 
			
		||||
    parser.add_argument('--iplot', help='anything, if set, figure occurs')
 | 
			
		||||
    parser.add_argument('--station', type=str, help='Station ID (e.g. INS3) (optional)')
 | 
			
		||||
    args = parser.parse_args()
 | 
			
		||||
 | 
			
		||||
    run_makeCF(args.project, args.database, args.event, args.iplot, args.station)
 | 
			
		||||
							
								
								
									
										7
									
								
								pylot/testing/test_pdf.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								pylot/testing/test_pdf.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,7 @@
 | 
			
		||||
#!/usr/bin/env python
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
 | 
			
		||||
from pylot.core.util.pdf import ProbabilityDensityFunction
 | 
			
		||||
pdf = ProbabilityDensityFunction.from_pick(0.34, 0.5, 0.54, type='exp')
 | 
			
		||||
pdf2 = ProbabilityDensityFunction.from_pick(0.34, 0.5, 0.54, type='exp')
 | 
			
		||||
diff = pdf - pdf2
 | 
			
		||||
							
								
								
									
										15
									
								
								scripts/pylot-noisewindow.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										15
									
								
								scripts/pylot-noisewindow.py
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,15 @@
 | 
			
		||||
#!/usr/bin/env python
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
 | 
			
		||||
import argparse
 | 
			
		||||
import numpy
 | 
			
		||||
from pylot.core.pick.utils import getnoisewin
 | 
			
		||||
 | 
			
		||||
if __name__ == "__main__":
 | 
			
		||||
    parser = argparse.ArgumentParser()
 | 
			
		||||
    parser.add_argument('--t', type=numpy.array, help='numpy array of time stamps')
 | 
			
		||||
    parser.add_argument('--t1', type=float, help='time from which relativ to it noise window is extracted')
 | 
			
		||||
    parser.add_argument('--tnoise', type=float, help='length of time window [s] for noise part extraction')
 | 
			
		||||
    parser.add_argument('--tgap', type=float, help='safety gap between signal (t1=onset) and noise')
 | 
			
		||||
    args = parser.parse_args()
 | 
			
		||||
    getnoisewin(args.t, args.t1, args.tnoise, args.tgap)
 | 
			
		||||
							
								
								
									
										28
									
								
								scripts/pylot-pick-earliest-latest.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										28
									
								
								scripts/pylot-pick-earliest-latest.py
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,28 @@
 | 
			
		||||
#!/usr/bin/python
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
"""
 | 
			
		||||
   Created Mar 2015
 | 
			
		||||
   Transcription of the rezipe of Diehl et al. (2009) for consistent phase
 | 
			
		||||
   picking. For a given inital (the most likely) pick, the corresponding earliest
 | 
			
		||||
   and latest possible pick is calculated based on noise measurements in front of
 | 
			
		||||
   the most likely pick and signal wavelength derived from zero crossings.
 | 
			
		||||
 | 
			
		||||
   :author: Ludger Kueperkoch / MAGS2 EP3 working group
 | 
			
		||||
"""
 | 
			
		||||
 | 
			
		||||
import argparse
 | 
			
		||||
import obspy
 | 
			
		||||
from pylot.core.pick.utils import earllatepicker
 | 
			
		||||
 | 
			
		||||
if __name__ == "__main__":
 | 
			
		||||
    parser = argparse.ArgumentParser()
 | 
			
		||||
    parser.add_argument('--X', type=~obspy.core.stream.Stream,
 | 
			
		||||
                        help='time series (seismogram) read with obspy module read')
 | 
			
		||||
    parser.add_argument('--nfac', type=int,
 | 
			
		||||
                        help='(noise factor), nfac times noise level to calculate latest possible pick')
 | 
			
		||||
    parser.add_argument('--TSNR', type=tuple, help='length of time windows around pick used to determine SNR \
 | 
			
		||||
                        [s] (Tnoise, Tgap, Tsignal)')
 | 
			
		||||
    parser.add_argument('--Pick1', type=float, help='Onset time of most likely pick')
 | 
			
		||||
    parser.add_argument('--iplot', type=int, help='if set, figure no. iplot occurs')
 | 
			
		||||
    args = parser.parse_args()
 | 
			
		||||
    earllatepicker(args.X, args.nfac, args.TSNR, args.Pick1, args.iplot)
 | 
			
		||||
							
								
								
									
										24
									
								
								scripts/pylot-pick-firstmotion.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										24
									
								
								scripts/pylot-pick-firstmotion.py
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,24 @@
 | 
			
		||||
#!/usr/bin/python
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
"""
 | 
			
		||||
   Created Mar 2015
 | 
			
		||||
   Function to derive first motion (polarity) for given phase onset based on zero crossings.
 | 
			
		||||
 | 
			
		||||
   :author: MAGS2 EP3 working group / Ludger Kueperkoch
 | 
			
		||||
"""
 | 
			
		||||
 | 
			
		||||
import argparse
 | 
			
		||||
import obspy
 | 
			
		||||
from pylot.core.pick.utils import fmpicker
 | 
			
		||||
 | 
			
		||||
if __name__ == "__main__":
 | 
			
		||||
    parser = argparse.ArgumentParser()
 | 
			
		||||
    parser.add_argument('--Xraw', type=obspy.core.stream.Stream,
 | 
			
		||||
                        help='unfiltered time series (seismogram) read with obspy module read')
 | 
			
		||||
    parser.add_argument('--Xfilt', type=obspy.core.stream.Stream,
 | 
			
		||||
                        help='filtered time series (seismogram) read with obspy module read')
 | 
			
		||||
    parser.add_argument('--pickwin', type=float, help='length of pick window [s] for first motion determination')
 | 
			
		||||
    parser.add_argument('--Pick', type=float, help='Onset time of most likely pick')
 | 
			
		||||
    parser.add_argument('--iplot', type=int, help='if set, figure no. iplot occurs')
 | 
			
		||||
    args = parser.parse_args()
 | 
			
		||||
    fmpicker(args.Xraw, args.Xfilt, args.pickwin, args.Pick, args.iplot)
 | 
			
		||||
							
								
								
									
										41
									
								
								scripts/pylot-reasses-pilot-db.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										41
									
								
								scripts/pylot-reasses-pilot-db.py
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,41 @@
 | 
			
		||||
#!/usr/bin/env python
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
 | 
			
		||||
import argparse
 | 
			
		||||
 | 
			
		||||
from pylot.core.util.version import get_git_version as _getVersionString
 | 
			
		||||
from pylot.core.io.phases import reassess_pilot_db
 | 
			
		||||
 | 
			
		||||
__version__ = _getVersionString()
 | 
			
		||||
__author__ = 'S. Wehling-Benatelli'
 | 
			
		||||
 | 
			
		||||
if __name__ == '__main__':
 | 
			
		||||
    parser = argparse.ArgumentParser(
 | 
			
		||||
        description='reassess old PILOT event data base in terms of consistent '
 | 
			
		||||
                    'automatic uncertainty estimation',
 | 
			
		||||
        epilog='Script written by {author} belonging to PyLoT version'
 | 
			
		||||
               ' {version}\n'.format(author=__author__,
 | 
			
		||||
                                     version=__version__)
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    parser.add_argument(
 | 
			
		||||
        'root', type=str, help='specifies the root directory'
 | 
			
		||||
    )
 | 
			
		||||
    parser.add_argument(
 | 
			
		||||
        'db', type=str, help='specifies the database name'
 | 
			
		||||
    )
 | 
			
		||||
    parser.add_argument(
 | 
			
		||||
        '--output', '-o', type=str, help='path to the output directory',
 | 
			
		||||
        dest='output'
 | 
			
		||||
    )
 | 
			
		||||
    parser.add_argument(
 | 
			
		||||
        '--parameterfile', '-p', type=str,
 | 
			
		||||
        help='full path to the parameterfile', dest='parfile'
 | 
			
		||||
    )
 | 
			
		||||
    parser.add_argument(
 | 
			
		||||
        '--verbosity', '-v', action='count', help='increase output verbosity',
 | 
			
		||||
        default=0, dest='verbosity'
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    args = parser.parse_args()
 | 
			
		||||
    reassess_pilot_db(args.root, args.db, args.output, args.parfile, args.verbosity)
 | 
			
		||||
							
								
								
									
										38
									
								
								scripts/pylot-reasses-pilot-event.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										38
									
								
								scripts/pylot-reasses-pilot-event.py
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,38 @@
 | 
			
		||||
#!/usr/bin/env python
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
 | 
			
		||||
import argparse
 | 
			
		||||
 | 
			
		||||
from pylot.core.util.version import get_git_version as _getVersionString
 | 
			
		||||
from pylot.core.io.phases import reassess_pilot_event
 | 
			
		||||
 | 
			
		||||
__version__ = _getVersionString()
 | 
			
		||||
__author__ = 'S. Wehling-Benatelli'
 | 
			
		||||
 | 
			
		||||
if __name__ == '__main__':
 | 
			
		||||
    parser = argparse.ArgumentParser(
 | 
			
		||||
        description='reassess old PILOT event data in terms of consistent '
 | 
			
		||||
                    'automatic uncertainty estimation',
 | 
			
		||||
        epilog='Script written by {author} belonging to PyLoT version'
 | 
			
		||||
               ' {version}\n'.format(author=__author__,
 | 
			
		||||
                                     version=__version__)
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    parser.add_argument(
 | 
			
		||||
        'root', type=str, help='specifies the root directory'
 | 
			
		||||
    )
 | 
			
		||||
    parser.add_argument(
 | 
			
		||||
        'db', type=str, help='specifies the database name'
 | 
			
		||||
    )
 | 
			
		||||
    parser.add_argument(
 | 
			
		||||
        'id', type=str, help='PILOT event identifier'
 | 
			
		||||
    )
 | 
			
		||||
    parser.add_argument(
 | 
			
		||||
        '--output', '-o', type=str, help='path to the output directory', dest='output'
 | 
			
		||||
    )
 | 
			
		||||
    parser.add_argument(
 | 
			
		||||
        '--parameterfile', '-p', type=str, help='full path to the parameterfile', dest='parfile'
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    args = parser.parse_args()
 | 
			
		||||
    reassess_pilot_event(args.root, args.db, args.id, args.output, args.parfile)
 | 
			
		||||
							
								
								
									
										14
									
								
								scripts/pylot-signalwindow.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										14
									
								
								scripts/pylot-signalwindow.py
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,14 @@
 | 
			
		||||
#!/usr/bin/env python
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
 | 
			
		||||
import argparse
 | 
			
		||||
import numpy
 | 
			
		||||
from pylot.core.pick.utils import getsignalwin
 | 
			
		||||
 | 
			
		||||
if __name__ == "__main__":
 | 
			
		||||
    parser = argparse.ArgumentParser()
 | 
			
		||||
    parser.add_argument('--t', type=numpy.array, help='numpy array of time stamps')
 | 
			
		||||
    parser.add_argument('--t1', type=float, help='time from which relativ to it signal window is extracted')
 | 
			
		||||
    parser.add_argument('--tsignal', type=float, help='length of time window [s] for signal part extraction')
 | 
			
		||||
    args = parser.parse_args()
 | 
			
		||||
    getsignalwin(args.t, args.t1, args.tsignal)
 | 
			
		||||
							
								
								
									
										30
									
								
								scripts/pylot-snr.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										30
									
								
								scripts/pylot-snr.py
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,30 @@
 | 
			
		||||
#!/usr/bin/python
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
"""
 | 
			
		||||
   Created Mar/Apr 2015
 | 
			
		||||
   Function to calculate SNR of certain part of seismogram relative
 | 
			
		||||
   to given time. Returns SNR and SNR [dB].
 | 
			
		||||
 | 
			
		||||
   :author: Ludger Kueperkoch /MAGS EP3 working group
 | 
			
		||||
"""
 | 
			
		||||
 | 
			
		||||
import argparse
 | 
			
		||||
import obspy
 | 
			
		||||
from pylot.core.pick.utils import getSNR
 | 
			
		||||
 | 
			
		||||
if __name__ == "__main__":
 | 
			
		||||
    parser = argparse.ArgumentParser()
 | 
			
		||||
    parser.add_argument('--data', '-d', type=obspy.core.stream.Stream,
 | 
			
		||||
                        help='time series (seismogram) read with obspy module '
 | 
			
		||||
                             'read',
 | 
			
		||||
                        dest='data')
 | 
			
		||||
    parser.add_argument('--tsnr', '-s', type=tuple,
 | 
			
		||||
                        help='length of time windows around pick used to '
 | 
			
		||||
                             'determine SNR [s] (Tnoise, Tgap, Tsignal)',
 | 
			
		||||
                        dest='tsnr')
 | 
			
		||||
    parser.add_argument('--time', '-t', type=float,
 | 
			
		||||
                        help='initial time from which noise and signal windows '
 | 
			
		||||
                             'are calculated',
 | 
			
		||||
                        dest='time')
 | 
			
		||||
    args = parser.parse_args()
 | 
			
		||||
    print getSNR(args.data, args.tsnr, args.time)
 | 
			
		||||
							
								
								
									
										307
									
								
								scripts/run_makeCF.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										307
									
								
								scripts/run_makeCF.py
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,307 @@
 | 
			
		||||
#!/usr/bin/python
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
 | 
			
		||||
"""
 | 
			
		||||
   Script to run autoPyLoT-script "run_makeCF.py".
 | 
			
		||||
   Only for test purposes!
 | 
			
		||||
"""
 | 
			
		||||
 | 
			
		||||
from obspy.core import read
 | 
			
		||||
import matplotlib.pyplot as plt
 | 
			
		||||
import numpy as np
 | 
			
		||||
from pylot.core.pick.charfuns import CharacteristicFunction
 | 
			
		||||
from pylot.core.pick.picker import AutoPicker
 | 
			
		||||
from pylot.core.pick.utils import *
 | 
			
		||||
import glob
 | 
			
		||||
import argparse
 | 
			
		||||
 | 
			
		||||
def run_makeCF(project, database, event, iplot, station=None):
 | 
			
		||||
    #parameters for CF calculation
 | 
			
		||||
    t2 = 7                   #length of moving window for HOS calculation [sec]
 | 
			
		||||
    p = 4                    #order of HOS
 | 
			
		||||
    cuttimes = [10, 50]      #start and end time for CF calculation
 | 
			
		||||
    bpz = [2, 30]            #corner frequencies of bandpass filter, vertical component
 | 
			
		||||
    bph = [2, 15]            #corner frequencies of bandpass filter, horizontal components
 | 
			
		||||
    tdetz= 1.2               #length of AR-determination window [sec], vertical component
 | 
			
		||||
    tdeth= 0.8               #length of AR-determination window [sec], horizontal components
 | 
			
		||||
    tpredz = 0.4             #length of AR-prediction window [sec], vertical component
 | 
			
		||||
    tpredh = 0.4             #length of AR-prediction window [sec], horizontal components
 | 
			
		||||
    addnoise = 0.001         #add noise to seismogram for stable AR prediction
 | 
			
		||||
    arzorder = 2             #chosen order of AR process, vertical component
 | 
			
		||||
    arhorder = 4             #chosen order of AR process, horizontal components
 | 
			
		||||
    TSNRhos = [5, 0.5, 1, .6] #window lengths [s] for calculating SNR for earliest/latest pick and quality assessment
 | 
			
		||||
                             #from HOS-CF [noise window, safety gap, signal window, slope determination window]
 | 
			
		||||
    TSNRarz = [5, 0.5, 1, 1.0] #window lengths [s] for calculating SNR for earliest/lates pick and quality assessment
 | 
			
		||||
                             #from ARZ-CF
 | 
			
		||||
    #get waveform data
 | 
			
		||||
    if station:
 | 
			
		||||
       dpz = '/DATA/%s/EVENT_DATA/LOCAL/%s/%s/%s*HZ.msd' % (project, database, event, station)
 | 
			
		||||
       dpe = '/DATA/%s/EVENT_DATA/LOCAL/%s/%s/%s*HE.msd' % (project, database, event, station)
 | 
			
		||||
       dpn = '/DATA/%s/EVENT_DATA/LOCAL/%s/%s/%s*HN.msd' % (project, database, event, station)
 | 
			
		||||
       #dpz = '/DATA/%s/EVENT_DATA/LOCAL/%s/%s/%s*_z.gse' % (project, database, event, station)
 | 
			
		||||
       #dpe = '/DATA/%s/EVENT_DATA/LOCAL/%s/%s/%s*_e.gse' % (project, database, event, station)
 | 
			
		||||
       #dpn = '/DATA/%s/EVENT_DATA/LOCAL/%s/%s/%s*_n.gse' % (project, database, event, station)
 | 
			
		||||
    else:
 | 
			
		||||
       dpz = '/DATA/%s/EVENT_DATA/LOCAL/%s/%s/*HZ.msd' % (project, database, event)
 | 
			
		||||
       dpe = '/DATA/%s/EVENT_DATA/LOCAL/%s/%s/*HE.msd' % (project, database, event)
 | 
			
		||||
       dpn = '/DATA/%s/EVENT_DATA/LOCAL/%s/%s/*HN.msd' % (project, database, event)
 | 
			
		||||
    wfzfiles = glob.glob(dpz)
 | 
			
		||||
    wfefiles = glob.glob(dpe)
 | 
			
		||||
    wfnfiles = glob.glob(dpn)
 | 
			
		||||
    if wfzfiles:
 | 
			
		||||
       for i in range(len(wfzfiles)):
 | 
			
		||||
          print 'Vertical component data found ...'
 | 
			
		||||
          print wfzfiles[i]
 | 
			
		||||
          st = read('%s' % wfzfiles[i])
 | 
			
		||||
          st_copy = st.copy()
 | 
			
		||||
          #filter and taper data
 | 
			
		||||
          tr_filt = st[0].copy()
 | 
			
		||||
          tr_filt.filter('bandpass', freqmin=bpz[0], freqmax=bpz[1], zerophase=False)
 | 
			
		||||
          tr_filt.taper(max_percentage=0.05, type='hann')
 | 
			
		||||
          st_copy[0].data = tr_filt.data
 | 
			
		||||
          ##############################################################
 | 
			
		||||
          #calculate HOS-CF using subclass HOScf of class CharacteristicFunction
 | 
			
		||||
          hoscf = HOScf(st_copy, cuttimes, t2, p) #instance of HOScf
 | 
			
		||||
          ##############################################################
 | 
			
		||||
          #calculate AIC-HOS-CF using subclass AICcf of class CharacteristicFunction
 | 
			
		||||
          #class needs stream object => build it
 | 
			
		||||
          tr_aic = tr_filt.copy()
 | 
			
		||||
          tr_aic.data = hoscf.getCF()
 | 
			
		||||
          st_copy[0].data = tr_aic.data
 | 
			
		||||
          aiccf = AICcf(st_copy, cuttimes) #instance of AICcf
 | 
			
		||||
          ##############################################################
 | 
			
		||||
          #get prelimenary onset time from AIC-HOS-CF using subclass AICPicker of class AutoPicking
 | 
			
		||||
          aicpick = AICPicker(aiccf, TSNRhos, 3, 10, None, 0.1)
 | 
			
		||||
          ##############################################################
 | 
			
		||||
          #get refined onset time from HOS-CF using class Picker
 | 
			
		||||
          hospick = PragPicker(hoscf, TSNRhos, 2, 10, 0.001, 0.2, aicpick.getpick())
 | 
			
		||||
          #############################################################
 | 
			
		||||
          #get earliest and latest possible picks
 | 
			
		||||
          st_copy[0].data = tr_filt.data
 | 
			
		||||
          [lpickhos, epickhos, pickerrhos] = earllatepicker(st_copy, 1.5, TSNRhos, hospick.getpick(), 10)
 | 
			
		||||
          #############################################################
 | 
			
		||||
          #get SNR
 | 
			
		||||
          [SNR, SNRdB] = getSNR(st_copy, TSNRhos, hospick.getpick())
 | 
			
		||||
          print 'SNR:', SNR, 'SNR[dB]:', SNRdB
 | 
			
		||||
          ##########################################################
 | 
			
		||||
          #get first motion of onset
 | 
			
		||||
          hosfm = fmpicker(st, st_copy, 0.2, hospick.getpick(), 11)
 | 
			
		||||
          ##############################################################
 | 
			
		||||
          #calculate ARZ-CF using subclass ARZcf of class CharcteristicFunction
 | 
			
		||||
          arzcf = ARZcf(st, cuttimes, tpredz, arzorder, tdetz, addnoise) #instance of ARZcf
 | 
			
		||||
          ##############################################################
 | 
			
		||||
          #calculate AIC-ARZ-CF using subclass AICcf of class CharacteristicFunction
 | 
			
		||||
          #class needs stream object => build it
 | 
			
		||||
          tr_arzaic = tr_filt.copy()
 | 
			
		||||
          tr_arzaic.data = arzcf.getCF()
 | 
			
		||||
          st_copy[0].data = tr_arzaic.data
 | 
			
		||||
          araiccf = AICcf(st_copy, cuttimes, tpredz, 0, tdetz) #instance of AICcf
 | 
			
		||||
          ##############################################################
 | 
			
		||||
          #get onset time from AIC-ARZ-CF using subclass AICPicker of class AutoPicking
 | 
			
		||||
          aicarzpick = AICPicker(araiccf, TSNRarz, 2, 10, None, 0.1)
 | 
			
		||||
          ##############################################################
 | 
			
		||||
          #get refined onset time from ARZ-CF using class Picker
 | 
			
		||||
          arzpick = PragPicker(arzcf, TSNRarz, 2.0, 10, 0.1, 0.05, aicarzpick.getpick())
 | 
			
		||||
          #get earliest and latest possible picks
 | 
			
		||||
          st_copy[0].data = tr_filt.data
 | 
			
		||||
          [lpickarz, epickarz, pickerrarz] = earllatepicker(st_copy, 1.5, TSNRarz, arzpick.getpick(), 10)
 | 
			
		||||
    elif not wfzfiles:
 | 
			
		||||
       print 'No vertical component data found!'
 | 
			
		||||
 | 
			
		||||
    if wfefiles and wfnfiles:
 | 
			
		||||
       for i in range(len(wfefiles)):
 | 
			
		||||
          print 'Horizontal component data found ...'
 | 
			
		||||
          print wfefiles[i]
 | 
			
		||||
          print wfnfiles[i]
 | 
			
		||||
          #merge streams
 | 
			
		||||
          H = read('%s' % wfefiles[i])
 | 
			
		||||
          H += read('%s' % wfnfiles[i])
 | 
			
		||||
          H_copy = H.copy()
 | 
			
		||||
          #filter and taper data
 | 
			
		||||
          trH1_filt = H[0].copy()
 | 
			
		||||
          trH2_filt = H[1].copy()
 | 
			
		||||
          trH1_filt.filter('bandpass', freqmin=bph[0], freqmax=bph[1], zerophase=False)
 | 
			
		||||
          trH2_filt.filter('bandpass', freqmin=bph[0], freqmax=bph[1], zerophase=False)
 | 
			
		||||
          trH1_filt.taper(max_percentage=0.05, type='hann')
 | 
			
		||||
          trH2_filt.taper(max_percentage=0.05, type='hann')
 | 
			
		||||
          H_copy[0].data = trH1_filt.data
 | 
			
		||||
          H_copy[1].data = trH2_filt.data
 | 
			
		||||
 | 
			
		||||
          ##############################################################
 | 
			
		||||
          #calculate ARH-CF using subclass ARHcf of class CharcteristicFunction
 | 
			
		||||
          arhcf = ARHcf(H_copy, cuttimes, tpredh, arhorder, tdeth, addnoise) #instance of ARHcf
 | 
			
		||||
          ##############################################################
 | 
			
		||||
          #calculate AIC-ARH-CF using subclass AICcf of class CharacteristicFunction
 | 
			
		||||
          #class needs stream object => build it
 | 
			
		||||
          tr_arhaic = trH1_filt.copy()
 | 
			
		||||
          tr_arhaic.data = arhcf.getCF()
 | 
			
		||||
          H_copy[0].data = tr_arhaic.data
 | 
			
		||||
          #calculate ARH-AIC-CF
 | 
			
		||||
          arhaiccf = AICcf(H_copy, cuttimes, tpredh, 0, tdeth) #instance of AICcf
 | 
			
		||||
          ##############################################################
 | 
			
		||||
          #get onset time from AIC-ARH-CF using subclass AICPicker of class AutoPicking
 | 
			
		||||
          aicarhpick = AICPicker(arhaiccf, TSNRarz, 4, 10, None, 0.1)
 | 
			
		||||
          ###############################################################
 | 
			
		||||
          #get refined onset time from ARH-CF using class Picker
 | 
			
		||||
          arhpick = PragPicker(arhcf, TSNRarz, 2.5, 10, 0.1, 0.05, aicarhpick.getpick())
 | 
			
		||||
          #get earliest and latest possible picks
 | 
			
		||||
          H_copy[0].data = trH1_filt.data
 | 
			
		||||
          [lpickarh1, epickarh1, pickerrarh1] = earllatepicker(H_copy, 1.5, TSNRarz, arhpick.getpick(), 10)
 | 
			
		||||
          H_copy[0].data = trH2_filt.data
 | 
			
		||||
          [lpickarh2, epickarh2, pickerrarh2] = earllatepicker(H_copy, 1.5, TSNRarz, arhpick.getpick(), 10)
 | 
			
		||||
          #get earliest pick of both earliest possible picks
 | 
			
		||||
          epick = [epickarh1, epickarh2]
 | 
			
		||||
          lpick = [lpickarh1, lpickarh2]
 | 
			
		||||
          pickerr = [pickerrarh1, pickerrarh2]
 | 
			
		||||
          ipick =np.argmin([epickarh1, epickarh2])
 | 
			
		||||
          epickarh = epick[ipick]
 | 
			
		||||
          lpickarh = lpick[ipick]
 | 
			
		||||
          pickerrarh = pickerr[ipick]
 | 
			
		||||
 | 
			
		||||
          #create stream with 3 traces
 | 
			
		||||
          #merge streams
 | 
			
		||||
          AllC = read('%s' % wfefiles[i])
 | 
			
		||||
          AllC += read('%s' % wfnfiles[i])
 | 
			
		||||
          AllC += read('%s' % wfzfiles[i])
 | 
			
		||||
          #filter and taper data
 | 
			
		||||
          All1_filt = AllC[0].copy()
 | 
			
		||||
          All2_filt = AllC[1].copy()
 | 
			
		||||
          All3_filt = AllC[2].copy()
 | 
			
		||||
          All1_filt.filter('bandpass', freqmin=bph[0], freqmax=bph[1], zerophase=False)
 | 
			
		||||
          All2_filt.filter('bandpass', freqmin=bph[0], freqmax=bph[1], zerophase=False)
 | 
			
		||||
          All3_filt.filter('bandpass', freqmin=bpz[0], freqmax=bpz[1], zerophase=False)
 | 
			
		||||
          All1_filt.taper(max_percentage=0.05, type='hann')
 | 
			
		||||
          All2_filt.taper(max_percentage=0.05, type='hann')
 | 
			
		||||
          All3_filt.taper(max_percentage=0.05, type='hann')
 | 
			
		||||
          AllC[0].data = All1_filt.data
 | 
			
		||||
          AllC[1].data = All2_filt.data
 | 
			
		||||
          AllC[2].data = All3_filt.data
 | 
			
		||||
          #calculate AR3C-CF using subclass AR3Ccf of class CharacteristicFunction
 | 
			
		||||
          ar3ccf = AR3Ccf(AllC, cuttimes, tpredz, arhorder, tdetz, addnoise) #instance of AR3Ccf
 | 
			
		||||
          ##############################################################
 | 
			
		||||
          if iplot:
 | 
			
		||||
             #plot vertical trace
 | 
			
		||||
             plt.figure()
 | 
			
		||||
             tr = st[0]
 | 
			
		||||
             tdata = np.arange(0, tr.stats.npts / tr.stats.sampling_rate, tr.stats.delta)
 | 
			
		||||
             p1, = plt.plot(tdata, tr_filt.data/max(tr_filt.data), 'k')
 | 
			
		||||
             p2, = plt.plot(hoscf.getTimeArray(), hoscf.getCF() / max(hoscf.getCF()), 'r')
 | 
			
		||||
             p3, = plt.plot(aiccf.getTimeArray(), aiccf.getCF()/max(aiccf.getCF()), 'b')
 | 
			
		||||
             p4, = plt.plot(arzcf.getTimeArray(), arzcf.getCF()/max(arzcf.getCF()), 'g')
 | 
			
		||||
             p5, = plt.plot(araiccf.getTimeArray(), araiccf.getCF()/max(araiccf.getCF()), 'y')
 | 
			
		||||
             plt.plot([aicpick.getpick(), aicpick.getpick()], [-1, 1], 'b--')
 | 
			
		||||
             plt.plot([aicpick.getpick()-0.5, aicpick.getpick()+0.5], [1, 1], 'b')
 | 
			
		||||
             plt.plot([aicpick.getpick()-0.5, aicpick.getpick()+0.5], [-1, -1], 'b')
 | 
			
		||||
             plt.plot([hospick.getpick(), hospick.getpick()], [-1.3, 1.3], 'r', linewidth=2)
 | 
			
		||||
             plt.plot([hospick.getpick()-0.5, hospick.getpick()+0.5], [1.3, 1.3], 'r')
 | 
			
		||||
             plt.plot([hospick.getpick()-0.5, hospick.getpick()+0.5], [-1.3, -1.3], 'r')
 | 
			
		||||
             plt.plot([lpickhos, lpickhos], [-1.1, 1.1], 'r--')
 | 
			
		||||
             plt.plot([epickhos, epickhos], [-1.1, 1.1], 'r--')
 | 
			
		||||
             plt.plot([aicarzpick.getpick(), aicarzpick.getpick()], [-1.2, 1.2], 'y', linewidth=2)
 | 
			
		||||
             plt.plot([aicarzpick.getpick()-0.5, aicarzpick.getpick()+0.5], [1.2, 1.2], 'y')
 | 
			
		||||
             plt.plot([aicarzpick.getpick()-0.5, aicarzpick.getpick()+0.5], [-1.2, -1.2], 'y')
 | 
			
		||||
             plt.plot([arzpick.getpick(), arzpick.getpick()], [-1.4, 1.4], 'g', linewidth=2)
 | 
			
		||||
             plt.plot([arzpick.getpick()-0.5, arzpick.getpick()+0.5], [1.4, 1.4], 'g')
 | 
			
		||||
             plt.plot([arzpick.getpick()-0.5, arzpick.getpick()+0.5], [-1.4, -1.4], 'g')
 | 
			
		||||
             plt.plot([lpickarz, lpickarz], [-1.2, 1.2], 'g--')
 | 
			
		||||
             plt.plot([epickarz, epickarz], [-1.2, 1.2], 'g--')
 | 
			
		||||
             plt.yticks([])
 | 
			
		||||
             plt.ylim([-1.5, 1.5])
 | 
			
		||||
             plt.xlabel('Time [s]')
 | 
			
		||||
             plt.ylabel('Normalized Counts')
 | 
			
		||||
             plt.title('%s, %s, CF-SNR=%7.2f, CF-Slope=%12.2f' % (tr.stats.station,
 | 
			
		||||
                                                                  tr.stats.channel, aicpick.getSNR(), aicpick.getSlope()))
 | 
			
		||||
             plt.suptitle(tr.stats.starttime)
 | 
			
		||||
             plt.legend([p1, p2, p3, p4, p5], ['Data', 'HOS-CF', 'HOSAIC-CF', 'ARZ-CF', 'ARZAIC-CF'])
 | 
			
		||||
             #plot horizontal traces
 | 
			
		||||
             plt.figure(2)
 | 
			
		||||
             plt.subplot(2,1,1)
 | 
			
		||||
             tsteph = tpredh / 4
 | 
			
		||||
             th1data = np.arange(0, trH1_filt.stats.npts / trH1_filt.stats.sampling_rate, trH1_filt.stats.delta)
 | 
			
		||||
             th2data = np.arange(0, trH2_filt.stats.npts / trH2_filt.stats.sampling_rate, trH2_filt.stats.delta)
 | 
			
		||||
             tarhcf = np.arange(0, len(arhcf.getCF()) * tsteph, tsteph) + cuttimes[0] + tdeth +tpredh
 | 
			
		||||
             p21, = plt.plot(th1data, trH1_filt.data/max(trH1_filt.data), 'k')
 | 
			
		||||
             p22, = plt.plot(arhcf.getTimeArray(), arhcf.getCF()/max(arhcf.getCF()), 'r')
 | 
			
		||||
             p23, = plt.plot(arhaiccf.getTimeArray(), arhaiccf.getCF()/max(arhaiccf.getCF()))
 | 
			
		||||
             plt.plot([aicarhpick.getpick(), aicarhpick.getpick()], [-1, 1], 'b')
 | 
			
		||||
             plt.plot([aicarhpick.getpick()-0.5, aicarhpick.getpick()+0.5], [1, 1], 'b')
 | 
			
		||||
             plt.plot([aicarhpick.getpick()-0.5, aicarhpick.getpick()+0.5], [-1, -1], 'b')
 | 
			
		||||
             plt.plot([arhpick.getpick(), arhpick.getpick()], [-1, 1], 'r')
 | 
			
		||||
             plt.plot([arhpick.getpick()-0.5, arhpick.getpick()+0.5], [1, 1], 'r')
 | 
			
		||||
             plt.plot([arhpick.getpick()-0.5, arhpick.getpick()+0.5], [-1, -1], 'r')
 | 
			
		||||
             plt.plot([lpickarh, lpickarh], [-0.8, 0.8], 'r--')
 | 
			
		||||
             plt.plot([epickarh, epickarh], [-0.8, 0.8], 'r--')
 | 
			
		||||
             plt.plot([arhpick.getpick() + pickerrarh, arhpick.getpick() + pickerrarh], [-0.2, 0.2], 'r--')
 | 
			
		||||
             plt.plot([arhpick.getpick() - pickerrarh, arhpick.getpick() - pickerrarh], [-0.2, 0.2], 'r--')
 | 
			
		||||
             plt.yticks([])
 | 
			
		||||
             plt.ylim([-1.5, 1.5])
 | 
			
		||||
             plt.ylabel('Normalized Counts')
 | 
			
		||||
             plt.title([trH1_filt.stats.station, trH1_filt.stats.channel])
 | 
			
		||||
             plt.suptitle(trH1_filt.stats.starttime)
 | 
			
		||||
             plt.legend([p21, p22, p23], ['Data', 'ARH-CF', 'ARHAIC-CF'])
 | 
			
		||||
             plt.subplot(2,1,2)
 | 
			
		||||
             plt.plot(th2data, trH2_filt.data/max(trH2_filt.data), 'k')
 | 
			
		||||
             plt.plot(arhcf.getTimeArray(), arhcf.getCF()/max(arhcf.getCF()), 'r')
 | 
			
		||||
             plt.plot(arhaiccf.getTimeArray(), arhaiccf.getCF()/max(arhaiccf.getCF()))
 | 
			
		||||
             plt.plot([aicarhpick.getpick(), aicarhpick.getpick()], [-1, 1], 'b')
 | 
			
		||||
             plt.plot([aicarhpick.getpick()-0.5, aicarhpick.getpick()+0.5], [1, 1], 'b')
 | 
			
		||||
             plt.plot([aicarhpick.getpick()-0.5, aicarhpick.getpick()+0.5], [-1, -1], 'b')
 | 
			
		||||
             plt.plot([arhpick.getpick(), arhpick.getpick()], [-1, 1], 'r')
 | 
			
		||||
             plt.plot([arhpick.getpick()-0.5, arhpick.getpick()+0.5], [1, 1], 'r')
 | 
			
		||||
             plt.plot([arhpick.getpick()-0.5, arhpick.getpick()+0.5], [-1, -1], 'r')
 | 
			
		||||
             plt.plot([lpickarh, lpickarh], [-0.8, 0.8], 'r--')
 | 
			
		||||
             plt.plot([epickarh, epickarh], [-0.8, 0.8], 'r--')
 | 
			
		||||
             plt.plot([arhpick.getpick() + pickerrarh, arhpick.getpick() + pickerrarh], [-0.2, 0.2], 'r--')
 | 
			
		||||
             plt.plot([arhpick.getpick() - pickerrarh, arhpick.getpick() - pickerrarh], [-0.2, 0.2], 'r--')
 | 
			
		||||
             plt.title([trH2_filt.stats.station, trH2_filt.stats.channel])
 | 
			
		||||
             plt.yticks([])
 | 
			
		||||
             plt.ylim([-1.5, 1.5])
 | 
			
		||||
             plt.xlabel('Time [s]')
 | 
			
		||||
             plt.ylabel('Normalized Counts')
 | 
			
		||||
             #plot 3-component window
 | 
			
		||||
             plt.figure(3)
 | 
			
		||||
             plt.subplot(3,1,1)
 | 
			
		||||
             p31, = plt.plot(tdata, tr_filt.data/max(tr_filt.data), 'k')
 | 
			
		||||
             p32, = plt.plot(ar3ccf.getTimeArray(), ar3ccf.getCF()/max(ar3ccf.getCF()), 'r')
 | 
			
		||||
             plt.plot([arhpick.getpick(), arhpick.getpick()], [-1, 1], 'b')
 | 
			
		||||
             plt.plot([arhpick.getpick()-0.5, arhpick.getpick()+0.5], [-1, -1], 'b')
 | 
			
		||||
             plt.plot([arhpick.getpick()-0.5, arhpick.getpick()+0.5], [1, 1], 'b')
 | 
			
		||||
             plt.yticks([])
 | 
			
		||||
             plt.xticks([])
 | 
			
		||||
             plt.ylabel('Normalized Counts')
 | 
			
		||||
             plt.title([tr.stats.station, tr.stats.channel])
 | 
			
		||||
             plt.suptitle(trH1_filt.stats.starttime)
 | 
			
		||||
             plt.legend([p31, p32], ['Data', 'AR3C-CF'])
 | 
			
		||||
             plt.subplot(3,1,2)
 | 
			
		||||
             plt.plot(th1data, trH1_filt.data/max(trH1_filt.data), 'k')
 | 
			
		||||
             plt.plot(ar3ccf.getTimeArray(), ar3ccf.getCF()/max(ar3ccf.getCF()), 'r')
 | 
			
		||||
             plt.plot([arhpick.getpick(), arhpick.getpick()], [-1, 1], 'b')
 | 
			
		||||
             plt.plot([arhpick.getpick()-0.5, arhpick.getpick()+0.5], [-1, -1], 'b')
 | 
			
		||||
             plt.plot([arhpick.getpick()-0.5, arhpick.getpick()+0.5], [1, 1], 'b')
 | 
			
		||||
             plt.yticks([])
 | 
			
		||||
             plt.xticks([])
 | 
			
		||||
             plt.ylabel('Normalized Counts')
 | 
			
		||||
             plt.title([trH1_filt.stats.station, trH1_filt.stats.channel])
 | 
			
		||||
             plt.subplot(3,1,3)
 | 
			
		||||
             plt.plot(th2data, trH2_filt.data/max(trH2_filt.data), 'k')
 | 
			
		||||
             plt.plot(ar3ccf.getTimeArray(), ar3ccf.getCF()/max(ar3ccf.getCF()), 'r')
 | 
			
		||||
             plt.plot([arhpick.getpick(), arhpick.getpick()], [-1, 1], 'b')
 | 
			
		||||
             plt.plot([arhpick.getpick()-0.5, arhpick.getpick()+0.5], [-1, -1], 'b')
 | 
			
		||||
             plt.plot([arhpick.getpick()-0.5, arhpick.getpick()+0.5], [1, 1], 'b')
 | 
			
		||||
             plt.yticks([])
 | 
			
		||||
             plt.ylabel('Normalized Counts')
 | 
			
		||||
             plt.title([trH2_filt.stats.station, trH2_filt.stats.channel])
 | 
			
		||||
             plt.xlabel('Time [s]')
 | 
			
		||||
             plt.show()
 | 
			
		||||
             raw_input()
 | 
			
		||||
             plt.close()
 | 
			
		||||
 | 
			
		||||
parser = argparse.ArgumentParser()
 | 
			
		||||
parser.add_argument('--project', type=str, help='project name (e.g. Insheim)')
 | 
			
		||||
parser.add_argument('--database', type=str, help='event data base (e.g. 2014.09_Insheim)')
 | 
			
		||||
parser.add_argument('--event', type=str, help='event ID (e.g. e0010.015.14)')
 | 
			
		||||
parser.add_argument('--iplot', help='anything, if set, figure occurs')
 | 
			
		||||
parser.add_argument('--station', type=str, help='Station ID (e.g. INS3) (optional)')
 | 
			
		||||
args = parser.parse_args()
 | 
			
		||||
 | 
			
		||||
run_makeCF(args.project, args.database, args.event, args.iplot, args.station)
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user