Geophysics:
Think about an overdetermined and underdetermined problem:

d = B m      Rank(B) <= dim(d)=235
B'd = B'B m  Rank(B'B) = Rank(B) <= 235 
B'B is underdetermined since dim(B'B) = 250x250 but Rank(B'B) <= 235 
We should probably use BB' instead! Try it out! 

d = M b      Rank(M) <= dim(b)=16  very few unknowns b many equations 
M'd = M'M b  Rank(M'M) = Rank(M) <= 16
M'M is overdetermined?

Generally Missing utilities: 

Wavelet 
Fft 
Transp 
Window, Pad (main routine to subroutine)
Merge
Add (and related functions; some trivial since in Rsf)

main objects versus constructors versus general methods

Give objects (constructors) noun names, and give methods verb names. 
It helps thinking. (How about NmoOp, KirMigOp, DeconSv)

I write main objects to handle IO.
	I separate the actual object into a extra object so that it
	can be used by other objects when needed. 
Constructors take what is essential to the object I create. 
	o that is hard to distinguish at times especially when you 
	  intend to build usually one instance of the class at a time
	o I like to follow the interface of similar classes 
	  e.g. IcafDecon follows solver. 
	o Constructor cannot return anything but an instance of itself 
		(not the object you are after)

	o another way to look at it: whatever instance variable truely
	  defines the object is handed it in construction time and carried 
	  around by private variable (is that true?).

apply() or solve()
	o takes the arguments specific to a single application
	o if there are variable parts, they should probably be 
		handed in here. 
	o returns the object you are after 

When is it wasteful: 
construct variables at construction. Anything that does not need to be 
	changed from invocation to invocation. 
construct variables at application. Anything that changes from invocation 
	to invocation. (no reconstruction every time). 

Hide design decision in objects, don't think about processing steps
and flow charts, think about interfaces.




rewrite SynTrace: 
it should print out the random trace: 
I think you actually want: 
	Wavelet and Randomizer (both in RsfFactory with Spiker)
	MyIcaf (that convolves random trace with wavelet) 
	  maybe makefile version and main program version (tutorial comparison)
	Deconvolver (finds random trace given wavelet and convolved trace)

Improve SynTrace:
	split into Wavelet and Randomizer 
	Write out:
	  various traces into single  file (after padding)
	  various traces into several files (command line DataOutputStream)
	  various programs write out there own output 

For tutorial: 
	a. lots of standalone programs (several outputs)
	b. lots of objects; everything in one routine (single output)
	
