#!/bin/sh
# 一行目に，起動するシェルのフルパスを書く．
# Bourne Shellの場合は/bin/sh，C Shellの場合には/bin/cshの場合がほとんど．
# このスクリプトは'Bourne Shell'の文法である．	
# C Shellを使用する方は，C Shell版を御覧あれ．

# 使用する単位は.gmtdefaultsでcmを使用するように指定しておくほうが無難かも．

##### パラメータの設定 #####
# シェル変数に，パラメータの値を設定する．
# Bourne Shellの文法では，イコール'='の前後に空白があってはいけない．

SHOT=5                        ## ショットの番号
REDUCE=6.0                    ## Reduce Velosity
DFLAG=2                       ## 距離の表示の切替
                              ## 1:測線の端をゼロにした距離で表示
                              ## 2:震央距離で表示
WAVE_DATA="S${SHOT}ALL.v"     ## 波形データのファイル名
OUTPUT="record.ps"            ## 出力するPostScriptファイル名

TITLE="Observed seismograms (S${SHOT})"  ## タイトル
X_TITLE="Distance(km)"                   ## X軸のタイトル
Y_TITLE="T-D/$REDUCE(s)"                 ## Y軸のタイトル
DEPTH=20; HEIGHT=12                      ## 図の幅と高さを指定(cm)．

AMP=2.0            ## 波形を書かせる振幅のスケール ##
AFLAG=2	           ## 1:相対振幅で表示  2:最大振幅で正規化振幅で表示 ##
X1=-100 ; X2=150   ## 表示する距離の範囲指定．
T1=0 ; T2=10       ## 表示する時間の範囲指定 ##
FFLAG=1            ## フィルターをかけるかどうかの指定．
                   ## ( 1:フィルターをかける  0:フィルターをかけない ) ##
FL=5 ; FH=15 ; FS=20  ## フィルターの通過域の指定(Hz)．
                      ## 斎藤正徳：漸化式ディジタルフィルターの自動設計を参照．


##### いよいよ波形を書かせる命令が始まる！ #####
# コマンドオプションの説明では，シェル変数を展開した状態で説明してあるので，
# 適宜上を見てシェル変数の値を確認してもらいたい．
# 命令が長くなる時には，行末にバックスラッシュを書けば次の行に続けて書ける．


### psbasemap: 外枠やタイトル，軸の数値などを表示． ###
psbasemap -JX$DEPTH/$HEIGHT -R$X1/$X2/$T1/$T2\
 -Ba20f10:"$X_TITLE":/a1f0.5:"$Y_TITLE"::."$TITLE":nSeW -V -X5 -Y5 -K >| $OUTPUT

#-JX20/12        -Jはmappingの際の投影の仕方の指定． 
#                -JXの場合はnormalな直交座標で表示．  
#                -JX幅/高さ という具合．この場合は，幅20cm，高さ12cm．
#
#-R0/230/0/5     -Rは表示する範囲(Resion)を指定．
#                -RX軸min/X軸max/Y軸min/Y軸max という具合．
#
#-Ba20f10:"Distance(km)":/a1f0.5:"T-D/6.0"::."$TITLE":nSeW
#    -Bは，軸の書式の指定．
#    -BX軸書式:"X軸タイトル":/Y軸書式:"Y軸タイトル"::."タイトル":数値の場所指定
#    という具合．
#  a20f10             X軸の数値を20kmずつ，目盛を10kmずつ表示．
#  :"Distance(km)":   X軸のタイトル
#  a1f0.5             Y軸の数値を1secずつ，目盛を0.5secずつ表示．
#  :"$Y_TITLE":       Y軸のタイトル
#  :."T-D/6.0(s)":    全体のタイトル
#  nSeW               S（下）とW（左）が大文字なので，下と左に軸の数値を表示．
#  -V                 verposeオプション．
#                     現在の処理を逐一表示する．デバックに便利．
#  -X5 -Y5            図の原点の位置を，紙の左下からの距離で指定．
#                     X方向に5cm，Y方向に5cmの位置を原点にしている．
#  -K                 後続オプション．
#                     これを付けないと，次の命令で図を重ね書き出来ない．
#>| record.ps         リダイレクトの強制上書きモード．
#                     既存のファイルがあっても，強制的に上書きする．

### pstext: フィルターの帯域を表示 ###
if [ $FFLAG -eq 1 ]; then
pstext -JX -R -N -V -O -K <<END >> $OUTPUT
$X2 -1.5 20 0.0 6 RM filter ${FL}-${FH}Hz
END
fi

# Bourne Shellのif文を使って，FFLAG=1の時のみ表示されている．
# 'if [ $FFLAG -eq 1 ]; then' のセミコロンを忘れずに．
# 詳しくはBourne Shellの文法書を参考．
# <<ENDとENDの組合せは，ヒアドキュメントと呼ばれる．
# ENDの行が来るまでに書かれたデータを，psxyコマンドに標準入力から流し込む．
# この時，データにシェル変数の展開が使えるのがミソである．
# この場合，文字を書かせる場所にX2，帯域の数値にFLとFHを使用している．
#
#-JX -R    前回のコマンド(psbasemap)の時の指定を使用．
#-N        枠の外に表示可能にするオプション．
#          これが無いと，枠の外にはみ出たものはクリッピングされ消えてしまう．
#-V        verposeオプション．
#-O        重ね書きオプション．
#          前のコマンド(psbasemap)で表示した図に重ね書きさせるために指定．
#-K        後続オプション．
#>> record.ps リダイレクトの追加書きモード指定．
#             前のコマンド(psbasemap)で表示した図に
#             PostScriptコードを追加書きさせるために指定．

### psxy: 波形の表示 ###
cat <<END | wavedata | psxy -JX -R -M -V -O >> $OUTPUT
$WAVE_DATA
$SHOT $AMP $AFLAG $X1 $X2 $T1 $T2 $REDUCE $FFLAG $DFLAG
$FL $FH $FS
END

# psxyコマンドで波形を表示させるために，wavedataというプログラムを使う．
# プログラムは，Ｃ言語版(wavedata.c)とFortran言語版(wavedata.f)がある．
# どちらも同じ動きをする（はず）．
# Ｃ言語版の方は現在処理中のデータのヘッダーを表示する．（標準エラー出力）
#
# ヒアドキュメントを使って，wavedataに計算に必要なパラメータを
# 標準入力から流し込んでいる．
# 計算に必要なパラメータは全てシェル変数に代入してあるので，
# それを使用してヒアドキュメントでパラメータを入力している．
#
# wavedataは，psxyで波形を表示させるために処理させたデータを標準出力する．
# そのデータを，パイプを使ってpsxyコマンドに標準入力から流し込んでいる．
# wavedataから標準出力されるデータは，１トレースごとに'>'のみの行で
# 区切ってある．詳しくはソースを参考に．
#
#-JX -R    前のコマンドオプションを使う．
#-M        複数のデータセットを表示する．データセットは，'>'のみの行で区切る．
#-V        verposeオプション．
#-O        重ね書きオプション．
