00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef _ALIMATRIX_HH
00011 #define _ALIMATRIX_HH
00012
00013 #include "Alignment/CocoaUtilities/interface/CocoaGlobals.h"
00014 #include <vector>
00015 #include <iostream>
00016
00017
00018 extern "C" {
00019 #include <matrix.h>
00020 #include <matrix2.h>
00021 }
00022
00023
00024 class MatrixMeschach
00025 {
00026 public:
00027 MatrixMeschach( );
00028 MatrixMeschach( ALIint NoCol, ALIint NoLin );
00029 MatrixMeschach( const MatrixMeschach& mat );
00030 ~MatrixMeschach();
00031
00032 void AddData( ALIuint col, ALIuint lin, ALIdouble data );
00033 void transpose();
00034 void inverse();
00035 void Dump( const ALIstring& mtext );
00036 void ostrDump( std::ostream& fout, const ALIstring& mtext );
00037 void EliminateLines( ALIint lin_first, ALIint lin_last );
00038 void EliminateColumns( ALIint lin_first, ALIint lin_last );
00039 void SetCorrelation(ALIint i1, ALIint i2, ALIdouble corr);
00040
00041
00042 MatrixMeschach& operator=( const MatrixMeschach& mat );
00043 void operator*=( const MatrixMeschach& mat );
00044 void operator+=( const MatrixMeschach& mat );
00045 void operator*=( const ALIdouble num );
00046 ALIdouble operator () (int i, int j) const;
00047
00048
00049 ALIint NoLines() const{
00050 return _NoLines;
00051 }
00052 ALIint NoColumns() const{
00053 return _NoColumns;
00054 }
00055 void setNoColumns( ALIint ncol ){
00056 _NoColumns = ncol;
00057 }
00058 void setNoLines( ALIint nlin ){
00059 _NoLines = nlin;
00060 }
00061 const MAT* Mat() const{
00062 return _Mat;
00063 }
00064 void setMat( MAT* mat){
00065 _Mat = mat;
00066 }
00067 MAT* MatNonConst() const{
00068 return _Mat;
00069 }
00070
00071
00072 private:
00073
00074 ALIint _NoLines;
00075 ALIint _NoColumns;
00076
00077 MAT* _Mat;
00078
00079 void copy( const MatrixMeschach& mat);
00080
00081 };
00082
00083 MatrixMeschach operator*( const MatrixMeschach& mat1, const MatrixMeschach& mat2 );
00084 MatrixMeschach operator+( const MatrixMeschach& mat1, const MatrixMeschach& mat2 );
00085 MatrixMeschach operator-( const MatrixMeschach& mat1, const MatrixMeschach& mat2 );
00086 MatrixMeschach operator*( const ALIdouble doub, const MatrixMeschach& mat );
00087 MatrixMeschach operator*( const MatrixMeschach& mat, const ALIdouble doub );
00088
00089 MatrixMeschach* MatrixByMatrix( const MatrixMeschach& mat1, const MatrixMeschach& mat2 );
00090 typedef MatrixMeschach ALIMatrix;
00091
00092 #endif