//----------------------------------------------------------- // File and Version Information: // $Id$ // // Description: // Implementation of class CubSplineFitter // see CubSplineFitter.h for details // // Environment: // Software developed for the PANDA Detector at FAIR. // // Author List: // Felix Boehmer TUM (original author) // // //----------------------------------------------------------- // Panda Headers ---------------------- // This Class' Header ------------------ #include "CubSplineFitter.h" // C/C++ Headers ---------------------- #include // Collaborating Class Headers -------- #include "BSpline.h" #include "TVectorD.h" #include "TError.h" // Class Member definitions ----------- CubSplineFitter::CubSplineFitter(CubSpline* CSP, const std::vector*>* data) { _CSP = CSP; _data = data; _Q=NULL; _R=NULL; _newmat=NULL; _decomp=false; _emptycols=false; int NData = _data->size(); //# of data points int lSx = _CSP->_M.size(); //# of knots - 4 _mData = TArrayD(lSx*NData); std::cout<<"\n_mData initialised with length "<<_mData.fN<at(e)->size() != 2) Fatal("CubSplineFitter::CubSplineFitter()", "wrong data format!"); //TO DO: resolve sorting on the data: //Building the matrix: std::cout<<"\n\nCubSplineFitter - Building Spline Matrix: "<at(r)->at(0); //coordinate is the 0. entry for(int i=0; i_M[i]->eval(x_r); } } _matrix = new TMatrixD(NData, lSx); _matrix->SetMatrixArray(_mData.GetArray()); //fills the matrix _matrix->Print(); std::cout<<"\nSpline Matrix initialised."<0) { _emptycols=true; //build a std::vector out of the matrix data std::cout<<"\nRemoving empty rows ... "< temp; for(int l=0; l=0; p--) { std::vector::iterator the_iterator = temp.begin(); for(int l=0; lSetMatrixArray(temp_arr.GetArray()); } } CubSplineFitter::~CubSplineFitter() {} //TODO: delete stuff void CubSplineFitter::decompose(double TOL) { if(_emptycols) _householder = new TDecompQRH(*_newmat, TOL); else _householder = new TDecompQRH(*_matrix, TOL); if(_householder->Decompose()) { std::cout<<"CubSplineFitter::decompose(): decomposition successful!" <GetQ()); _R = &(_householder->GetR()); _Up = &(_householder->GetUp()); _W = &(_householder->GetW()); } _decomp=true; } TVectorD CubSplineFitter::solve(const TVectorD& val) { if(_decomp==false) decompose(); TVectorD copy = TVectorD(val); if(_householder->Solve(copy)) { std::cout<<"CubSplineFitter::solve(): found a solution"<