Esempio n. 1
0
def pmig(data, hdip, ydip, frame1=1, frame2=1, frame3=1):

    if version.old_version():
        return  # think how to do it better

    def Grey3(name, title, color='I', extra=''):
        Flow('bar' + name, name, 'bar')
        Result(
            name, [name, 'bar' + name], '''
               byte | transp plane=23 | 
               grey3 title="%s" bar=${SOURCES[1]}
               frame1=%d frame2=%d frame3=%d color=%s 
               flat=y point1=0.75 point2=0.75 %s
               ''' % (title, frame1, frame2, frame3, color, extra))

    Grey3(data, 'Data')
    Grey3(hdip, 'Offset Slope', 'j', 'scalebar=y bartype=v')
    Grey3(ydip, 'Midpoint Slope', 'j', 'scalebar=y bartype=v')

    nmo = data + '-nmo'
    vnmo = data + '-vnmo'
    Flow([nmo, vnmo], [data, hdip], 'pnmo dip=${SOURCES[1]} vel=${TARGETS[1]}')
    Grey3(nmo, 'Oriented NMO')

    stk = data + '-stk'
    Flow(stk, nmo, 'stack')
    Result(stk, 'grey title="Oriented Stack" wheretitle=t wherexlabel=b')

    for case in (data, hdip, ydip):
        Flow(case + '2', case, 'transp plane=23 memsize=500')

    mig = data + '-mig'
    Flow(
        mig, [data + '2', hdip + '2', ydip + '2'], '''
         pmig hdip=${SOURCES[1]} xdip=${SOURCES[2]} |
         transp plane=23 memsize=500
         ''')
    Grey3(mig, 'Oriented Prestack Time Migration')
    Result(
        mig + '2', mig, '''
           stack | 
           grey title="Oriented Prestack Time Migration" 
           wheretitle=t wherexlabel=b
           ''')

    mzo = data + '-mzo'
    Flow(
        mzo, [data + '2', hdip + '2', ydip + '2'], '''
         pmig hdip=${SOURCES[1]} xdip=${SOURCES[2]} mzo=y |
         transp plane=23 memsize=500
         ''')
    Grey3(mzo, 'Oriented Migration to Zero Offset')
    Result(
        mzo + '2', mzo,
        'stack | grey title="Oriented DMO Stack" wheretitle=t wherexlabel=b')
Esempio n. 2
0
def pmig(data,hdip,ydip,frame1=1,frame2=1,frame3=1):

    if version.old_version():
        return # think how to do it better

    def Grey3(name,title,color='I',extra=''):
        Flow('bar'+name,name,'bar')
        Result(name,[name,'bar'+name],
               '''
               byte | transp plane=23 | 
               grey3 title="%s" bar=${SOURCES[1]}
               frame1=%d frame2=%d frame3=%d color=%s 
               flat=y point1=0.75 point2=0.75 %s
               ''' % (title,frame1,frame2,frame3,color,extra))

    Grey3(data,'Data')
    Grey3(hdip,'Offset Slope',  'j','scalebar=y bartype=v')
    Grey3(ydip,'Midpoint Slope','j','scalebar=y bartype=v')

    nmo = data+'-nmo'
    vnmo = data+'-vnmo'
    Flow([nmo,vnmo],[data,hdip],'pnmo dip=${SOURCES[1]} vel=${TARGETS[1]}')
    Grey3(nmo,'Oriented NMO')

    stk = data+'-stk'
    Flow(stk,nmo,'stack')
    Result(stk,'grey title="Oriented Stack" wheretitle=t wherexlabel=b')

    for case in (data,hdip,ydip):
        Flow(case+'2',case,'transp plane=23 memsize=500')

    mig = data+'-mig'
    Flow(mig,[data+'2',hdip+'2',ydip+'2'],
         '''
         pmig hdip=${SOURCES[1]} xdip=${SOURCES[2]} |
         transp plane=23 memsize=500
         ''')
    Grey3(mig,'Oriented Prestack Time Migration')
    Result(mig+'2',mig,
           '''
           stack | 
           grey title="Oriented Prestack Time Migration" 
           wheretitle=t wherexlabel=b
           ''')
    
    mzo = data+'-mzo'
    Flow(mzo,[data+'2',hdip+'2',ydip+'2'],
         '''
         pmig hdip=${SOURCES[1]} xdip=${SOURCES[2]} mzo=y |
         transp plane=23 memsize=500
         ''')
    Grey3(mzo,'Oriented Migration to Zero Offset')
    Result(mzo+'2',mzo,
           'stack | grey title="Oriented DMO Stack" wheretitle=t wherexlabel=b')
