書式
強震記録ファイルは拡張子".ac"を持つASCIIテキストファイルで、行はCRLFで区切られています。ひとつのファイルに1台の強震計で得られた複数のチャネルの記録が収録されています。
最初の行はヘッダーで、以下の情報を含んでいます。
- 1~10桁: 記録年月日(yyyy/mm/dd)
- 12~19桁: 記録開始時刻(hh/nn/ss)。日本の標準時です。
- 21~23桁: ファイルに含まれるチャネル数
- 25~27桁: サンプル周波数(Hz)
- 29~33桁: 各チャネルのサンプル数。全てのチャネルが同じサンプル数となっています。
- 35桁~: 観測地点情報。通常は"
CODE: Description
"の構成です。CODE
は観測地点に付けられたユニークな略称(英数字)、Description
は観測地点の名称です。記号と名称の文字数は決まっていません。
2行目は最初のチャネルのヘッダーとなります。
- 1~10桁: チャネルラベルが左寄せで書かれます。チャネルラベルは通常、ハイフン"-"で区切られた方位とセンサーラベルで構成されます。方位は3桁の数字か"UP"で表され、数字の場合は水平成分を意味し、記録の方向成分を北から時計回りに測った値(度)で示します。"UP"は上下成分です。センサーラベルはセンサーの設置場所を示します。例えば
063-GL
は地表のN063°E成分となります。 - 11~20桁: そのチャネルの最大値です
- 21~30桁: 最大値が発生するステップ数です
- 31~40桁: 記録処理の段階で除去されたオフセット値です。
- 41~50桁: 記録処理の段階で用いられた校正係数です。
オフセット値と校正係数は単にメモとしてファイルに残っており、収録されている加速度データは既に物理値に変換されています。
3行目以降には加速度データが書かれています。1ステップの加速度値は10桁を占め、1行に8個のデータが書かれています。Fortranで言えば(8F10.3)
の書式となります。
チャネルヘッダーとデータブロックは、収録チャネルの数だけ繰り返されます。以下に例を示します。
1993/01/15 20:06:08 3 100 15700 KSR: Kushiro Local Meteorological Observatory, JMA 063-GL -711.403 3675 0.013 3.00e-2 0.077 -0.043 0.017 0.017 0.017 -0.043 -0.013 0.017 -0.013 0.017 -0.013 -0.013 0.047 -0.013 0.017 -0.043 -0.043 -0.073 0.017 -0.013 0.047 -0.043 -0.013 -0.013 -0.043 -0.013 0.017 -0.013 0.017 -0.043 0.017 0.047 . . (snipped) . 1.007 0.707 0.797 1.097 0.677 -0.133 -0.403 -0.313 -0.733 -1.243 -0.943 -0.283 153-GL -637.240 3617 0.010 3.00e-2 0.020 0.020 -0.010 0.020 0.020 -0.040 -0.040 0.020 -0.010 -0.010 0.020 0.020 -0.010 -0.010 -0.010 -0.010 -0.040 -0.010 0.020 -0.010 -0.040 -0.010 -0.010 -0.040 -0.010 -0.010 -0.010 -0.010 -0.010 0.020 -0.010 -0.010 . . (snipped) . -1.210 -1.690 -2.230 -2.260 -1.900 -1.480 -1.090 -0.610 -0.400 -0.490 -0.370 0.110 UP-GL 363.391 3298 -0.030 3.00e-2 0.060 0.000 0.000 -0.030 0.030 0.000 -0.030 0.060 0.030 -0.030 -0.060 0.060 0.060 0.030 0.000 -0.030 -0.060 0.000 0.030 -0.030 -0.030 0.000 0.030 0.060 0.030 -0.030 -0.060 -0.060 0.030 0.030 0.000 -0.030 . . (snipped) . -0.600 -0.780 -0.420 0.450 0.960 0.600 -0.210 -0.840 -0.990 -0.810 -0.810 -0.600
サンプルプログラム
Fortran 90 で書かれたサンプルプログラムを以下に示します。
real(4), allocatable:: peak(:), acc(:,:) character(10), allocatable:: comp(:) integer(4):: nfrq, nstp, nch, ich, istp, i integer(4):: iostat real(4):: dt, offset, calib character(10):: date, time, code character(128):: site, fname ! fname='sample.ac' open (88, file=fname, iostat=iostat) ! read file header. read (88, '(a10,1x,a8,2i4,i6,a128)') date, time, nch, nfrq, nstp, site ! allocate arrays. allocate (comp(nch), peak(nch), acc(nstp,nch)) ! read header and acceleration of each channel. do ich=1, nch read (88, '(a10,f10.3)') comp(ich), peak(ich) read (88, '(8f10.3)') (acc(i,ich), i=1,nstp) end do ! close a file. close (88) ! get some parameters dt=1/real(nfrq) i=index(site, ':') if (i.gt.0) then code=site(1:i-1) site=site(i+1:) else code='' endif ! output parameters. print '(''Acceleration filename: '',a)', trim(fname) print '('' Sitecode: '',a)', trim(code) print '('' Sitename: '',a)', trim(site) print '(''Trigger time and date:'',a8,1x,a10)', time, date print '('' Number of channels:'',i6)', nch print '('' Sampling frequency:'',i6,''Hz'')', nfrq print '('' (Time interval:'',f6.3,''sec)'')', dt print '('' Number of steps:'',i6)', nstp do ich=1, nch print '(''ch:'',i2,'' ('',a,'') peak:'',f8.2)', & ich, trim(comp(ich)), peak(ich) end do ! release arrays. deallocate (peak, comp, acc) stop end
備考
- 特記なき限り収録されている記録は加速度です。速度記録の場合はセンサーラベルに[V]のサフィックスが付きます。
- 加速度記録の単位はcm/s2です。速度の場合はcm/sとなります。
- 加速度値への変換と最初の5秒間の記録から算出したオフセットの除去以外の処理は行っていません。