This is how the seasat data should be handled,
---------------------------------------------

Model space is a 2-D cartesian mesh.
Data space is a sequence of tracks.
Using a mixture of Fortran and C, 
a sequence of tracks is a data structure like

typedef struct {
	real xy(2,n1)
	real zz(n1)
	integer ntracks
	integer length(ntracks)
	}, tracksequence

We need a new program to filter a sequence of tracks getting
a sequence of filtered tracks.

This new program could call icai1() on each track, say

k = 1
do itrack= 1, ntracks {
	call icai1 ( adj, add, nf, filt, zz(k), length(itrack), zout(k))
	k = k + length(itrack)
	}
		
The output zout(n1) contains zero padding between the tracks.
The loop above is like the track weighting subroutine trakwit() in TDF.

We need a second new subroutine,
like the subroutine track() but crooked tracks.
For each track, we may as well use lint2(),
linear interpolation to extract a track from the model(ix,iy).
To do all the tracks, we don't need a loop over tracks because
lint2() can do them all at once.

Now, the overall job:
You can filter the tracks with (1,-1) getting new data.
Then you make a linear operator chain FL = filter( lint( ))
Then you do CG iterateration with FL.

To merge ascending and descending tracks we use instead the operator

0 \approx  [F  0]   [La]  h(x,y)
0 \approx  [0  F]   [Ld]

where F is the filter and La creates ascending tracks and Ld the descending.
Then as usual we mess with PEF for h and PEF for the residual.