Esempio n. 3
0
def warp3(
        name,  # name prefix
        pp,
        ps,  # PP and PS images
        warp,  # initial warp
        nx,  # number of traces
        tmax,  # maximum time for display
        tmin=0,  # minimum time for display
        ny=1,  # number of lines
        j2=1,  # trace subsampling
        j3=1,  # line subsampling
        line=None,  # selected line
        trace=None,  # seleted trace
        o2=0,  # in-line start
        o3=0,  # cross-line start
        gmin=1,  # minimum gamma
        gmax=4,  # maximum gamma
        niter=20,  # warping iterations
        dt=0.004,  # time sampling
        fmin=0,  # minimum frequency
        fmax=40,  # maximum frequency
        frect=12,  # frequency smoothing
        frame1=10,  # time frame          
        ng=101,  # number of gammas
        g0=0.96,  # first gamma
        pmin=0,  # minimum gamma for picking
        pmax=2,  # maximum gamma for picking
        an=0.5,  # anisotropy for picking
        rect1=50,  # vertical smoothing
        rect2=50,  # in-line smoothing
        rect3=50,  # cross-line smoothing
        iter=2,  # number of iterations
        ss=0,  # PP-PS (0) or PP-SS (1)
        inter=1,  # interleaving
        clip=6  # display clip
):

    if version.old_version():
        return  # think how to do it better

    if line:
        for case in (pp, ps, warp):
            Flow(case + '2', case, 'window n3=1 min3=%d' % line)
        warp2(name + 'l', pp + '2', ps + '2', warp + '2', nx, tmax, tmin,
              j2 / j3, trace, o2, gmin, gmax, niter, dt, fmin, fmax, frect,
              frame1, ng, g0, pmin, pmax, an, rect1, rect2, iter, ss, inter,
              clip)
    else:
        line = 10

    def plot3(title):
        return '''
        window min1=%g max1=%g |
        byte gainpanel=all |
        grey3 title="%s" flat=y frame1=%d frame2=%d frame3=%d
        Xpoint1=0.75 Xpoint2=0.75
        label1="Time (s)" label2="In-line" label3="Cross-line"
        ''' % (tmin, tmax, title, frame1, trace - o2, line - o3)

    Result(pp, plot3('PP'))

    PS = ('PS', 'SS')[ss]

    ifreq = '''
    window j2=%d j3=%d |
    iphase rect1=%d rect2=%d rect3=%d order=100 complex=y |
    transp          memsize=500 |
    spline n1=%d d1=1 o1=%g | transp memsize=500  |
    transp plane=13 memsize=500 |
    spline n1=%d d1=1 o1=%g | transp plane=13 memsize=500 
    ''' % (j2, j3, 2 * rect1, 2 * rect2 / j2, 2 * rect3 / j3, nx, o2, ny, o3)

    def freqplot3(title):
        return '''
        window min1=%g max1=%g |
        scale scale dscale=%g |
        byte clip=%g bias=%g bar=bar.rsf |
        grey3 title="%s" flat=n frame1=%d frame2=%d frame3=%d
        point1=0.75 point2=0.75
        label1="Time (s)" label2="In-line" label3="Cross-line"
        color=j scalebar=y barlabel=Frequency barunit=Hz
        ''' % (tmin, tmax, 0.5 / (math.pi * dt), (fmax - fmin) * 0.25,
               (fmax + fmin) * 0.5, title, frame1, trace - o2, line - o3)

    Flow(pp + 'i', pp, ifreq)
    Result(pp + 'i', freqplot3('PP Local Frequency'))

    balance = '''
    nsmooth1 rect=${SOURCES[1]} |
    abalance rect1=%d rect2=%d rect3=%d order=100 other=${SOURCES[2]}
    ''' % (rect1, rect2, rect3)

    def pslice(title):
        return '''
        window min1=%g max1=%g |
        window n1=1 f1=%d |
        grey verb=y color=j label1="In-line" label2="Cross-line" title="%s"
        transp=n yreverse=n clip=%g
        ''' % (tmin, tmax, frame1, title, clip)

    warpit = warping(niter, 200, 200, 200)

    Plot(pp + 's', pp, pslice('PP'))

    for i in range(iter):
        wrp = warp

        #################
        # INITIAL WARPING
        #################

        def n(s):
            return '%s-%s-%d' % (name, s, i)

        psw = n('psw')
        Flow(psw, [ps, pp, wrp], warp0)
        Result(psw, plot3('Warped ' + PS))

        if i == 0:
            Plot(ps + 's', psw, pslice('Warped %s (Before)' % PS))

        ####################
        # SPECTRAL BALANCING
        ####################

        si = n('si')
        Flow(si, psw, ifreq)
        Result(si, freqplot3(PS + ' Local Frequency'))

        msk = n('msk')
        Flow(msk, [si, pp + 'i'], getmask)

        sr = n('sr')
        pr = n('pr')

        Flow(sr + '0', [msk, si, pp + 'i'], psrect(frect))
        Flow(sr, [psw, sr + '0', pp], balance)

        Flow(pr + '0', [msk, si, pp + 'i'], pprect(frect))
        Flow(pr, [pp, pr + '0', pp], balance)

        Result(sr, plot3('Warped and Balanced ' + PS))
        Result(pr, plot3('Balanced PP'))

        ############
        # GAMMA SCAN
        ############
        g1 = 2 - g0
        warpscan3 = warpscan(ng, g0, g1, rect1, 1, int(0.5 + rect2 / j2),
                             int(0.5 + rect3 / j3))

        Flow(sr + '2', sr, 'window j2=%d j3=%d' % (j2, j3))
        Flow(pr + '2', pr, 'window j2=%d j3=%d' % (j2, j3))

        sc = n('sc')
        Flow(sc, [sr + '2', pr + '2'], warpscan3)

        pk = n('pk')

        if i == 0:
            Flow(
                pk + '0', sc,
                pick(max(pmin, g0),
                     min(pmax, g1),
                     rect1,
                     4 * rect2 / j2,
                     4 * rect3 / j3,
                     an=an))
        else:
            Flow(pk + '0', sc,
                 pick(g0, g1, rect1, 4 * rect2 / j2, 4 * rect3 / j3, an=an))

        Flow(
            pk, pk + '0', '''
             transp          memsize=500 | spline n1=%d d1=1 o1=%g | transp memsize=500  |
             transp plane=13 memsize=500 | spline n1=%d d1=1 o1=%g | transp plane=13 memsize=500 |
             math output="(input-1)*x1"
             ''' % (nx, o2, ny, o3))

        #########
        # WARPING
        #########

        warp = n('wrp')
        Flow([warp, psw + '2'], [sr, pr, pk, wrp], warpit, stdout=-1)
        Result(psw + '2', plot3('Warped ' + PS))

        Flow(psw + '1', [ps, pp, warp], warp0)
        Result(psw + '1', plot3('Warped ' + PS))

        gamma = n('gamma2')
        Flow(gamma, warp, warp2gamma(ss))
        Result(
            gamma, '''
               window min1=%g max1=%g |
               byte bias=%g clip=%g bar=bar.rsf |
               grey3 title="Vp/Vs" flat=n frame1=%d frame2=%d frame3=%d
               point1=0.75 point2=0.75 color=j scalebar=y minval=%g maxval=%g
               label1="Time (s)" label2="In-line" label3="Cross-line"
               ''' %
            (tmin, tmax, (gmin + gmax) / 2,
             (gmax - gmin) / 2, frame1, trace - o2, line - o3, gmin, gmax))

        if i == iter - 1:
            Flow(psw + '1', [ps, pp, warp], warp0)
            Plot(psw + 's', psw + '1', pslice('Warped %s (After)' % PS))

            Result(psw + 's', [pp + 's', ps + 's', psw + 's'], 'SideBySideIso')

        g0 = (g0 + 1) * 0.5
Esempio n. 4
0
def warp1(
        name,  # name prefix
        pp,
        ps,  # PP and PS images
        warp,  # initial warp
        tmax,  # maximum time for display
        tmin=0,  # minimum time for display
        gmin=1,  # minimum gamma
        gmax=4,  # maximum gamma
        niter=20,  # warping iterations
        dt=0.004,  # time sampling
        fmin=0,  # minimum frequency
        fmax=40,  # maximum frequency
        frect=12,  # frequency smoothing
        ng=101,  # number of gammas
        g0=0.96,  # first gamma
        pmin=0,  # minimum gamma for picking
        pmax=2,  # maximum gamma for picking
        an=0.5,  # anisotropy for picking
        rect1=50,  # vertical smoothing
        iter=2,  # number of iterations
        ss=0):

    if version.old_version():
        return  # think how to do it better

    graph = '''
    graph wanttitle=n min2=%g max2=%g min1=%g max1=%g
    wherexlabel=t wheretitle=b crowd=0.8 label2="Vp/Vs"
    ''' % (gmin, gmax, tmin, tmax)

    dplot = '''
    add scale=1,-1 ${SOURCES[1]} |
    cat ${SOURCES[0]} ${SOURCES[1]} axis=2 |
    window min1=%g max1=%g |
    dots gaineach=0
    labels="Difference:PS warped:PP" label1=Time unit1=s
    ''' % (tmin, tmax)

    def iphase(title):
        return '''
        cat axis=2 ${SOURCES[1]} |
        scale dscale=%g | 
        graph title="Local Frequency (%s)" label1=Time unit1=s
        min2=%g max2=%g min1=%g max1=%g
        dash=0,1 label2=Frequency unit2=Hz
        ''' % (0.5 / (math.pi * dt), title, fmin, fmax, tmin, tmax)

    warpit = warping(niter, 200)

    for i in range(iter):
        #################
        # INITIAL WARPING
        #################
        wrp = warp

        def showpick(case):
            return '''
            graph transp=y min2=%g max2=%g min1=%g max1=%g
            yreverse=y plotcol=%d plotfat=%d 
            wantaxis=n wanttitle=n pad=n
            ''' % (g0, g1, tmin, tmax, (7, 0)[case], (5, 1)[case])

        def n(s):
            return '%s-%s-%d' % (name, s, i)

        gamma = n('gamma')
        Flow(gamma, wrp, warp2gamma(ss))
        Plot(gamma, graph)

        psw = n('psw')
        Flow(psw, [ps, pp, wrp], warp0)
        Plot(psw, [psw, pp], dplot)

        Result(psw, [gamma, psw], 'OverUnderAniso')

        ####################
        # SPECTRAL BALANCING
        ####################

        ppft = n('ppft')
        psft = n('psft')

        ltft = 'ltft rect=%d | transp' % frect

        Flow(ppft, pp, ltft)
        Flow(psft, psw, ltft)

        Flow(ppft + 'a', ppft, 'math output="abs(input)" | real')
        Flow(psft + 'a', psft, 'math output="abs(input)" | real')

        ftplot = '''
        window min1=%g max1=%g max2=%g | grey allpos=y color=j
        ''' % (fmin, fmax, tmax)

        Plot(ppft + 'a', ftplot + 'title=PP')
        Plot(psft + 'a', ftplot + 'title=PS')
        Result(n('ft0'), [ppft + 'a', psft + 'a'], 'OverUnderAniso')

        pprick = n('pprick')
        psrick = n('psrick')

        Flow(pprick,
             ppft + 'a',
             'ricker niter=1000 ma=$TARGET verb=n m=20',
             stdout=0)
        Flow(psrick,
             psft + 'a',
             'ricker niter=1000 ma=$TARGET verb=n m=20',
             stdout=0)

        rickplot = '''
        cat axis=3 ${SOURCES[1]} | window n1=1 max2=%g | 
        math output="sqrt(input)" |
        graph title="Dominant Frequency" 
        label2=Frequency unit2=Hz min2=%g max2=%g
        ''' % (tmax, fmin, fmax)

        Result(n('rick'), [pprick, psrick], rickplot)

        Flow([ppft + 'b', psft + 'b'], [ppft, psft, pprick, psrick], '''
             freshape in2=${SOURCES[1]} ma=${SOURCES[2]}
             ma2=${SOURCES[3]} out2=${TARGETS[1]}
             ''')
        Flow(ppft + 'c', ppft + 'b', 'math output="abs(input)" | real')
        Flow(psft + 'c', psft + 'b', 'math output="abs(input)" | real')

        Plot(ppft + 'c', ftplot + 'title=PP')
        Plot(psft + 'c', ftplot + 'title=PS')
        Result(n('fta'), [ppft + 'c', psft + 'c'], 'OverUnderAniso')

        sr = n('sr')
        pr = n('pr')

        Flow(pr, ppft + 'b', 'transp | ltft inv=y')
        Flow(sr, psft + 'b', 'transp | ltft inv=y')

        Plot(psw + '1', [sr, pr], dplot)
        Result(psw + '1', [gamma, psw + '1'], 'OverUnderAniso')

        ############
        # GAMMA SCAN
        ############

        g1 = 2 - g0

        warpscan1 = warpscan(2 * ng, g0, g1, rect1)

        greyscan = '''
        window min1=%g max1=%g |
        grey title="Gamma scan" allpos=y 
        min2=%g max2=%g
        color=j pclip=100
        label1=Time unit1=s label2=Gamma
        ''' % (tmin, tmax, g0, g1)

        scn = n('scn')
        Flow(scn, [sr, pr], warpscan1)
        Plot(scn, greyscan)

        pik = n('pik')

        if i == 0:
            Flow(pik + '0', scn,
                 pick(max(pmin, g0), min(pmax, g1), 2 * rect1, an=an))
        else:
            Flow(pik + '0', scn, pick(g0, g1, 2 * rect1, an=an))

        Flow(pik, pik + '0', 'math output="(input-1)*x1" ')
        Plot(pik, pik + '0', showpick(0))
        Plot(pik + '0', showpick(1))
        Result(scn, [scn, pik, pik + '0'], 'Overlay')

        #########
        # WARPING
        #########

        warp = n('wrp')

        Flow([warp, psw + '2'], [sr, pr, pik, wrp], warpit, stdout=-1)
        Flow(gamma + '2', warp, warp2gamma(ss))
        Plot(gamma + '2', graph)
        Plot(psw + '2', [psw + '2', pr], dplot)
        Result(psw + '2', [gamma + '2', psw + '2'], 'OverUnderAniso')

        g0 = (g0 + 1) * 0.5
