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

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

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

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

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

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


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


### 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.sh         リダイレクトの強制上書きモード．
#                     既存のファイルがあっても強制的に上書きする．．

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

# C Shellのif文を使って，FFLAG=1の時のみ表示されている．
# 詳しくはC 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        重ね書きオプション．
