package nmrsvd; /** *
Title:
* *Description:
* *Copyright: Copyright (c) 2009
* *Company:
* * @author not attributable * @version 1.0 */ import java.util.Observable; import Jampack.*; public class SVDMVCModel extends Observable { private double[] fidRe, fidIm; private int maxNbComplex, n, //ligne, n >= m m; //colonne private double[] eigenvalue; private double[] absorption = new double[maxNbComplex]; private double[] dispersion = new double[maxNbComplex]; private double anglePhi0, anglePhi1; private Zmat UU, VV; public SVDMVCModel(){ } //---------------------// // Setters and getters // //---------------------// public int getmaxNbComplex() {return maxNbComplex;} public void setmaxNbComplex(int x) { int size = x/2; if (x % 2 == 0) { n = size + 1; m = size; } else { n = size + 1; m = size + 1; } maxNbComplex = x; return; }//end of setmaxNbComplex public int getmvalue() {return m;} public int setmvalue(int x) {return m = x;} public int getnvalue() {return n;} public int setnvalue(int x) {return n = x;} public double[] getfidRe() {return fidRe;} public double[] setfidRe(double[] x) {return fidRe = x;} public double[] getfidIm() {return fidIm;} public double[] setfidIm(double[] x) {return fidIm = x;} public double[] getSVD() {return eigenvalue;} public double[] setSVD(double[] x) {return eigenvalue = x;} public double[] getAbsorption() {return absorption;} public double[] setAbsorption(double[] x) {return absorption = x;} public double[] getDispersion() {return dispersion;} public double[] setDispersion(double[] x) {return dispersion = x;} public double getPhi0() {return anglePhi0;} public double setPhi0(double x) {return anglePhi0 = x;} public double getPhi1() {return anglePhi1;} public double setPhi1(double x) {return anglePhi1 = x;} public void essaisetBaseIndex() throws JampackException { Parameters.setBaseIndex(0); Zsvd.MAXITER = 100; return; }//end of essaisetBaseIndex public void essaiZsvd() throws JampackException { int p = 0; Z ary[][] = new Z[n][m]; //first row for (int i = 0; i < m; i++) { ary[0][i] = new Z(fidRe[p], fidIm[p]); p++; } //last column for (int i = 1; i < n; i++) { ary[i][m - 1] = new Z(fidRe[p], fidIm[p]); p++; } //remaining Hankel Matrix elements for (int i = 1; i < n; i++) { for (int j = 0; j < m - 1; j++) { ary[i][j] = ary[i - 1][j + 1]; } } Zmat X = new Zmat(ary); Zsvd SVD = new Zsvd(X); UU = SVD.U; VV = SVD.V; double[] eigenvaluereal = new double[m]; for (int i = 0; i < m; i++) { eigenvaluereal[i] = SVD.S.get(i).re; } eigenvalue = eigenvaluereal; //simply return; }//end of essaiZsvd public void createFID() throws JampackException { Zmat ev = new Zmat(n, m); //initialised to zero Z tmp = new Z(0, 0); for (int i = 0; i < m; i++) { tmp.re = eigenvalue[i]; ev.put(i, i, tmp); } Zmat hankel = Times.o(Times.o(UU, ev), H.o(VV)); //clear for (int i = 0; i < maxNbComplex; i++) { fidRe[i] = 0; fidIm[i] = 0; } //first row for (int i = 0; i < m; i++) { for (int j = 0; j <= i; j++) { fidRe[i] += hankel.get(i - j, j).re; fidIm[i] += hankel.get(i - j, j).im; } fidRe[i] /= i + 1; fidIm[i] /= i + 1; } //last column, 2nd part for (int i = 1; i < n; i++) { for (int j = 0; j < n - i; j++) { fidRe[m - 1 + i] += hankel.get(i + j, m - 1 - j).re; fidIm[m - 1 + i] += hankel.get(i + j, m - 1 - j).im; } fidRe[m - 1 + i] /= n - i; fidIm[m - 1 + i] /= n - i; } }//end of createFID }//end of class SVDmodel