Esempio n. 5
0
def warp2(
        name,  # name prefix
        pp,
        ps,  # PP and PS images
        warp,  # initial warp
        nx,  # number of traces
        tmax,  # maximum time for display
        tmin=0,  # minimum time for display
        j2=1,  # trace sumsampling
        trace=None,  # seleted trace
        o2=0,  # trace start
        gmin=1,  # minimum gamma
        gmax=4,  # maximum gamma
        niter=20,  # warping iterations
        dt=0.004,  # time sampling
        fmin=0,  # minimum frequency
        fmax=40,  # maximum frequency
        frect=12,  # frequency smoothing
        frame1=10,  # time frame          
        ng=101,  # number of gammas
        g0=0.96,  # first gamma
        pmin=0,  # minimum gamma for picking
        pmax=2,  # maximum gamma for picking
        an=0.5,  # anisotropy for picking
        rect1=50,  # vertical smoothing
        rect2=50,  # lateral smoothing
        iter=2,  # number of iterations
        ss=0,  # PP-PS (0) or PP-SS (1)
        inter=1,  # interleaving
        clip=6  # display clip
):

    if version.old_version():
        return  # think how to do it better

    interg = 'pad n2=%d | put n2=%d n3=%d | stack' % (
        (nx / inter + 1) * inter, inter, nx / inter + 1)
    inter = 2 * inter
    interw = 'pad n2=%d | put n2=%d n3=%d | stack' % (
        (nx / inter + 1) * inter, inter, nx / inter + 1)

    if trace:
        for case in (pp, ps, warp):
            Flow(case + '1', case, 'window n2=1 min2=%d' % trace)
        warp1(name + 't', pp + '1', ps + '1', warp + '1', tmax, tmin, gmin,
              gmax, niter, dt, fmin, fmax, frect, ng, g0, pmin, pmax, an,
              rect1, iter, ss)
    else:
        trace = 10

    def plot(title):
        return '''
        window min1=%g max1=%g |
        grey title="%s" label1=Time unit1=s clip=%g 
        ''' % (tmin, tmax, title, clip)

    vplot = plot('Vp/Vs') + '''
    clip=%g scalebar=y color=j bias=%g minval=%g maxval=%g
    ''' % (0.5 * (gmax - gmin), 0.5 * (gmin + gmax), gmin, gmax)

    balance = '''
    nsmooth1 rect=${SOURCES[1]} |
    abalance rect1=%d rect2=%d order=100 other=${SOURCES[2]}
    ''' % (rect1, rect2)

    ifreq = 'iphase rect1=%d rect2=%d order=100 complex=y' % (2 * rect1,
                                                              2 * rect2)

    def freqplot(title):
        return '''
        scale scale dscale=%g |
        %s clip=%g bias=%g color=j scalebar=y barlabel=Frequency barunit=Hz
        ''' % (0.5 / (math.pi * dt), plot(title), (fmax - fmin) * 0.25,
               (fmax + fmin) * 0.5)

    def specplot(title):
        return '''
        cat axis=2 ${SOURCES[1]} |
        graph title="%s" max1=%g label1=Frequency unit1=Hz
        dash=0,1 plotfat=7 label2= 
        ''' % (title, 4 * fmax)

    def giplot(title):
        return '''
        interleave axis=2 ${SOURCES[1]} |
        window min1=%g max1=%g |
        grey
        title="Interleaved (%s)"
        label1=Time unit1=s label2="In-line"
        ''' % (tmin, tmax, title)

    def wiplot(title):
        return '''
        interleave axis=2 ${SOURCES[1]} |
        window min1=%g max1=%g |
        wiggle poly=y transp=y yreverse=y
        title="Interleaved (%s)"
        label1=Time unit1=s label2="In-line"
        ''' % (tmin, tmax, title)

    Plot(pp, plot('PP'))
    Flow(pp + 'i', pp, ifreq)
    Plot(pp + 'i', freqplot('PP Local Frequency'))

    Result(pp + 'line', pp, 'Overlay')

    PS = ('PS', 'SS')[ss]

    Plot(ps, 'grey title=%s label1=Time unit1=s' % PS)

    Flow(pp + 's0', pp, 'spectra all=y')

    scanplot = '''
    window min1=%g max1=%g |
    byte gainpanel=all allpos=y |
    grey3 frame1=%d frame3=%d frame2=%d color=j flat=n
    label1=Time unit1=s label3="In-line" label2="Relative Gamma"
    wanttitle=n
    ''' % (tmin, tmax, frame1, (trace - o2) / j2, ng / 2)

    simplot = '''
    window min1=%g max1=%g |
    grey title="%s" allpos=y 
    color=j clip=1
    label1="Time (s)" 
    ''' % (tmin, tmax, '%s')

    warpit = warping(niter, 200, 200)

    for i in range(iter):
        wrp = warp

        #################
        # INITIAL WARPING
        #################

        def n(s):
            return '%s-%s-%d' % (name, s, i)

        psw = n('psw')
        Flow(psw, [ps, pp, wrp], warp0)
        Plot(psw, plot('Warped ' + PS))

        dif = n('dif')
        Plot(dif, [psw, pp],
             'add scale=1,-1 ${SOURCES[1]} | ' + plot('Difference'))

        gamma = n('gamma')
        Flow(gamma, wrp, warp2gamma(ss))
        Plot(gamma, vplot)

        Result(psw, [pp, psw, dif, gamma], 'TwoRows')

        ####################
        # SPECTRAL BALANCING
        ####################

        si = n('si')
        Flow(si, psw, ifreq)
        Plot(si, freqplot(PS + ' Local Frequency'))

        msk = n('msk')
        Flow(msk, [si, pp + 'i'], getmask)

        sr = n('sr')
        pr = n('pr')

        Flow(sr + '0', [msk, si, pp + 'i'], psrect(frect))
        Flow(sr, [psw, sr + '0', pp], balance)

        Flow(pr + '0', [msk, si, pp + 'i'], pprect(frect))
        Flow(pr, [pp, pr + '0', pp], balance)

        pi = n('pi')
        Flow(pi, pr, ifreq)
        Flow(si + '2', sr, ifreq)

        Plot(si + '2', freqplot(PS + ' Local Frequency'))
        Plot(pi, freqplot('PP Local Frequency'))
        Result(si, [pp + 'i', si, pi, si + '2'], 'TwoRows')

        ppft = n('ppft')
        psft = n('psft')

        ltft = 'ltft rect=%d | transp' % frect

        Flow(ppft, pp, ltft)
        Flow(psft, psw, ltft)

        Flow(ppft + 'a', ppft, 'math output="abs(input)" | real')
        Flow(psft + 'a', psft, 'math output="abs(input)" | real')

        s0 = psw + 's0'
        Flow(s0, psw, 'spectra all=y')
        Plot(s0, [pp + 's0', s0], specplot('Before'))

        s1 = psw + 's1'
        Flow(s1, sr, 'spectra all=y')
        Flow(pr + 's1', pr, 'spectra all=y')
        Plot(s1, [pr + 's1', s1], specplot('After'))

        Result(n('sp'), [s0, s1], 'SideBySideIso')

        if i == 0:
            in0 = n('in0')
            Flow(pr + 'in0', pr, interg)
            Flow(sr + 'in0', sr, interg)
            Plot(in0, [pr + 'in0', sr + 'in0'], giplot('Before'))
            Flow(pr + 'in0w', pr, interw)
            Flow(sr + 'in0w', sr, interw)
            Plot(in0 + 'w', [pr + 'in0w', sr + 'in0w'], wiplot('Before'))

            Result(in0, in0, 'Overlay')
            Result(in0 + 'w', in0 + 'w', 'Overlay')

            sim0 = n('sim0')
            Flow(sim0, [pr, sr], simil(rect1, rect2))
            Result(sim0, simplot % 'Before')

        Plot(sr, plot('Warped and Balanced ' + PS))
        Plot(pr, plot('Balanced PP'))

        dif = dif + '2'
        Plot(dif, [sr, pr],
             'add scale=1,-1 ${SOURCES[1]} | ' + plot('Difference'))

        Result(sr, [pr, sr, dif, gamma], 'TwoRows')

        ############
        # GAMMA SCAN
        ############

        g1 = 2 - g0
        warpscan2 = warpscan(ng, g0, g1, rect1, 1, int(0.5 + rect2 / j2))

        sc = n('sc')

        Flow(sr + '2', sr, 'window j2=%d' % j2)
        Flow(pr + '2', pr, 'window j2=%d' % j2)

        Flow(sc, [sr + '2', pr + '2'], warpscan2)
        Result(sc, scanplot)

        pk = n('pk')

        if i == 0:
            Flow(
                pk + '0', sc,
                pick(max(pmin, g0),
                     min(pmax, g1),
                     rect1,
                     4 * rect2 / j2,
                     an=an))
        else:
            Flow(pk + '0', sc, pick(g0, g1, rect1, 4 * rect2 / j2, an=an))

        Flow(
            pk, pk + '0', '''
             transp memsize=500 |
             spline n1=%d d1=1 o1=%g |
             transp memsize=500  |
             math output="(input-1)*x1"
             ''' % (nx, o2))

        #########
        # WARPING
        #########

        warp = n('wrp')
        Flow([warp, psw + '2'], [sr, pr, pk, wrp], warpit, stdout=-1)
        Plot(psw + '2', plot('Warped ' + PS))

        dif = n('dif2')
        Plot(dif, [psw + '2', pr],
             'add scale=1,-1 ${SOURCES[1]} | ' + plot('Difference'))

        gamma = n('gamma2')
        Flow(gamma, warp, warp2gamma(ss))
        Plot(gamma, vplot)

        Result(psw + '2', [pr, psw + '2', dif, gamma], 'TwoRows')

        if i == iter - 1:
            in1 = n('in1')
            Flow(pr + 'in1', pr, interg)
            Flow(psw + '2in1', psw + '2', interg)
            Plot(in1, [pr + 'in1', psw + '2in1'], giplot('After'))
            Flow(pr + 'in1w', pr, interw)
            Flow(psw + '2in1w', psw + '2', interw)
            Plot(in1 + 'w', [pr + 'in1w', psw + '2in1w'], wiplot('After'))

            Result(in1, in1, 'Overlay')
            Result(in1 + 'w', in1 + 'w', 'Overlay')
            Result(in0 + '1', [in0, in1], 'SideBySideIso')
            Result(in0 + '1w', [in0 + 'w', in1 + 'w'], 'OverUnderAniso')

            sim1 = n('sim1')
            Flow(sim1, [pr, psw + '2'], simil(rect1, rect2))
            Result(sim1, simplot % 'After')

            Flow(psw + '1', [ps, pp, warp], warp0)
            Result(psw + '1', plot('Warped ' + PS))

            rt = n('rt')
            Flow(psw + 'i', psw + '1', ifreq)
            Flow(
                rt, psw + 'i',
                'math output="sqrt(1+12*(1/input^2-1/%g^2))" | dd type=int' %
                (fmax * 2 * math.pi * dt))

            dl = n('dl')
            Flow(
                dl, [psw + '1', rt],
                'deblur rect=${SOURCES[1]} verb=y niter=100 eps=0.04 nliter=1')
            Result(
                dl, '''
            window min1=%g max1=%g |
            grey title="Deblurred %s" label1="Time (s)"
            ''' % (tmin, tmax, PS))

            Flow('e' + gamma, warp, warp2egamma(ss))
            Result(gamma, 'e' + gamma, vplot)

        g0 = (g0 + 1) * 0.5
Esempio n. 6
0
File: stack2.py Progetto: ymustc/src
def stack(name,
          v0,
          nv,
          dv,
          nx,
          padx,
          nt,
          pad_af1=0,
          pad_af2=0,
          tmin=0,
          tmax=10,
          rect1=10,
          rect2=10,
          srect1=1,
          srect2=3,
          vslope=None,
          units='km',
          f1=1,
          j3=1,
          dx=1,
          x0=0,
          beg1=0,
          frect1=0,
          frect2=0,
          an=1,
          nout=2048,
          vx0=None):

    if version.old_version():
        return  # think how to do it better

    scn = name + '-scn'
    vel = name + '-vel'

    Flow(
        scn, name, 'mutter v0=%g | vscan semblance=y v0=%g nv=%d dv=%g' %
        (v0, v0, nv, dv))

    if vslope:
        pick = 'mutter x0=%g v0=%g half=n | ' % (vx0, vslope)
    else:
        pick = ''

    pick = pick + 'pick rect1=%d rect2=%d | window' % (rect1, rect2)

    def grey(title):
        return '''
        window n1=%d |
        grey title="%s" 
        label1=Time unit1=s label2=Distance unit2="%s"
        ''' % (nt, title, units)

    def velgrey(title):
        return grey(title) + '''
        color=j scalebar=y mean=y barlabel=Velocity barunit="%s/s"
        barreverse=y
        ''' % units

    Flow(vel, scn, pick)
    Result(vel, velgrey('RMS Velocity'))

    nmo = name + '-nmo'
    stk = name + '-stk'

    Flow(nmo, [name, vel], 'mutter v0=%g | nmo velocity=${SOURCES[1]}' % v0)
    Flow(stk, nmo, 'stack')
    Result(stk, grey('NMO Stack'))

    stk2 = stk + '2'
    Flow(
        stk2, nmo, '''
         window f1=%d | logstretch nout=%d |
         fft1 | transp plane=13 memsize=500 |
         finstack | transp memsize=500 |
         fft1 inv=y | window n1=%d |
         logstretch inv=y | pad beg1=%d |
         transp | bandpass fhi=%g | transp
         ''' % (f1, nout, nout, f1, 0.75 * 0.5 / dx))
    Result(stk2, grey('DMO Stack'))

    diffimg(name, stk2, v0, nv, dv, nx, padx, nt, pad_af1, pad_af2, tmin, tmax,
            rect1, rect2, srect1, srect2, vslope, units, f1, j3, dx, x0, beg1,
            frect1, frect2, an, nout, vx0)
