package nmrsvd; /** *
Title:
* *Description:
* *Copyright: Copyright (c) 2009
* *Company:
* * @author not attributable * @version 1.0 */ import java.util.Observable; import Jampack.*; import java.io.*; public class SVDMVCModel extends Observable implements Serializable { private static final long serialVersionUID = 1L; private double[] fidRe, fidIm; private int maxNbComplex, td, //initial TD/2 value tdeff, //TDeff/2 value n, //line, n >= m m; //column private double[] eigenvalue; private double[] absorption = new double[maxNbComplex]; private double[] dispersion = new double[maxNbComplex]; private double anglePhi0, anglePhi1; private Zmat UU, VV; //modified 23 march 2012 public SVDMVCModel(){ } //---------------------// // Setters and getters // //---------------------// public int getmaxNbComplex() {return maxNbComplex;} public int setmaxNbComplex(int x) {return maxNbComplex = x;} 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 = maxNbComplex - x + 1;} public int getTD() {return td;} //modified 25 march 2012 public int setTD(int x) {return td = x;} public int getTDeff() {return tdeff;} //modified 25 march 2012 public int setTDeff(int x) {return tdeff = 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 = 10000; 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); //initialized 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, upper part for (int i = 0; i < m - 1; 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, middle part for (int i = 0; i <= n - m; i++) { for (int j = 0; j < m; j++) { fidRe[m - 1 + i] += hankel.get(m - 1 + i - j, j).re; fidIm[m - 1 + i] += hankel.get(m - 1 + i - j, j).im; } fidRe[m - 1 + i] /= m; fidIm[m - 1 + i] /= m; } //last column, lower part for (int i = 0; i < m - 1; i++) { for (int j = 0; j < m - 1 - i; j++) { fidRe[n + i] += hankel.get(n - m + 1 + i + j, m - 1 - j).re; fidIm[n + i] += hankel.get(n - m + 1 + i + j, m - 1 - j).im; } fidRe[n + i] /= m - 1 - i; fidIm[n + i] /= m - 1 - i; } }//end of createFID }//end of class SVDmodel