def goSinoTraces():
    na, ka = 41, -20  # sampling for inverse A
    nh, kh = 41, -20  # sampling for wavelet H
    nt, dt, ft = 501, 0.004, 0.000  # used for plotting only
    #nx,dx,fx = 721,0.015,0.000
    sa = Sampling(na, dt, ka * dt)
    sh = Sampling(nh, dt, kh * dt)
    st = Sampling(nt, dt, ft)
    f, g, u = getSinoTraces(
        16)  # PP trace f(t), PS trace g(u), and warping u(t)
    ww = WaveletWarpingAH()
    ww.setTimeRange(100, 500)  # PP time window
    ww.setStabilityFactor(0.001)  # stability factor
    ww.setMaxIterations(100)  # max Gauss-Newton iterations
    a, h = ww.getAHGaussNewton(na, ka, nh, kh, u, f, g)
    sg = ww.warp(u, g)
    ag = ww.convolve(na, ka, a, g)
    sag = ww.warp(u, ag)
    hsag = ww.convolve(nh, kh, h, sag)
    dump(a)
    g = copy(nt, g)
    sg = copy(nt, sg)
    sag = copy(nt, sag)
    hsag = copy(nt, hsag)
    fmhsag = sub(f, hsag)
    plotWavelets(sa, [a], title="A")
    plotWavelets(sh, [h], title="H")
    plotTraces(st, [f, hsag, fmhsag], labels=["f", "HSAg", "f-HSAg"])
def goSinoImages():
    na, ka = 21, -10  # sampling for inverse A
    nh, kh = 81, -40  # sampling for wavelet H
    nt, dt, ft = 501, 0.004, 0.000  # used for plotting only
    #nx,dx,fx = 721,0.015,0.000
    nx, dx, fx = 101, 0.015, 0.000
    sa = Sampling(na, dt, ka * dt)
    sh = Sampling(nh, dt, kh * dt)
    st = Sampling(nt, dt, ft)
    sx = Sampling(nx, dx, fx)
    tmin, tmax = 100, 500  # PP time window
    f, g, u = getSinoImages()  # PP image, PS image, and warping u(t,x)
    ww = WaveletWarpingAH()
    ww.setTimeRange(100, 400)  # PP time window
    ww.setStabilityFactor(0.0001)  # stability factor
    ww.setMaxIterations(20)  # max Gauss-Newton iterations
    a, h = ww.getAHGaussNewton(na, ka, nh, kh, u, f, g)
    dump(a)
    sg = ww.warp(u, g)
    ag = ww.convolve(na, ka, a, g)
    sag = ww.warp(u, ag)
    hsag = ww.convolve(nh, kh, h, sag)
    normalizeRms(f)
    normalizeRms(sg)
    normalizeRms(hsag)
    plotImage(st, sx, f, zoom=True, png="f")
    plotWavelets(sa, [a], title="A")
    plotWavelets(sh, [h], title="H")
    plotImage(st, sx, sg, zoom=True, png="Sg")
    plotImage(st, sx, hsag, zoom=True, png="HSAg")
def goTest():
    nt, ni = 981, 500  # number of time samples; number of impulses
    ffreq, fdecay = 0.08, 0.05  # peak frequency and decay for wavelet
    gfreq, gdecay = 0.08, 0.05  # peak frequency and decay for wavelet
    na, ka = 11, -5  # sampling for inverse wavelet A
    nb, kb = 11, -5  # sampling for inverse wavelet B
    nc, kc = 181, -90  # sampling for wavelet C
    nd, kd = 181, -90  # sampling for wavelet D
    dt, ft = 0.004, 0.000  # used for plotting only
    st = Sampling(nt, dt, ft)
    for mp in [False]:  # True, for minimum-phase; False for mixed-phase
        ck = getWavelet(ffreq, fdecay, nc, kc, mp)  # known wavelet C
        dk = getWavelet(gfreq, gdecay, nc, kc, mp)  # known wavelet D
        normalizeMax(ck)
        normalizeMax(dk)
        #for r0,r1 in [(3.0,1.5),(2.0,2.0)]: # <1 for stretch; >1 for squeeze
        for r0, r1 in [(3.0, 1.5)]:  # <1 for stretch; >1 for squeeze
            title = "r0 = " + str(r0) + "  r1 = " + str(r1)
            u, p, q = logupq(r0, r1, nt, ni)
            f = addWavelet(ffreq, fdecay, p, mp)
            g = addWavelet(gfreq, fdecay, q, mp)
            ww = WaveletWarpingAH()
            ww.setTimeRange(0, nt / 2)
            ww.setStabilityFactor(0.0001)
            ww.setMaxIterations(40)
            #bw,cw = ww.getAHSimple(nb,kb,nc,kc,u,f,g);
            bw, cw = ww.getAHNewton(nb, kb, nc, kc, u, f, g)
            #bw,cw = ww.getAHGaussNewton(nb,kb,nc,kc,u,f,g);
            print "rmse =", ww.rms(
                sub(f, ww.applyHSA(nb, kb, bw, nc, kc, cw, u, g)))
            dump(bw)
            dw = ww.getWavelet(nd, kd, nb, kb, bw)
            sg = ww.warp(u, g)
            bg = ww.convolve(nb, kb, bw, g)
            sbg = ww.warp(u, bg)
            csbg = ww.convolve(nc, kc, cw, sbg)
            normalizeMax(cw)
            normalizeMax(dw)
            plotSequences(st, [f, g], labels=["f", "g"], title=title)
            plotSequences(st, [f, sg], labels=["f", "Sg"], title=title)
            plotSequences(st, [f, csbg], labels=["f", "CSBg"], title=title)
            plotWavelets(Sampling(nc, dt, kc * dt), [cw, ck],
                         title=title + " C")
            plotWavelets(Sampling(nd, dt, kd * dt), [dw, dk],
                         title=title + " D")