Esempio n. 7
0
def stack(name, # filename
        v0, # Initial velocity
        nv, #number of velocities
        dv, # velocity sampling
        nx, # Number of cmp's
        padx, # pad data with zeros to avoid problems with filter boundaries
        nt, # Time samples
        tmin=0, # time window min
        tmax=10, # time window max
        rect1=10, # smooth radius time
        rect2=10, # smooth radius distance
        srect1=1, 
        srect2=3,
        vslope=None,
        units='Km',
        f1=1,
        j3=1,
        dx=1,
        x0=0,
        beg1=0,
        frect1=0,
        frect2=0,
        an=1,
        nout=2048,
        vx0=None):

    if version.old_version():
        return # think how to do it better

    scn = name+'-scn' # scaned velocity
    vel = name+'-vel' # velocity after picking

    # sfmutter aplies a muting in data, it uses
    # v0 to determine the slope and mute
    # sfvscan does the velocity analisys
    # if the parameter semblance=y compute
    # semblance function; v0, nv and dv define
    # the velocity window
    Flow(scn,name,
            'mutter v0=%g | vscan semblance=y v0=%g nv=%d dv=%g' % (v0,v0,nv,dv))

    # If 'vslope' is passed, mute the data
    # using that slope p0=1/v0
    if vslope:
        pick = 'mutter x0=%g v0=%g half=n | ' % (vx0,vslope)
    else:
        pick = ''

    # sfpick does the picking of semblance
    # like panels. rect's parameter define
    # the smooth radius
    pick = pick + 'pick rect1=%d rect2=%d | window' % (rect1,rect2)

    # ploting functions
    def grey(title):
        return '''
        window n1=%d |
        grey title="%s"
        label1=Time unit1=s label2=Distance unit2="%s"
        ''' % (nt,title,units)

    def velgrey(title):
        return grey(title)+'''
        color=j scalebar=y mean=y barlabel=Velocity barunit="%s/s"
        barreverse=y
        ''' % units

    # Do the velocity picking
    Flow(vel,scn,pick)    
    Result(vel,velgrey('RMS Velocity'))

    nmo = name+'-nmo' # After NMO data
    stk = name+'-stk' # Stacked section

    # Apply NMO in data to linearize reflection
    # events, after that stack the data
    Flow(nmo,[name,vel],'mutter v0=%g | nmo velocity=${SOURCES[1]}' % v0)
    Flow(stk,nmo,'stack')
    Result(stk,grey('NMO Stack'))

    # sflogstretch stretches along time axis
    # sffft1 is the fast fourier transform in time
    # sfinstack is a DMO stack by finite differences
    # and offset continuation
    stk2=stk+'2'
    Flow(stk2,nmo,
            '''
            window f1=%d | logstretch nout=%d |
            fft1 | transp plane=13 memsize=500 |
            finstack | transp memsize=500 |
            fft1 inv=y | window n1=%d |
            logstretch inv=y | pad beg1=%d |
            transp | bandpass fhi=%g | transp
            ''' % (f1,nout,nout,f1,0.75*0.5/dx))
    Result(stk2,grey('DMO Stack'))

    diffimg(name,stk2,v0,nv,dv,nx,padx,nt,tmin,tmax,
            rect1,
            rect2,
            srect1,
            srect2,
            vslope,
            units,
            f1,
            j3,
            dx,
            x0,
            beg1,
            frect1,
            frect2,
            an,
            nout,
            vx0)
Esempio n. 8
0
File: stack2.py Progetto: cako/src
def stack(name,
          v0,
          nv,
          dv,
          nx,
          padx,
          nt,
          pad_af1=0,
          pad_af2=0,
          tmin=0,
          tmax=10,
          rect1=10,
          rect2=10,
          srect1=1,
          srect2=3,
          vslope=None,
          units='km',
          f1=1,
          j3=1,
          dx=1,
          x0=0,
          beg1=0,
          frect1=0,
          frect2=0,
          an=1,
          nout=2048,
          vx0=None):

    if version.old_version():
        return # think how to do it better

    scn = name+'-scn'
    vel = name+'-vel'
    
    Flow(scn,name,
         'mutter v0=%g | vscan semblance=y v0=%g nv=%d dv=%g' % (v0,v0,nv,dv))

    if vslope:
        pick = 'mutter x0=%g v0=%g half=n | ' % (vx0,vslope)
    else:
        pick = ''

    pick = pick + 'pick rect1=%d rect2=%d | window' % (rect1,rect2)
        
    def grey(title):
        return '''
        window n1=%d |
        grey title="%s" 
        label1=Time unit1=s label2=Distance unit2="%s"
        ''' % (nt,title,units)

    def velgrey(title):
        return grey(title) + '''
        color=j scalebar=y mean=y barlabel=Velocity barunit="%s/s"
        barreverse=y
        ''' % units

    Flow(vel,scn,pick)   
    Result(vel,velgrey('RMS Velocity'))
 
    nmo = name+'-nmo'
    stk = name+'-stk'

    Flow(nmo,[name,vel],'mutter v0=%g | nmo velocity=${SOURCES[1]}' % v0)
    Flow(stk,nmo,'stack')
    Result(stk,grey('NMO Stack'))

    stk2=stk+'2'
    Flow(stk2,nmo,
         '''
         window f1=%d | logstretch nout=%d |
         fft1 | transp plane=13 memsize=500 |
         finstack | transp memsize=500 |
         fft1 inv=y | window n1=%d |
         logstretch inv=y | pad beg1=%d |
         transp | bandpass fhi=%g | transp
         ''' % (f1,nout,nout,f1,0.75*0.5/dx))
    Result(stk2,grey('DMO Stack'))

    diffimg(name,stk2,v0,nv,dv,nx,padx,nt,pad_af1,pad_af2,tmin,tmax,
            rect1,
            rect2,
            srect1,
            srect2,
            vslope,
            units,
            f1,
            j3,
            dx,
            x0,
            beg1,
            frect1,
            frect2,
            an,
            nout,
            vx0)
