Saturday, November 12, 2011

SEGY2ASCII

Konversi SEGY ke ASCII diperlukan karena format ASCII merupakan bahasa manusia (bukan mesin) serta memiliki fleksibilitas untuk melakukan manipulasi matematika lanjut dengan software-software yang ada (seperti octave, matlab, shell script, dll.).

Di luar sana, banyak sekali beredar aplikasi atau tool gratis untuk melakukan konversi tersebut. Diantaranya SegyMAT yang berbasis matlab dan octave yang bisa didownload disini.

Anda akan memperoleh file SegyMAT.tgz, lalu ekstraklah (pada Linux) dengan perintah tar -xvvf SegyMAT.tgz sehingga diperoleh beberapa file dengan ektensi .m.

Untuk mendemonstrasikannya pada data segy, downloadlah data density.segy model Marmousi yang telah saya jelaskan disini.

Lakukan konversi segy ke su dengan perintah:
segyread tape=density.segy verbose=1 endian=0 > density.su

surange < density.su
751 traces:
tracl 752 1502 (752 - 1502)
tracr 752 1502 (752 - 1502)
fldr 1
tracf 752 1502 (752 - 1502)
trid 1
nvs 1
scalco -100
ns 2301
dt 2304


Tampilkan dengan perintah:
suflip flip=0 < density.su | suximage legend=1 perc=90 &

Selanjutnya saya akan menggunakan fungsi ReadSegy.m yang telah ekstrak dari SegyMAT. Simpanlah semua file .m serta data segy pada direktori atau path yang sama, lalu dari direktori tersebut panggillah octave. Jika belum memiliki octave installah dengan sudo get -apt octave

Setelah memanggil octave dengan mengetikkan octave pada terminal linux, anda akan memperoleh octave>

Ekstrak segy dengan perintah:
[density,TraceHeaderInfo,SegyTraceHeaders,SegyHeader]=ReadSegy('density.segy');

Lalu mendapatkan pesan:
Number of Samples Per Trace=2301 (banyaknya sampel per trace)
Number of Traces=751 (banyaknya trace)
Reading trace 200 of 751
Reading trace 400 of 751
Reading trace 600 of 751
header=200 of 751
header=400 of 751
header=600 of 751


Jika anda mengetikkan density pada octave, anda akan memperoleh hal seperti di bawah ini:

density =

Columns 1 through 5:

1000.0 1000.0 1000.0 1000.0 1000.0
1000.0 1000.0 1000.0 1000.0 1000.0
1000.0 1000.0 1000.0 1000.0 1000.0
1000.0 1000.0 1000.0 1000.0 1000.0
1000.0 1000.0 1000.0 1000.0 1000.0
1000.0 1000.0 1000.0 1000.0 1000.0
1000.0 1000.0 1000.0 1000.0 1000.0


Sekarang saya akan men-save density menjadi density.txt saveascii
saveascii(density,'density.txt',1);

Buka terminal linux yang baru, lalu masuklah ke direktori ketika anda memanggil octave.

Pada direktori tersebut anda memiliki density.txt dimana jumlah kolom menunjukkan banyaknya trace dan jumlah baris menunjukkan sampel.

Buatlah matrix kedalaman dengan perintah:
seq 0 2.304 5300 > depth.txt

Sisipkan depth.txt ke-kolom pertama density, dengan perintah paste:
paste depth.txt density.txt > depthdensity.ascii

Coba plot dengan gnuplot:
set xrange [1800:2500]
set yrange [0:5300] reverse
set xlabel 'Densitas (kg/m^3)'
set ylabel 'Kedalaman (ft)'
plot "depthdensity.ascii" using 300:1 title 'density trace#300' with lines



Kembali ke terminal octave, berdasarkan data density saya akan menghitung overburden (psi), lalu outputnya disimpan sebagai segy dengan perintah WriteSegy.

depth=repmat(2.304,2301,751);
depthdens=depth.*(density./1000);
overburden= 0.433.*cumsum(depthdens);
saveascii(overburden,'overburden.ascii',1);
WriteSegy('overburden.segy',overburden);


Keluar dari octave (dengan mengetikkan exit), konversi dari segy ke su:
segyread tape=overburden.segy verbose=1 endian=0 > overburden.su

surange < overburden.su
751 traces:
ns 2301
dt 2000
year 2011
hour 20
minute 34 35 (34 - 35)
sec 0 60 (46 - 2)


Perbaiki sampling rate menjadi 2304
sushw key=dt a=2304 < overburden.su > overburden_new.su

Tampilkan:
suximage < overburden_new.su perc=90 legend=1 title='overburden(psi)' &
Tekan 'h' untuk mengubah skala warna.

No comments: