CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_5_3_13_patch3/src/Alignment/CocoaFit/interface/MatrixMeschach.h

Go to the documentation of this file.
00001 //   COCOA class header file
00002 //Id:  MatrixMeschach.h
00003 //CAT: Model
00004 //
00005 //   Class for matrices 
00006 // 
00007 //   History: v1.0 
00008 //   Pedro Arce
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 //ACCESS PRIVATE DATA MEMBERS
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  // private data members
00074   ALIint _NoLines;
00075   ALIint _NoColumns;
00076   //  vector< ALIdouble> _data;
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