Esempio n. 9
0
def warp1(
    name,  # name prefix
    pp,
    ps,  # PP and PS images
    warp,  # initial warp
    tmax,  # maximum time for display
    tmin=0,  # minimum time for display
    gmin=1,  # minimum gamma
    gmax=4,  # maximum gamma
    niter=20,  # warping iterations
    dt=0.004,  # time sampling
    fmin=0,  # minimum frequency
    fmax=40,  # maximum frequency
    frect=12,  # frequency smoothing
    ng=101,  # number of gammas
    g0=0.96,  # first gamma
    pmin=0,  # minimum gamma for picking
    pmax=2,  # maximum gamma for picking
    an=0.5,  # anisotropy for picking
    rect1=50,  # vertical smoothing
    iter=2,  # number of iterations
    ss=0,
):

    if version.old_version():
        return  # think how to do it better

    graph = """
    graph wanttitle=n min2=%g max2=%g min1=%g max1=%g
    wherexlabel=t wheretitle=b crowd=0.8 label2="Vp/Vs"
    """ % (
        gmin,
        gmax,
        tmin,
        tmax,
    )

    dplot = """
    add scale=1,-1 ${SOURCES[1]} |
    cat ${SOURCES[0]} ${SOURCES[1]} axis=2 |
    window min1=%g max1=%g |
    dots gaineach=0
    labels="Difference:PS warped:PP" label1=Time unit1=s
    """ % (
        tmin,
        tmax,
    )

    def iphase(title):
        return """
        cat axis=2 ${SOURCES[1]} |
        scale dscale=%g | 
        graph title="Local Frequency (%s)" label1=Time unit1=s
        min2=%g max2=%g min1=%g max1=%g
        dash=0,1 label2=Frequency unit2=Hz
        """ % (
            0.5 / (math.pi * dt),
            title,
            fmin,
            fmax,
            tmin,
            tmax,
        )

    warpit = warping(niter, 200)

    for i in range(iter):
        #################
        # INITIAL WARPING
        #################
        wrp = warp

        def showpick(case):
            return """
            graph transp=y min2=%g max2=%g min1=%g max1=%g
            yreverse=y plotcol=%d plotfat=%d 
            wantaxis=n wanttitle=n pad=n
            """ % (
                g0,
                g1,
                tmin,
                tmax,
                (7, 0)[case],
                (5, 1)[case],
            )

        def n(s):
            return "%s-%s-%d" % (name, s, i)

        gamma = n("gamma")
        Flow(gamma, wrp, warp2gamma(ss))
        Plot(gamma, graph)

        psw = n("psw")
        Flow(psw, [ps, pp, wrp], warp0)
        Plot(psw, [psw, pp], dplot)

        Result(psw, [gamma, psw], "OverUnderAniso")

        ####################
        # SPECTRAL BALANCING
        ####################

        ppft = n("ppft")
        psft = n("psft")

        ltft = "ltft rect=%d | transp" % frect

        Flow(ppft, pp, ltft)
        Flow(psft, psw, ltft)

        Flow(ppft + "a", ppft, 'math output="abs(input)" | real')
        Flow(psft + "a", psft, 'math output="abs(input)" | real')

        ftplot = """
        window min1=%g max1=%g max2=%g | grey allpos=y color=j
        """ % (
            fmin,
            fmax,
            tmax,
        )

        Plot(ppft + "a", ftplot + "title=PP")
        Plot(psft + "a", ftplot + "title=PS")
        Result(n("ft0"), [ppft + "a", psft + "a"], "OverUnderAniso")

        pprick = n("pprick")
        psrick = n("psrick")

        Flow(pprick, ppft + "a", "ricker niter=1000 ma=$TARGET verb=n m=20", stdout=0)
        Flow(psrick, psft + "a", "ricker niter=1000 ma=$TARGET verb=n m=20", stdout=0)

        rickplot = """
        cat axis=3 ${SOURCES[1]} | window n1=1 max2=%g | 
        math output="sqrt(input)" |
        graph title="Dominant Frequency" 
        label2=Frequency unit2=Hz min2=%g max2=%g
        """ % (
            tmax,
            fmin,
            fmax,
        )

        Result(n("rick"), [pprick, psrick], rickplot)

        Flow(
            [ppft + "b", psft + "b"],
            [ppft, psft, pprick, psrick],
            """
             freshape in2=${SOURCES[1]} ma=${SOURCES[2]}
             ma2=${SOURCES[3]} out2=${TARGETS[1]}
             """,
        )
        Flow(ppft + "c", ppft + "b", 'math output="abs(input)" | real')
        Flow(psft + "c", psft + "b", 'math output="abs(input)" | real')

        Plot(ppft + "c", ftplot + "title=PP")
        Plot(psft + "c", ftplot + "title=PS")
        Result(n("fta"), [ppft + "c", psft + "c"], "OverUnderAniso")

        sr = n("sr")
        pr = n("pr")

        Flow(pr, ppft + "b", "transp | ltft inv=y")
        Flow(sr, psft + "b", "transp | ltft inv=y")

        Plot(psw + "1", [sr, pr], dplot)
        Result(psw + "1", [gamma, psw + "1"], "OverUnderAniso")

        ############
        # GAMMA SCAN
        ############

        g1 = 2 - g0

        warpscan1 = warpscan(2 * ng, g0, g1, rect1)

        greyscan = """
        window min1=%g max1=%g |
        grey title="Gamma scan" allpos=y 
        min2=%g max2=%g
        color=j pclip=100
        label1=Time unit1=s label2=Gamma
        """ % (
            tmin,
            tmax,
            g0,
            g1,
        )

        scn = n("scn")
        Flow(scn, [sr, pr], warpscan1)
        Plot(scn, greyscan)

        pik = n("pik")

        if i == 0:
            Flow(pik + "0", scn, pick(max(pmin, g0), min(pmax, g1), 2 * rect1, an=an))
        else:
            Flow(pik + "0", scn, pick(g0, g1, 2 * rect1, an=an))

        Flow(pik, pik + "0", 'math output="(input-1)*x1" ')
        Plot(pik, pik + "0", showpick(0))
        Plot(pik + "0", showpick(1))
        Result(scn, [scn, pik, pik + "0"], "Overlay")

        #########
        # WARPING
        #########

        warp = n("wrp")

        Flow([warp, psw + "2"], [sr, pr, pik, wrp], warpit, stdout=-1)
        Flow(gamma + "2", warp, warp2gamma(ss))
        Plot(gamma + "2", graph)
        Plot(psw + "2", [psw + "2", pr], dplot)
        Result(psw + "2", [gamma + "2", psw + "2"], "OverUnderAniso")

        g0 = (g0 + 1) * 0.5
