From 6bc8fb75c68243a046e629f03084b2f3214597d3 Mon Sep 17 00:00:00 2001 From: Rui Gong Date: Tue, 21 May 2024 20:15:26 -0500 Subject: [PATCH] reproducible version --- book/tccs/shapestacks/Fig/schematic.pdf | Bin 0 -> 42655 bytes book/tccs/shapestacks/SConstruct | 8 + book/tccs/shapestacks/elf/SConstruct | 422 ++++++++++++++++++ book/tccs/shapestacks/paper.bib | 309 +++++++++++++ book/tccs/shapestacks/paper.tex | 529 +++++++++++++++++++++++ book/tccs/shapestacks/synseis/SConstruct | 476 ++++++++++++++++++++ 6 files changed, 1744 insertions(+) create mode 100644 book/tccs/shapestacks/Fig/schematic.pdf create mode 100644 book/tccs/shapestacks/SConstruct create mode 100644 book/tccs/shapestacks/elf/SConstruct create mode 100644 book/tccs/shapestacks/paper.bib create mode 100644 book/tccs/shapestacks/paper.tex create mode 100644 book/tccs/shapestacks/synseis/SConstruct diff --git a/book/tccs/shapestacks/Fig/schematic.pdf b/book/tccs/shapestacks/Fig/schematic.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a8040967c4d9761cc71ad1e0f5994e64beecf7b8 GIT binary patch literal 42655 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 stack + #Flow(stack,[onetrace,idip],'shpwstack flo=1 fhi=300 niter=4 half=n jump=4 velocity=%g dip=${SOURCES[1]} mode=1 order=4 eps=0.01 nmo=y' % minvel) + shaping(pwonetrace,pwstack,None) + +Flow('nsnmo',pwstacks,'cat axis=2 ${SOURCES[1:%d]}' % n2) +Result('nsnmo', + ''' + transp | bandpass fhi=2 | transp | + mutter v0=3.5 half=n | mutter slope0=0.4 half=n | grey title="PWC NMO" label2=Offset unit2=km screenratio=2 + ''') + +############################## Shaping NMO stack ################################# + +def shbackward(data,model): + Flow(model,[data,'vel'], + ''' + spline pattern=${SOURCES[1]} | + nmo velocity=${SOURCES[1]} half=n str=0.0 | + stack + ''') +shbackward('cmp2','shmod0') + +Flow('shgmres','cmp2 vel','shstack flo=1 fhi=350 niter=5 half=n jump=4 velocity=${SOURCES[1]}') +Flow('shgmreslow','cmplow vel','shstack flo=1 fhi=350 niter=5 half=n jump=4 velocity=${SOURCES[1]}') + +Flow('shgmres1','cmp2 vel','shstack flo=1 fhi=300 niter=1 half=n jump=4 velocity=${SOURCES[1]}') +Flow('shgmres2','cmp2 vel','shstack flo=1 fhi=300 niter=2 half=n jump=4 velocity=${SOURCES[1]}') + +Result('shmod1','shgmres shgmres2 shgmres1 shmod0', + ''' + cat axis=2 ${SOURCES[1:4]} | window f1=500 n1=500 | + dots labels=niter5:niter2:niter1:niter0 + gaineach=n + ''') + +Plot('shgmres','spectra | window max1=250 | graph max2=8 plotfat=3 label2=Amplitude title="SNMO Stack vs. PWC Stack"') + +Result('shpwspec1','shgmres gmres3','Overlay') + + +Result('mod4','istack2 shgmres gmres3 trace', + ''' + cat axis=2 ${SOURCES[1:4]} | + dots labels=Conventional:SNMO:PWC:Reference + gaineach=n + ''') + +Plot('trace2','trace','spectra | window max1=35 | graph max2=3 plotfat=3 label2=Amplitude title=""') + +Plot('stacklow2','stacklow','spectra | window max1=35 | graph max2=3 plotfat=3 label2=Amplitude plotcol=7 dash=5 title="Low Frequency Recovery"') + +Plot('gmreslow2','gmreslow','spectra | window max1=35 | graph max2=3 plotfat=3 label2=Amplitude plotcol=5 dash=1 title="" wantaxis2=n wantaxis1=n') + +Plot('shgmreslow2','shgmreslow','spectra | window max1=35 | graph max2=3 plotfat=3 label2=Amplitude plotcol=3 dash=1 title="" wantaxis2=n wantaxis1=n') + +Result('allspeclow','trace2 gmreslow2 shgmreslow2 stacklow2','Overlay') + + +# With AVO +Flow('cmpavo1','trace vel', + ''' + spray axis=2 n=%d d=%g o=%g | + inmo velocity=${SOURCES[1]} half=n | + noise seed=2015 var=0.1 | + math output="input*(1-x2*%g)" + ''' % (n2,d2,o2,2.0/5.0)) +Flow('cmpavo','trace vel', + ''' + spray axis=2 n=%d d=%g o=%g | + inmo velocity=${SOURCES[1]} half=n | + noise seed=2015 var=0.1 | + math output="input*(1-x2*%g)" | + window j1=4 + ''' % (n2,d2,o2,2.0/5.0)) +Result('cmpavo','grey title="CMP Gather with AVO" label2=Offset unit2=km ') +Flow('nmo0avo','cmpavo1 vmax','nmo velocity=${SOURCES[1]} half=n') +Flow('dipavo','nmo0avo ovdip1','dip nj1=1 both=n eps=1 rect1=15 rect2=15 idip=${SOURCES[1]} order=4') +Flow('stackavo','cmpavo vel2 vel','nmo velocity=${SOURCES[1]} half=n | mutter v0=4.5 half=n | stack | spline pattern=${SOURCES[2]}') +Flow('pwavo','cmpavo dipavo','shpwstack flo=11 fhi=300 niter=4 half=n jump=4 velocity=%g dip=${SOURCES[1]} mode=2 order=4 eps=0.01 nmo=y | cut n1=255' % minvel) + +Plot('stackavo','spectra | window max1=250 | graph max2=8 plotfat=3 label2=Amplitude title="Conventional vs. PWC Stack"') +Plot('pwavo','spectra | window max1=250 | graph max2=8 plotfat=3 label2=Amplitude plotcol=5 dash=1 title="" wantaxis2=n wantaxis1=n') + +Result('specavo2','stackavo pwavo','Overlay') + +Result('specavo1','trace pwavo','Overlay') + +Flow('shgmresavo','cmpavo vel','shstack niter=6 flo=5 fhi=300 half=n jump=4 velocity=${SOURCES[1]} | cut f1=1 n1=200') +Plot('shgmresavo','spectra | window max1=250 | graph max2=8 plotfat=3 label2=Amplitude plotfat=3 plotcol=5 dash=1 title="" wantaxis2=n wantaxis1=n') +Plot('shgmresavo1','shgmresavo','spectra | window max1=250 | graph max2=8 plotfat=3 label2=Amplitude title="SNMO Stack vs. PWC Stack"') + +Result('shpwspecavo','shgmresavo1 pwavo','Overlay') + +Plot('trace1','trace','spectra | window max1=250 | graph max2=8 plotfat=3 label2=Amplitude title="Reference vs. Shaping NMO Stack"') +Result('shspecavo1','trace1 shgmresavo','Overlay') + +Result('mod5','stackavo shgmresavo pwavo trace', + ''' + cat axis=2 ${SOURCES[1:4]} | + dots labels=Conventional:SNMO:PWC:Reference + gaineach=n + ''') +# Try to extract effective NMO +stacks = [] +for trace in range(128): + onetrace = 'cmp-trace%d' % trace + if 0==trace: + Flow(onetrace,'cmp2','add mode=m scale=128 |cut f2=%d' % (trace+1)) + elif 127==trace: + Flow(onetrace,'cmp2','add mode=m scale=128 |cut n2=%d' % trace) + else: + Flow(onetrace,'cmp2','add mode=m scale=128 |cut n2=%d | cut f2=%d' % (trace,trace+1)) + stack = 'cmp-%d-stack' % trace + stacks.append(stack) + + # go through the shaping procedure: onetrace -> stack + Flow(stack,[onetrace, 'vel'],'shstack flo=2 fhi=200 niter=10 half=n jump=4 velocity=${SOURCES[1]}') + +Flow('shnsnmo',stacks,'cat axis=2 ${SOURCES[1:128]}') +Result('shnsnmo', 'nsnmo', + ''' + transp | bandpass fhi=2 | transp | + mutter v0=4.5 half=n | mutter slope0=0.4 half=n | + grey title="Shaping NMO" label2='Offset' unit2='km' screenratio=2 + ''') + +Flow('nsstack','nsnmo','stack') + +End()