from rsf.proj import *
fetches = {
'vel_4layer.HH': ['obs', 'http://www.trip.caam.rice.edu']
}
for file in fetches.keys():
Fetch(file,fetches[file][0],server=fetches[file][1])
Flow('null',None,'spike n1=651 d1=0.008 n2=400 o2=1 d2=1 mag=0')
Flow('head','null','window n1=1')
Flow('tracl','head','math output=x1 | dd type=int')
Flow('selev','head','math output=-1875 | dd type=int')
Flow('gelev','head','math output=-6 | dd type=int')
Flow('sx', 'head','math output=12000 | dd type=int')
Flow('gx', 'head','math output="5000+25*(x1-1)" | dd type=int')
Flow('offset','sx gx','add scale=-1,1 ${SOURCES[1]}')
Flow('tnull','null tracl selev gelev sx gx offset',
'''
segyheader
tracl=${SOURCES[1]}
selev=${SOURCES[2]}
gelev=${SOURCES[3]}
sx=${SOURCES[4]}
gx=${SOURCES[5]}
offset=${SOURCES[6]}
''')
Flow('hdr12000.su','null tnull','suwrite tfile=${SOURCES[1]} endian=0')
Flow('null12',None,'spike n1=651 d1=0.008 n2=400 o2=1 d2=1 mag=0 n3=12 o3=0 d3=1')
Flow('head12','null12','window n1=1')
Flow('tracl12','head12','math output="x1+400*x2" | dd type=int')
Flow('selev12','head12','math output=-1875 | dd type=int')
Flow('gelev12','head12','math output=-6 | dd type=int')
Flow('sx12', 'head12','math output="8000+400*x2" | dd type=int')
Flow('gx12', 'head12','math output="5000+25*(x1-1)" | dd type=int')
Flow('offset12','sx12 gx12','add scale=-1,1 ${SOURCES[1]}')
Flow('tnull12','null12 tracl12 selev12 gelev12 sx12 gx12 offset12',
'''
segyheader
tracl=${SOURCES[1]}
selev=${SOURCES[2]}
gelev=${SOURCES[3]}
sx=${SOURCES[4]}
gx=${SOURCES[5]}
offset=${SOURCES[6]}
''')
Flow('hdr8-12km.su','null12 tnull12','suwrite tfile=${SOURCES[1]} endian=0')
Flow('vel_4layer.rsf', 'vel_4layer.HH', 'dd form=native');
Flow('csq_4layer','vel_4layer.rsf',
'mul ${SOURCES[0]} | put data_type=csq ')
Flow('csq_4layersm','csq_4layer','smooth rect1=50 rect2=50 repeat=4')
Flow('csq_4layersm2','csq_4layer','smooth rect1=5 rect2=5 repeat=4')
Flow('dcsq_4layer','csq_4layer csq_4layersm2','add scale=1,-1 ${SOURCES[1]}')
import math
fpeak=5
t0 = 1.0/fpeak
s = 1.0 /(math.sqrt(2)*math.pi*fpeak)
Flow('wavelet',None,
'''
math n1=101 d1=0.004
output="%g*(x1-%g)*exp(-%g*(x1-%g)^2)" | put o1=-0.1
''' % (-1.e6/(s*s*s*math.sqrt(2*math.pi)),t0,1/(2*s*s),t0))
Flow('twavelet','wavelet','segyheader')
Flow('wavelet_base.su','wavelet twavelet','suwrite endian=0 tfile=${SOURCES[1]}')
for foo in ['12000', '8-12km']:
Flow('wavelet' + foo + '.su', ['wavelet_base.su', 'hdr' + foo + '.su'],
'''
towed_array
data=${SOURCES[1]}
src=${SOURCES[0]}
towed=${TARGETS[0]}
''',
stdin=0, stdout=0)
Flow('init',None,'makevel n1=416 n2=800 d1=25 d2=25 dlens=200 tlens=200 v000=0 vlens=100 x1lens=1875 x2lens=12000 | sfput id1=0 id2=1 id3=2 dim=2 gdim=3 n3=1 o3=0 d3=1')
Flow('movieinit','init csq_4layer',
'''
makevel n1=416 n2=800 n3=33 d1=25 d2=25 d3=160 v000=0 |
put id1=0 id2=1 id3=2 dim=2 gdim=3 > $TARGET &&
acd deriv=0 order=2 cfl=0.5 cmin=1.0 cmax=5.0
csq=${SOURCES[1]} init=${SOURCES[0]} sampord=1 movie=$TARGET
''',stdin=0,stdout=-1,workdir='movieinit.work')
Flow('moviesrc','wavelet12000.su csq_4layer',
'''
makevel n1=416 n2=800 n3=33 d1=25 d2=25 d3=160 v000=0 |
put id1=0 id2=1 id3=2 dim=2 gdim=3 > $TARGET &&
acd deriv=0 order=2 cfl=0.5 cmin=1.0 cmax=5.0
csq=${SOURCES[1]} source=${SOURCES[0]} sampord=1 movie=$TARGET
''',stdin=0,stdout=-1,workdir='moviesrc.work')
Flow('shot12000.su','wavelet12000.su csq_4layer hdr12000.su',
'''
/bin/cp ${SOURCES[2]} $TARGET &&
acd deriv=0 order=2 cfl=0.5 cmin=1.0 cmax=5.0
csq=${SOURCES[1]} source=${SOURCES[0]} sampord=1 data=$TARGET
''',stdin=0,stdout=-1,workdir='shot1200.work')
Flow('born12000.su','wavelet12000.su csq_4layersm dcsq_4layer hdr12000.su',
'''
/bin/cp ${SOURCES[3]} $TARGET &&
acd deriv=1 adjoint=0 order=2 cfl=0.5 cmin=1.0 cmax=5.0
csq=${SOURCES[1]} csq_d1=${SOURCES[2]} source=${SOURCES[0]} sampord=1 data=$TARGET
''',stdin=0,stdout=-1,workdir='born12000.work')
Flow('migr12000','born12000.su csq_4layersm dcsq_4layer wavelet12000.su',
'''
scale < ${SOURCES[2]} > $TARGET dscale=0.0 &&
acd deriv=1 adjoint=1 nsnaps=10 order=2 cfl=0.5 cmin=1.0 cmax=5.0
csq=${SOURCES[1]} csq_b1=$TARGET source=${SOURCES[3]} sampord=1 data=${SOURCES[0]}
''',stdin=0,stdout=-1,workdir='migr12000.work')
Flow('line8-12km.su','wavelet8-12km.su csq_4layer hdr8-12km.su',
'''
/bin/cp ${SOURCES[2]} $TARGET &&
acd deriv=0 order=2 cfl=0.5 cmin=1.0 cmax=5.0
csq=${SOURCES[1]} source=${SOURCES[0]} sampord=1 data=$TARGET
''',stdin=0,stdout=-1,workdir='line8-12km.work')
Flow('born8-12km.su','wavelet8-12km.su csq_4layersm dcsq_4layer hdr8-12km.su',
'''
/bin/cp ${SOURCES[3]} $TARGET &&
acd deriv=1 adjoint=0 order=2 cfl=0.5 cmin=1.0 cmax=5.0
csq=${SOURCES[1]} csq_d1=${SOURCES[2]} source=${SOURCES[0]} sampord=1 data=$TARGET
''',stdin=0,stdout=-1,workdir='born8-12km.work')
Flow('migr8-12km','born8-12km.su csq_4layersm dcsq_4layer wavelet8-12km.su',
'''
scale < ${SOURCES[2]} > $TARGET dscale=0.0 &&
acd deriv=1 adjoint=1 nsnaps=10 order=2 cfl=0.5 cmin=1.0 cmax=5.0
csq=${SOURCES[1]} csq_b1=$TARGET source=${SOURCES[3]} sampord=1 data=${SOURCES[0]}
''',stdin=0,stdout=-1,workdir='migr8-12km.work')
Result('csq-4layer', 'csq_4layer', 'put label1=Depth unit1=m label2=Distance unit2=m label="V\_p\^\^2\_" unit="m\^2\_/ms\^2\_" | grey color=c mean=y title="Atlantis Cartoon" scalebar=y barreverse=y')
Result('csq-4layersm', 'csq_4layersm', 'put label1=Depth unit1=m label2=Distance unit2=m label="V\_p\^\^2\_" unit="m\^2\_/ms\^2\_" | grey color=c mean=y title="MigVel - Atlantis Cartoon" scalebar=y barreverse=y')
Result('dcsq-4layer', 'dcsq_4layer', 'put label1=Depth unit1=m label2=Distance unit2=m label="V\_p\^\^2\_" unit="m\^2\_/ms\^2\_" | grey color=c mean=y title="Delta V\_p\^\^2\_ - Atlantis Cartoon" scalebar=y barreverse=y')
Result('gauss', 'init', 'put label1=Depth unit1=m label2=Distance unit2=m label="Pressure" unit="GPa" | grey color=c mean=y clip=100 title="Gaussian Data t=0.0 s" scalebar=y barreverse=y')
Result('frameinit', 'movieinit', 'window f3=32 n3=1 |put label1=Depth unit1=m label2=Distance unit2=m label="Pressure" unit="GPa" | grey color=c mean=y clip=300 title="Gaussian data t=5.12 s" scalebar=y barreverse=y')
Result('wavelet','wavelet_base.su', 'suread endian=0 read=data | put label1=Time label2=Pressure unit1=s unit2=GPa title="Gaussian deriv fmax=5 Hz" unit="GPa" |sfgraph')
Result('framesrc', 'moviesrc', 'window f3=32 n3=1 |put label1=Depth unit1=m label2=Distance unit2=m label="Pressure" unit="GPa" | grey color=c mean=y clip=1.e+6 title="Point source 5 Hz t=5.12 s" scalebar=y barreverse=y')
Result('shot12000','shot12000.su', 'suread endian=0 read=data | put labeldcsq_4layer.1=Time label2=Distance d2=0.025 o2=5 unit1=s unit2=km title="Node at 12 km" label="Pressure" unit="GPa" | grey scalebar=y barreverse=y')
Result('born12000','born12000.su', 'suread endian=0 read=data | put label1=Time label2=Trace unit1=s title="Born x_s=12000 m" unit="GPa" | grey')
Result('migr12000', 'migr12000', 'put label1=Depth unit1=m label2 = Distance unit2=m label="V\_p\^\^2\_" unit="m\^2\_/ms\^2\_" |window max1=8000 min2=5000 max2=15000 | grey color=c mean=y title="RTM of Born Shot x_s = 12000" clip=1.e+8')
Result('line8-12km','line8-12km.su', 'suread endian=0 read=data | put label1=Time label2=Node d2=0.4km o2=8 unit1=s unit2=km title="Nodes @0.4km" label="Pressure" unit="GPa" | grey scalebar=y barreverse=y')
Result('born8-12km','born8-12km.su', 'suread endian=0 read=data | put label1=Time label2=Trace unit1=s title="Born x_s=8-12km" unit="GPa" | grey')
Result('migr8-12km', 'migr8-12km', 'put label1=Depth unit1=m label2 = Distance unit2=m label="V\_p\^\^2\_" unit="m\^2\_/ms\^2\_" |window max1=8000 min2=5000 max2=15000 | grey color=c mean=y title="RTM of Born Shot x_s = 8-12km" clip=1e+8')
End() |