Esempio n. 10
0
def warp2(
    name,  # name prefix
    pp,
    ps,  # PP and PS images
    warp,  # initial warp
    nx,  # number of traces
    tmax,  # maximum time for display
    tmin=0,  # minimum time for display
    j2=1,  # trace sumsampling
    trace=None,  # seleted trace
    o2=0,  # trace start
    gmin=1,  # minimum gamma
    gmax=4,  # maximum gamma
    niter=20,  # warping iterations
    dt=0.004,  # time sampling
    fmin=0,  # minimum frequency
    fmax=40,  # maximum frequency
    frect=12,  # frequency smoothing
    frame1=10,  # time frame
    ng=101,  # number of gammas
    g0=0.96,  # first gamma
    pmin=0,  # minimum gamma for picking
    pmax=2,  # maximum gamma for picking
    an=0.5,  # anisotropy for picking
    rect1=50,  # vertical smoothing
    rect2=50,  # lateral smoothing
    iter=2,  # number of iterations
    ss=0,  # PP-PS (0) or PP-SS (1)
    inter=1,  # interleaving
    clip=6,  # display clip
):

    if version.old_version():
        return  # think how to do it better

    interg = "pad n2=%d | put n2=%d n3=%d | stack" % ((nx / inter + 1) * inter, inter, nx / inter + 1)
    inter = 2 * inter
    interw = "pad n2=%d | put n2=%d n3=%d | stack" % ((nx / inter + 1) * inter, inter, nx / inter + 1)

    if trace:
        for case in (pp, ps, warp):
            Flow(case + "1", case, "window n2=1 min2=%d" % trace)
        warp1(
            name + "t",
            pp + "1",
            ps + "1",
            warp + "1",
            tmax,
            tmin,
            gmin,
            gmax,
            niter,
            dt,
            fmin,
            fmax,
            frect,
            ng,
            g0,
            pmin,
            pmax,
            an,
            rect1,
            iter,
            ss,
        )
    else:
        trace = 10

    def plot(title):
        return """
        window min1=%g max1=%g |
        grey title="%s" label1=Time unit1=s clip=%g 
        """ % (
            tmin,
            tmax,
            title,
            clip,
        )

    vplot = (
        plot("Vp/Vs")
        + """
    clip=%g scalebar=y color=j bias=%g minval=%g maxval=%g
    """
        % (0.5 * (gmax - gmin), 0.5 * (gmin + gmax), gmin, gmax)
    )

    balance = """
    nsmooth1 rect=${SOURCES[1]} |
    abalance rect1=%d rect2=%d order=100 other=${SOURCES[2]}
    """ % (
        rect1,
        rect2,
    )

    ifreq = "iphase rect1=%d rect2=%d order=100 complex=y" % (2 * rect1, 2 * rect2)

    def freqplot(title):
        return """
        scale scale dscale=%g |
        %s clip=%g bias=%g color=j scalebar=y barlabel=Frequency barunit=Hz
        """ % (
            0.5 / (math.pi * dt),
            plot(title),
            (fmax - fmin) * 0.25,
            (fmax + fmin) * 0.5,
        )

    def specplot(title):
        return """
        cat axis=2 ${SOURCES[1]} |
        graph title="%s" max1=%g label1=Frequency unit1=Hz
        dash=0,1 plotfat=7 label2= 
        """ % (
            title,
            4 * fmax,
        )

    def giplot(title):
        return """
        interleave axis=2 ${SOURCES[1]} |
        window min1=%g max1=%g |
        grey
        title="Interleaved (%s)"
        label1=Time unit1=s label2="In-line"
        """ % (
            tmin,
            tmax,
            title,
        )

    def wiplot(title):
        return """
        interleave axis=2 ${SOURCES[1]} |
        window min1=%g max1=%g |
        wiggle poly=y transp=y yreverse=y
        title="Interleaved (%s)"
        label1=Time unit1=s label2="In-line"
        """ % (
            tmin,
            tmax,
            title,
        )

    Plot(pp, plot("PP"))
    Flow(pp + "i", pp, ifreq)
    Plot(pp + "i", freqplot("PP Local Frequency"))

    Result(pp + "line", pp, "Overlay")

    PS = ("PS", "SS")[ss]

    Plot(ps, "grey title=%s label1=Time unit1=s" % PS)

    Flow(pp + "s0", pp, "spectra all=y")

    scanplot = """
    window min1=%g max1=%g |
    byte gainpanel=all allpos=y |
    grey3 frame1=%d frame3=%d frame2=%d color=j flat=n
    label1=Time unit1=s label3="In-line" label2="Relative Gamma"
    wanttitle=n
    """ % (
        tmin,
        tmax,
        frame1,
        (trace - o2) / j2,
        ng / 2,
    )

    simplot = """
    window min1=%g max1=%g |
    grey title="%s" allpos=y 
    color=j clip=1
    label1="Time (s)" 
    """ % (
        tmin,
        tmax,
        "%s",
    )

    warpit = warping(niter, 200, 200)

    for i in range(iter):
        wrp = warp

        #################
        # INITIAL WARPING
        #################

        def n(s):
            return "%s-%s-%d" % (name, s, i)

        psw = n("psw")
        Flow(psw, [ps, pp, wrp], warp0)
        Plot(psw, plot("Warped " + PS))

        dif = n("dif")
        Plot(dif, [psw, pp], "add scale=1,-1 ${SOURCES[1]} | " + plot("Difference"))

        gamma = n("gamma")
        Flow(gamma, wrp, warp2gamma(ss))
        Plot(gamma, vplot)

        Result(psw, [pp, psw, dif, gamma], "TwoRows")

        ####################
        # SPECTRAL BALANCING
        ####################

        si = n("si")
        Flow(si, psw, ifreq)
        Plot(si, freqplot(PS + " Local Frequency"))

        msk = n("msk")
        Flow(msk, [si, pp + "i"], getmask)

        sr = n("sr")
        pr = n("pr")

        Flow(sr + "0", [msk, si, pp + "i"], psrect(frect))
        Flow(sr, [psw, sr + "0", pp], balance)

        Flow(pr + "0", [msk, si, pp + "i"], pprect(frect))
        Flow(pr, [pp, pr + "0", pp], balance)

        pi = n("pi")
        Flow(pi, pr, ifreq)
        Flow(si + "2", sr, ifreq)

        Plot(si + "2", freqplot(PS + " Local Frequency"))
        Plot(pi, freqplot("PP Local Frequency"))
        Result(si, [pp + "i", si, pi, si + "2"], "TwoRows")

        ppft = n("ppft")
        psft = n("psft")

        ltft = "ltft rect=%d | transp" % frect

        Flow(ppft, pp, ltft)
        Flow(psft, psw, ltft)

        Flow(ppft + "a", ppft, 'math output="abs(input)" | real')
        Flow(psft + "a", psft, 'math output="abs(input)" | real')

        s0 = psw + "s0"
        Flow(s0, psw, "spectra all=y")
        Plot(s0, [pp + "s0", s0], specplot("Before"))

        s1 = psw + "s1"
        Flow(s1, sr, "spectra all=y")
        Flow(pr + "s1", pr, "spectra all=y")
        Plot(s1, [pr + "s1", s1], specplot("After"))

        Result(n("sp"), [s0, s1], "SideBySideIso")

        if i == 0:
            in0 = n("in0")
            Flow(pr + "in0", pr, interg)
            Flow(sr + "in0", sr, interg)
            Plot(in0, [pr + "in0", sr + "in0"], giplot("Before"))
            Flow(pr + "in0w", pr, interw)
            Flow(sr + "in0w", sr, interw)
            Plot(in0 + "w", [pr + "in0w", sr + "in0w"], wiplot("Before"))

            Result(in0, in0, "Overlay")
            Result(in0 + "w", in0 + "w", "Overlay")

            sim0 = n("sim0")
            Flow(sim0, [pr, sr], simil(rect1, rect2))
            Result(sim0, simplot % "Before")

        Plot(sr, plot("Warped and Balanced " + PS))
        Plot(pr, plot("Balanced PP"))

        dif = dif + "2"
        Plot(dif, [sr, pr], "add scale=1,-1 ${SOURCES[1]} | " + plot("Difference"))

        Result(sr, [pr, sr, dif, gamma], "TwoRows")

        ############
        # GAMMA SCAN
        ############

        g1 = 2 - g0
        warpscan2 = warpscan(ng, g0, g1, rect1, 1, int(0.5 + rect2 / j2))

        sc = n("sc")

        Flow(sr + "2", sr, "window j2=%d" % j2)
        Flow(pr + "2", pr, "window j2=%d" % j2)

        Flow(sc, [sr + "2", pr + "2"], warpscan2)
        Result(sc, scanplot)

        pk = n("pk")

        if i == 0:
            Flow(pk + "0", sc, pick(max(pmin, g0), min(pmax, g1), rect1, 4 * rect2 / j2, an=an))
        else:
            Flow(pk + "0", sc, pick(g0, g1, rect1, 4 * rect2 / j2, an=an))

        Flow(
            pk,
            pk + "0",
            """
             transp memsize=500 |
             spline n1=%d d1=1 o1=%g |
             transp memsize=500  |
             math output="(input-1)*x1"
             """
            % (nx, o2),
        )

        #########
        # WARPING
        #########

        warp = n("wrp")
        Flow([warp, psw + "2"], [sr, pr, pk, wrp], warpit, stdout=-1)
        Plot(psw + "2", plot("Warped " + PS))

        dif = n("dif2")
        Plot(dif, [psw + "2", pr], "add scale=1,-1 ${SOURCES[1]} | " + plot("Difference"))

        gamma = n("gamma2")
        Flow(gamma, warp, warp2gamma(ss))
        Plot(gamma, vplot)

        Result(psw + "2", [pr, psw + "2", dif, gamma], "TwoRows")

        if i == iter - 1:
            in1 = n("in1")
            Flow(pr + "in1", pr, interg)
            Flow(psw + "2in1", psw + "2", interg)
            Plot(in1, [pr + "in1", psw + "2in1"], giplot("After"))
            Flow(pr + "in1w", pr, interw)
            Flow(psw + "2in1w", psw + "2", interw)
            Plot(in1 + "w", [pr + "in1w", psw + "2in1w"], wiplot("After"))

            Result(in1, in1, "Overlay")
            Result(in1 + "w", in1 + "w", "Overlay")
            Result(in0 + "1", [in0, in1], "SideBySideIso")
            Result(in0 + "1w", [in0 + "w", in1 + "w"], "OverUnderAniso")

            sim1 = n("sim1")
            Flow(sim1, [pr, psw + "2"], simil(rect1, rect2))
            Result(sim1, simplot % "After")

            Flow(psw + "1", [ps, pp, warp], warp0)
            Result(psw + "1", plot("Warped " + PS))

            rt = n("rt")
            Flow(psw + "i", psw + "1", ifreq)
            Flow(rt, psw + "i", 'math output="sqrt(1+12*(1/input^2-1/%g^2))" ' % (fmax * 2 * math.pi * dt))

            dl = n("dl")
            Flow(dl, [psw + "1", rt], "deblur rect=${SOURCES[1]} verb=y niter=100 eps=0.04 nliter=1")
            Result(
                dl,
                """
            window min1=%g max1=%g |
            grey title="Deblurred %s" label1="Time (s)"
            """
                % (tmin, tmax, PS),
            )

            Flow("e" + gamma, warp, warp2egamma(ss))
            Result(gamma, "e" + gamma, vplot)

        g0 = (g0 + 1) * 0.5
