Notice the dark **halo**
around the reconstruction in Figure 3.
It was suppressed in Figure 5 by the subroutine `halfdifa()`.
Recall that slant-stack
inversion (see IEI for an example)
requires an filter.
Without doing any formal analysis I guessed that the same filter
would be helpful here
because the dark halo has a strong spectral component at which would be extinguished by an filter.
The filter is sometimes called a ``**rho filter**.''

Because of the close relation of slant-stack inversion
to wave propagation and
**causality**,
I found it appealing to factor into a causal
part and an anticausal
part.
I applied a causal after generating
the (*t*,*x*)-space and an anticausal before making the -space.
I implemented the causality by taking
the square root of a Fourier domain representation
of causal **differentiation**,
namely, .I show this in subroutine `halfdifa()`.

# Half order causal derivative. OK to equiv(xx,yy) # subroutine halfdifa( adj, add, n, xx, yy ) integer n2, i, adj, add, n real omega, xx(n), yy(n) complex cz, cv(4096) n2=1; while(n2<n) n2=2*n2; if( n2 > 4096) call erexit('halfdif memory') do i= 1, n2 { cv(i) = 0.} do i= 1, n if( adj == 0) { cv(i) = xx(i)} else { cv(i) = yy(i)} call adjnull( adj, add, xx,n, yy,n) call ftu( +1., n2, cv) do i= 1, n2 { omega = (i-1.) * 2.*3.14159265 / n2 cz = csqrt( 1. - cexp( cmplx( 0., omega))) if( adj != 0) cz = conjg( cz) cv(i) = cv(i) * cz } call ftu( -1., n2, cv) do i= 1, n if( adj == 0) { yy(i) = yy(i) + cv(i)} else { xx(i) = xx(i) + cv(i)} return; end

Notice also that `vspray()` includes a scaling variable
named `scale`.
I have not developed a theory for this scale factor,
but if you omit it, amplitudes in the reconstructions
will be far out of amplitude balance with the input.

10/21/1998