package conv.decon;
import jam.vector.*;
import juice.solver.*;
import juice.operator.*;
import rsf.vector.*;
import conv.convt.*;
/**
* I solve y = B x for x. <BR>
* y is a known time series (trace).<BR>
* B is a known convolution operator of the blur (wavlt).<BR>
* x is an unknown relectivity. <BR>
* This creates the normal equations: y_n = B'y and B_n = B'B and
* calls a CGSolver to solve y_n = B_n x, respectively B'y = B'B x.
*/
public class TcaiDecon {
public static void main(String[] args) {
Rsf yy = RsfFactory.newRsf("./trace.H"); // read y
Rsf bb = RsfFactory.newRsf("./wavlt.H"); // read b
Tcai convB = new TcaiFactory(bb). // create B
getTcaiFromOutputSpace((RsfSpace) yy.getSpace());
Vector yn = convB.adjoint().image(yy); // create yn = B'y
CompoundLinOpAdj convBn = // create Bn = B'B
new CompoundLinOpAdj(convB, convB.adjoint());
Rsf xx = (Rsf) convBn.getDomain().newMember(); // create x
new CGSimple(500).solve(convBn,yn,xx); // solve yn = Bn x
xx.write( System.out ); // write x
}
}