Esempio n. 11
0
def warp3(
    name,  # name prefix
    pp,
    ps,  # PP and PS images
    warp,  # initial warp
    nx,  # number of traces
    tmax,  # maximum time for display
    tmin=0,  # minimum time for display
    ny=1,  # number of lines
    j2=1,  # trace subsampling
    j3=1,  # line subsampling
    line=None,  # selected line
    trace=None,  # seleted trace
    o2=0,  # in-line start
    o3=0,  # cross-line start
    gmin=1,  # minimum gamma
    gmax=4,  # maximum gamma
    niter=20,  # warping iterations
    dt=0.004,  # time sampling
    fmin=0,  # minimum frequency
    fmax=40,  # maximum frequency
    frect=12,  # frequency smoothing
    frame1=10,  # time frame
    ng=101,  # number of gammas
    g0=0.96,  # first gamma
    pmin=0,  # minimum gamma for picking
    pmax=2,  # maximum gamma for picking
    an=0.5,  # anisotropy for picking
    rect1=50,  # vertical smoothing
    rect2=50,  # in-line smoothing
    rect3=50,  # cross-line smoothing
    iter=2,  # number of iterations
    ss=0,  # PP-PS (0) or PP-SS (1)
    inter=1,  # interleaving
    clip=6,  # display clip
):

    if version.old_version():
        return  # think how to do it better

    if line:
        for case in (pp, ps, warp):
            Flow(case + "2", case, "window n3=1 min3=%d" % line)
        warp2(
            name + "l",
            pp + "2",
            ps + "2",
            warp + "2",
            nx,
            tmax,
            tmin,
            j2 / j3,
            trace,
            o2,
            gmin,
            gmax,
            niter,
            dt,
            fmin,
            fmax,
            frect,
            frame1,
            ng,
            g0,
            pmin,
            pmax,
            an,
            rect1,
            rect2,
            iter,
            ss,
            inter,
            clip,
        )
    else:
        line = 10

    def plot3(title):
        return """
        window min1=%g max1=%g |
        byte gainpanel=all |
        grey3 title="%s" flat=y frame1=%d frame2=%d frame3=%d
        Xpoint1=0.75 Xpoint2=0.75
        label1="Time (s)" label2="In-line" label3="Cross-line"
        """ % (
            tmin,
            tmax,
            title,
            frame1,
            trace - o2,
            line - o3,
        )

    Result(pp, plot3("PP"))

    PS = ("PS", "SS")[ss]

    ifreq = """
    window j2=%d j3=%d |
    iphase rect1=%d rect2=%d rect3=%d order=100 complex=y |
    transp          memsize=500 |
    spline n1=%d d1=1 o1=%g | transp memsize=500  |
    transp plane=13 memsize=500 |
    spline n1=%d d1=1 o1=%g | transp plane=13 memsize=500 
    """ % (
        j2,
        j3,
        2 * rect1,
        2 * rect2 / j2,
        2 * rect3 / j3,
        nx,
        o2,
        ny,
        o3,
    )

    def freqplot3(title):
        return """
        window min1=%g max1=%g |
        scale dscale=%g |
        byte clip=%g bias=%g bar=bar.rsf |
        grey3 title="%s" flat=n frame1=%d frame2=%d frame3=%d
        point1=0.75 point2=0.75
        label1="Time (s)" label2="In-line" label3="Cross-line"
        color=j scalebar=y barlabel=Frequency barunit=Hz
        """ % (
            tmin,
            tmax,
            0.5 / (math.pi * dt),
            (fmax - fmin) * 0.25,
            (fmax + fmin) * 0.5,
            title,
            frame1,
            trace - o2,
            line - o3,
        )

    Flow(pp + "i", pp, ifreq)
    Result(pp + "i", freqplot3("PP Local Frequency"))

    balance = """
    nsmooth1 rect=${SOURCES[1]} |
    abalance rect1=%d rect2=%d rect3=%d order=100 other=${SOURCES[2]}
    """ % (
        rect1,
        rect2,
        rect3,
    )

    def pslice(title):
        return """
        window min1=%g max1=%g |
        window n1=1 f1=%d |
        grey verb=y color=j label1="In-line" label2="Cross-line" title="%s"
        transp=n yreverse=n clip=%g
        """ % (
            tmin,
            tmax,
            frame1,
            title,
            clip,
        )

    warpit = warping(niter, 200, 200, 200)

    Plot(pp + "s", pp, pslice("PP"))

    for i in range(iter):
        wrp = warp

        #################
        # INITIAL WARPING
        #################

        def n(s):
            return "%s-%s-%d" % (name, s, i)

        psw = n("psw")
        Flow(psw, [ps, pp, wrp], warp0)
        Result(psw, plot3("Warped " + PS))

        if i == 0:
            Plot(ps + "s", psw, pslice("Warped %s (Before)" % PS))

        ####################
        # SPECTRAL BALANCING
        ####################

        si = n("si")
        Flow(si, psw, ifreq)
        Result(si, freqplot3(PS + " Local Frequency"))

        msk = n("msk")
        Flow(msk, [si, pp + "i"], getmask)

        sr = n("sr")
        pr = n("pr")

        Flow(sr + "0", [msk, si, pp + "i"], psrect(frect))
        Flow(sr, [psw, sr + "0", pp], balance)

        Flow(pr + "0", [msk, si, pp + "i"], pprect(frect))
        Flow(pr, [pp, pr + "0", pp], balance)

        Result(sr, plot3("Warped and Balanced " + PS))
        Result(pr, plot3("Balanced PP"))

        ############
        # GAMMA SCAN
        ############
        g1 = 2 - g0
        warpscan3 = warpscan(ng, g0, g1, rect1, 1, int(0.5 + rect2 / j2), int(0.5 + rect3 / j3))

        Flow(sr + "2", sr, "window j2=%d j3=%d" % (j2, j3))
        Flow(pr + "2", pr, "window j2=%d j3=%d" % (j2, j3))

        sc = n("sc")
        Flow(sc, [sr + "2", pr + "2"], warpscan3)

        pk = n("pk")

        if i == 0:
            Flow(pk + "0", sc, pick(max(pmin, g0), min(pmax, g1), rect1, 4 * rect2 / j2, 4 * rect3 / j3, an=an))
        else:
            Flow(pk + "0", sc, pick(g0, g1, rect1, 4 * rect2 / j2, 4 * rect3 / j3, an=an))

        Flow(
            pk,
            pk + "0",
            """
             transp          memsize=500 | spline n1=%d d1=1 o1=%g | transp memsize=500  |
             transp plane=13 memsize=500 | spline n1=%d d1=1 o1=%g | transp plane=13 memsize=500 |
             math output="(input-1)*x1"
             """
            % (nx, o2, ny, o3),
        )

        #########
        # WARPING
        #########

        warp = n("wrp")
        Flow([warp, psw + "2"], [sr, pr, pk, wrp], warpit, stdout=-1)
        Result(psw + "2", plot3("Warped " + PS))

        Flow(psw + "1", [ps, pp, warp], warp0)
        Result(psw + "1", plot3("Warped " + PS))

        gamma = n("gamma2")
        Flow(gamma, warp, warp2gamma(ss))
        Result(
            gamma,
            """
               window min1=%g max1=%g |
               byte bias=%g clip=%g bar=bar.rsf |
               grey3 title="Vp/Vs" flat=n frame1=%d frame2=%d frame3=%d
               point1=0.75 point2=0.75 color=j scalebar=y minval=%g maxval=%g
               label1="Time (s)" label2="In-line" label3="Cross-line"
               """
            % (tmin, tmax, (gmin + gmax) / 2, (gmax - gmin) / 2, frame1, trace - o2, line - o3, gmin, gmax),
        )

        if i == iter - 1:
            Flow(psw + "1", [ps, pp, warp], warp0)
            Plot(psw + "s", psw + "1", pslice("Warped %s (After)" % PS))

            Result(psw + "s", [pp + "s", ps + "s", psw + "s"], "SideBySideIso")

        g0 = (g0 + 1) * 0.5