CMS 3D CMS Logo

MatrixMeschach Class Reference

#include <Alignment/CocoaFit/interface/MatrixMeschach.h>

List of all members.

Public Member Functions

void AddData (ALIuint col, ALIuint lin, ALIdouble data)
void Dump (const ALIstring &mtext)
void EliminateColumns (ALIint lin_first, ALIint lin_last)
void EliminateLines (ALIint lin_first, ALIint lin_last)
void inverse ()
const MAT * Mat () const
MAT * MatNonConst () const
 MatrixMeschach (const MatrixMeschach &mat)
 MatrixMeschach (ALIint NoCol, ALIint NoLin)
 MatrixMeschach ()
ALIint NoColumns () const
ALIint NoLines () const
void operator *= (const ALIdouble num)
void operator *= (const MatrixMeschach &mat)
ALIdouble operator() (int i, int j) const
void operator+= (const MatrixMeschach &mat)
MatrixMeschachoperator= (const MatrixMeschach &mat)
void ostrDump (std::ostream &fout, const ALIstring &mtext)
void SetCorrelation (ALIint i1, ALIint i2, ALIdouble corr)
void setMat (MAT *mat)
void setNoColumns (ALIint ncol)
void setNoLines (ALIint nlin)
void transpose ()
 ~MatrixMeschach ()

Private Member Functions

void copy (const MatrixMeschach &mat)

Private Attributes

MAT * _Mat
ALIint _NoColumns
ALIint _NoLines


Detailed Description

Definition at line 24 of file MatrixMeschach.h.


Constructor & Destructor Documentation

MatrixMeschach::MatrixMeschach (  ) 

Definition at line 15 of file MatrixMeschach.cc.

Referenced by MatrixByMatrix(), operator *(), operator+(), and operator-().

00016 {
00017   //-  std::cout << "creating matrix0 " << std::endl;
00018 }

MatrixMeschach::MatrixMeschach ( ALIint  NoCol,
ALIint  NoLin 
)

Definition at line 28 of file MatrixMeschach.cc.

References _Mat, _NoColumns, and _NoLines.

00029 {
00030   //-  std::cout << "creating matrix " << std::endl;
00031   _NoLines = NoLin; 
00032   _NoColumns = NoCol;
00033   _Mat = m_get( NoLin, NoCol );
00034   //_data = new ALIdouble[NoCol][NoLin];
00035 }

MatrixMeschach::MatrixMeschach ( const MatrixMeschach mat  ) 

Definition at line 39 of file MatrixMeschach.cc.

References _Mat, _NoColumns, _NoLines, copy(), NoColumns(), and NoLines().

00040 {
00041   //-  std::cout << "creating matrixc " << std::endl;
00042   _NoLines = mat._Mat->m; 
00043   _NoColumns = mat._Mat->n;
00044   _Mat = m_get( mat.NoLines(), mat.NoColumns() );
00045   // std::cout <<  "copy const" << mat._Mat << _Mat << NoLines() << NoColumns() << Mat()->m << Mat()->n <<std::endl;
00046   copy( mat );
00047 }

MatrixMeschach::~MatrixMeschach (  ) 

Definition at line 21 of file MatrixMeschach.cc.

References _Mat.

00022 {
00023   //-  std::cout << "deleting matrix " << std::endl;
00024   M_FREE(_Mat);
00025 }


Member Function Documentation

void MatrixMeschach::AddData ( ALIuint  col,
ALIuint  lin,
ALIdouble  data 
)

Definition at line 266 of file MatrixMeschach.cc.

References _Mat, _NoColumns, _NoLines, TestMuL1L2Filter_cff::cerr, lat::endl(), and exception.

Referenced by EliminateColumns(), EliminateLines(), Fit::FillMatricesWithCalibratedParameters(), Fit::FillMatricesWithMeasurements(), and SetCorrelation().

00267 {
00268   if ( lin >= _Mat->m || col >= _Mat->n ) {
00269       std::cerr << "EXITING: matrix has only " << _NoLines << " lines and "
00270            << _NoColumns << " columns " << std::endl;
00271       std::cerr << "EXITING: matrix has only " << _Mat->m << " lines and "
00272            << _Mat->n << " columns " << std::endl;
00273       std::cerr << " You tried to add data in line " << lin << " and column "
00274            << col << std::endl;
00275       std::exception();
00276   }
00277   _Mat->me[lin][col] = data;
00278 
00279 } 

void MatrixMeschach::copy ( const MatrixMeschach mat  )  [private]

Definition at line 51 of file MatrixMeschach.cc.

References _Mat, _NoColumns, _NoLines, parsecf::pyparsing::col(), GenMuonPlsPt100GeV_cfg::cout, ALIUtils::debug, lat::endl(), Mat(), MatNonConst(), NoColumns(), and NoLines().

Referenced by EliminateColumns(), EliminateLines(), MatrixMeschach(), and operator=().

00052 {
00053   if( ALIUtils::debug >= 5) std::cout <<  "copy matrix" << mat._Mat << " " << _Mat << " L " << mat.NoLines() << " C " << mat.NoColumns() << " l " <<  mat.Mat()->m << " c " << mat.Mat()->n <<std::endl;
00054 
00055   for( uint lin=0; lin < _NoLines; lin++ ) {
00056     for( uint col=0;  col < _NoColumns; col++ ) {
00057       _Mat->me[lin][col] = mat.MatNonConst()->me[lin][col];
00058     } 
00059   }
00060   //   m_copy( mat._Mat, _Mat );
00061 } 

void MatrixMeschach::Dump ( const ALIstring mtext  ) 

Definition at line 359 of file MatrixMeschach.cc.

References GenMuonPlsPt100GeV_cfg::cout, and ostrDump().

Referenced by Fit::addDaMatrixToEntries(), EliminateColumns(), EliminateLines(), Fit::FillMatricesWithMeasurements(), Fit::getFitQuality(), Fit::GetSChi2(), Fit::multiplyMatrices(), and Fit::PropagateErrors().

00360 {
00361   ostrDump( std::cout, mtext); 
00362 }

void MatrixMeschach::EliminateColumns ( ALIint  lin_first,
ALIint  lin_last 
)

Definition at line 326 of file MatrixMeschach.cc.

References _Mat, _NoColumns, _NoLines, AddData(), TestMuL1L2Filter_cff::cerr, copy(), GenMuonPlsPt100GeV_cfg::cout, ALIUtils::debug, Dump(), lat::endl(), Mat(), NoColumns(), and NoLines().

00327 {
00328   //-  return;
00329   if ( lin_last < lin_first ) {
00330       std::cerr << "EXITING: cannot Eliminate Lines in matrix if first line is " << 
00331       lin_first << " and lastt line is " << lin_last << std::endl;
00332       //t      std::exception();
00333       return;
00334   }
00335   ALIint dif = (lin_last - lin_first) + 1; 
00336   ALIint newANolin = NoLines();
00337   ALIint newANocol = NoColumns() - dif;
00338   MatrixMeschach newmat( newANolin, newANocol );
00339   ALIint jjn = 0;
00340   for ( ALIint jj=0; jj<NoColumns(); jj++) {
00341       if( jj < lin_first  || jj > lin_last ) { 
00342           for ( ALIint ii=0; ii<NoLines(); ii++) {
00343               newmat.AddData( ii, jjn, (*this)(ii,jj) );
00344                if(ALIUtils::debug >= 9) std::cout << ii << jjn << "nmat" << newmat.Mat()->me[ii][jjn] << std::endl;
00345           }
00346           jjn++;
00347       }
00348   }
00349   M_FREE( _Mat );
00350   _Mat = m_get( newANolin, newANocol );
00351   copy( newmat );
00352   _NoLines = _Mat->m; 
00353   _NoColumns = _Mat->n;
00354   Dump( "newnewmat" );
00355 }

void MatrixMeschach::EliminateLines ( ALIint  lin_first,
ALIint  lin_last 
)

Definition at line 292 of file MatrixMeschach.cc.

References _Mat, _NoColumns, _NoLines, AddData(), TestMuL1L2Filter_cff::cerr, copy(), GenMuonPlsPt100GeV_cfg::cout, ALIUtils::debug, Dump(), lat::endl(), Mat(), NoColumns(), and NoLines().

00293 {
00294   //-  return;
00295   if ( lin_last < lin_first ) {
00296        std::cerr << "EXITING: cannot Eliminate Lines in matrix if first line is " << 
00297       lin_first << " and lastt line is " << lin_last << std::endl;
00298       //t          std::exception();
00299        return;
00300   }
00301   ALIint dif = (lin_last - lin_first) + 1; 
00302   ALIint newANolin = NoLines() - dif; 
00303   ALIint newANocol = NoColumns();
00304   MatrixMeschach newmat( newANolin, newANocol );
00305   ALIint iin = 0;
00306   for ( ALIint ii=0; ii<NoLines(); ii++) {
00307       if( ii < lin_first  || ii > lin_last ) { 
00308           for ( ALIint jj=0; jj<NoColumns(); jj++) {
00309               newmat.AddData(iin, jj, (*this)(ii,jj) );
00310                 if(ALIUtils::debug >= 9) std::cout << iin << jj << "nmat" << newmat.Mat()->me[iin][jj] << std::endl;
00311           }
00312           iin++;
00313       }
00314   }
00315   M_FREE( _Mat );
00316   _Mat = m_get( newANolin, newANocol );
00317   copy( newmat );
00318   _NoLines = _Mat->m; 
00319   _NoColumns = _Mat->n;
00320   Dump( "newnewmat" );
00321 
00322 }

void MatrixMeschach::inverse (  ) 

Definition at line 252 of file MatrixMeschach.cc.

References _Mat, _NoColumns, _NoLines, GenMuonPlsPt100GeV_cfg::cout, ALIUtils::debug, and lat::endl().

Referenced by Fit::multiplyMatrices(), and Fit::PropagateErrors().

00253 {
00254   if(ALIUtils::debug >= 9) std::cout << "inverse" << _NoLines << "C" << _NoColumns << std::endl;
00255    MAT* tempmat = m_get(_NoLines, _NoColumns);
00256    ALIdouble factor = 1000.;
00257    (*this) *= 1./factor;
00258    m_inverse( _Mat, tempmat );
00259    m_copy( tempmat, _Mat );
00260    (*this) *= 1./factor;
00261   M_FREE(tempmat);
00262 }

const MAT* MatrixMeschach::Mat (  )  const [inline]

Definition at line 61 of file MatrixMeschach.h.

References _Mat.

Referenced by copy(), Fit::dumpEntryAfterFit(), Fit::dumpEntryCorrelations(), EliminateColumns(), EliminateLines(), FittedEntriesSet::FillCorrelations(), FittedEntriesSet::FillEntries(), NtupleManager::FillFitParameters(), CocoaAnalyzer::GetOptAlignInfoFromOptO(), Fit::multiplyMatrices(), operator+(), and operator=().

00061                         {
00062     return _Mat;
00063   }

MAT* MatrixMeschach::MatNonConst (  )  const [inline]

Definition at line 67 of file MatrixMeschach.h.

References _Mat.

Referenced by copy(), MatrixByMatrix(), operator *(), and Fit::PropagateErrors().

00067                           {
00068     return _Mat;
00069   }

ALIint MatrixMeschach::NoColumns (  )  const [inline]

Definition at line 52 of file MatrixMeschach.h.

References _NoColumns.

Referenced by Fit::CheckIfMeasIsProportionalToAnother(), copy(), EliminateColumns(), EliminateLines(), MatrixByMatrix(), MatrixMeschach(), operator *(), operator *=(), operator+(), and operator=().

00052                           {
00053     return _NoColumns;
00054   }

ALIint MatrixMeschach::NoLines (  )  const [inline]

Definition at line 49 of file MatrixMeschach.h.

References _NoLines.

Referenced by Fit::CheckIfFitPossible(), Fit::CheckIfMeasIsProportionalToAnother(), copy(), EliminateColumns(), EliminateLines(), MatrixByMatrix(), MatrixMeschach(), operator *(), operator *=(), operator+(), operator=(), and Fit::setCorrelationFromParamFitted().

00049                         {
00050     return _NoLines;
00051   }

void MatrixMeschach::operator *= ( const ALIdouble  num  ) 

Definition at line 125 of file MatrixMeschach.cc.

References _Mat.

00126 {
00127   for (uint ii=0; ii<_Mat->m; ii++) {
00128       for (uint jj=0; jj<_Mat->n; jj++) {
00129           _Mat->me[ii][jj] *= num;
00130       }
00131   }
00132 
00133 }

void MatrixMeschach::operator *= ( const MatrixMeschach mat  ) 

Definition at line 85 of file MatrixMeschach.cc.

References _Mat, _NoColumns, _NoLines, TestMuL1L2Filter_cff::cerr, GenMuonPlsPt100GeV_cfg::cout, lat::endl(), NoColumns(), and NoLines().

00086 {
00087   //  std::cout << " multiply matrices " << std::endl;
00088 
00089   if( _NoColumns != mat.NoLines() ){
00090     std::cerr << " !! Trying two multiply two matrices when the number of columns of first one is not equal to number of files of second one " << std::endl;
00091     std::cout << " multiplying matrix " << _NoLines  << " x " << _NoColumns << " and " << mat.NoLines() << " x " << mat.NoColumns() << " results in " << _NoLines << " x " << mat.NoColumns() << std::endl;
00092   }
00093   _NoColumns = mat.NoColumns();
00094 
00095   MAT* tempmat = m_get( _NoColumns, _NoLines );
00096   m_transp( _Mat, tempmat); 
00097   //  M_FREE( _Mat );
00098   _Mat = m_get( _NoLines, mat.NoColumns() );
00099   mtrm_mlt( tempmat, mat._Mat, _Mat);
00100 
00101   //  _NoColumns = mat.NoColumns(); 
00102   //  M_FREE(tempmat);
00103 }

ALIdouble MatrixMeschach::operator() ( int  i,
int  j 
) const

Definition at line 283 of file MatrixMeschach.cc.

References _Mat.

00284 {
00285   return _Mat->me[i][j];
00286 }  

void MatrixMeschach::operator+= ( const MatrixMeschach mat  ) 

Definition at line 107 of file MatrixMeschach.cc.

References _Mat, _NoColumns, _NoLines, TestMuL1L2Filter_cff::cerr, and lat::endl().

00108 {
00109   if(_NoLines != mat._NoLines  || _NoColumns != mat._NoColumns ) {
00110     std::cerr << "!!!! cannot sum two matrices with different size" << std::endl
00111          << "MATRIX 1:" << _NoLines << " X " << _NoColumns << std::endl
00112          << "MATRIX 2:" << mat._NoLines << " X " << mat._NoColumns << std::endl;
00113   }
00114   MAT* tempmat = m_get( _NoColumns, _NoLines );
00115   m_copy( _Mat, tempmat); 
00116   M_FREE( _Mat );
00117   _Mat = m_get( _NoLines, _NoColumns );
00118   m_add( tempmat, mat._Mat, _Mat);
00119   M_FREE(tempmat);
00120 
00121 }

MatrixMeschach & MatrixMeschach::operator= ( const MatrixMeschach mat  ) 

Definition at line 65 of file MatrixMeschach.cc.

References _Mat, _NoColumns, _NoLines, TestMuL1L2Filter_cff::cerr, copy(), GenMuonPlsPt100GeV_cfg::cout, ALIUtils::debug, lat::endl(), exception, Mat(), NoColumns(), and NoLines().

00066 {
00067   if ( this == 0 ) {
00068       std::cerr << "EXITING: trying to use 'operator=' with an MatrixMeschach for which memory space is not reserved!!!!" << std::endl;
00069       std::exception();
00070   }
00071          
00072   if ( mat._Mat != _Mat ) {
00073       _NoLines = mat._Mat->m;
00074       _NoColumns = mat._Mat->n; 
00075       M_FREE( _Mat );
00076       _Mat = m_get( mat.NoLines(), mat.NoColumns() );
00077       copy( mat );
00078   }
00079    if(ALIUtils::debug >= 9) std::cout <<  "operator=" << mat._Mat << _Mat << NoLines() << NoColumns() << Mat()->m << Mat()->n <<std::endl;
00080   return *this;
00081 }

void MatrixMeschach::ostrDump ( std::ostream &  fout,
const ALIstring mtext 
)

Definition at line 365 of file MatrixMeschach.cc.

References _Mat, _NoColumns, _NoLines, and lat::endl().

Referenced by Dump(), and Fit::dumpMatrices().

00366 {
00367   fout << "DUMPM@@@@@    " << mtext << "    @@@@@" << std::endl;
00368   fout << "Matrix is (_Mat)" << _Mat->m << "x" << _Mat->n << std::endl;
00369   fout << "Matrix is " << _NoLines << "x" << _NoColumns << std::endl;
00370   for (uint ii=0; ii<_Mat->m; ii++) {
00371     for (uint jj=0; jj<_Mat->n; jj++) {
00372       fout << std::setw(8) << _Mat->me[ii][jj] << " ";
00373     }
00374     fout << std::endl;
00375   }
00376   //  m_output(_Mat);
00377 
00378 }

void MatrixMeschach::SetCorrelation ( ALIint  i1,
ALIint  i2,
ALIdouble  corr 
)

Definition at line 382 of file MatrixMeschach.cc.

References AddData(), GenMuonPlsPt100GeV_cfg::cout, ALIUtils::debug, lat::endl(), and funct::sqrt().

Referenced by Fit::setCorrelationFromParamFitted().

00383 {  
00384   AddData(i1,i2,corr * sqrt( (*this)(i1,i1)*(*this)(i2,i2) ) );
00385   AddData(i2,i1,corr * sqrt( (*this)(i1,i1)*(*this)(i2,i2) ) );
00386    if(ALIUtils::debug >= 9) std::cout << i1<< i2<< corr << "CORR" << (*this)(i1,i1) << " " << (*this)(i2,i2) << std::endl;
00387   //-  std::cout << (*this)(i1,i1)*(*this)(i2,i2)  << std::endl;
00388   //- std::cout << sqrt( (*this)(i1,i1)*(*this)(i2,i2) ) << std::endl;
00389    if(ALIUtils::debug >= 9) std::cout << corr * sqrt( (*this)(i1,i1)*(*this)(i2,i2) ) << std::endl;
00390 
00391 }

void MatrixMeschach::setMat ( MAT *  mat  )  [inline]

Definition at line 64 of file MatrixMeschach.h.

References _Mat.

Referenced by MatrixByMatrix(), and operator *().

00064                         {
00065     _Mat = mat;
00066   }

void MatrixMeschach::setNoColumns ( ALIint  ncol  )  [inline]

Definition at line 55 of file MatrixMeschach.h.

References _NoColumns.

Referenced by MatrixByMatrix(), and operator *().

00055                                   {
00056     _NoColumns = ncol; 
00057   }

void MatrixMeschach::setNoLines ( ALIint  nlin  )  [inline]

Definition at line 58 of file MatrixMeschach.h.

References _NoLines.

00058                                 {
00059     _NoLines = nlin;
00060   }

void MatrixMeschach::transpose (  ) 

Definition at line 210 of file MatrixMeschach.cc.

References _Mat, _NoColumns, _NoLines, and parsecf::pyparsing::col().

Referenced by Fit::getFitQuality(), Fit::GetSChi2(), and Fit::multiplyMatrices().

00211 {
00212   //   if(ALIUtils::debug >= 9)
00213   /*  std::cout << "transposed"  <<_NoLines<<_NoColumns;
00214   MAT* tempmat = m_get(_NoColumns, _NoLines);
00215   m_transp( _Mat, tempmat );
00216   std::cout << "transposed"  <<_NoLines<<_NoColumns;
00217   M_FREE( _Mat );
00218   _Mat = m_get(_NoColumns, _NoLines);
00219   std::cout << "transposed"  <<_NoLines<<_NoColumns;
00220   m_copy( tempmat, _Mat );
00221   std::cout << "transposed"  <<_NoLines<<_NoColumns;
00222   int ntemp = _NoLines;
00223   _NoLines = _NoColumns;
00224   _NoColumns = ntemp;
00225   M_FREE(tempmat);
00226   */
00227 
00228   //-  std::cout << "transposed"  <<_NoLines<<_NoColumns;
00229   MAT* tempmat = m_get(_NoColumns, _NoLines);
00230   m_transp( _Mat, tempmat );
00231   //-  std::cout << "transposed"  <<_NoLines<<_NoColumns;
00232   M_FREE( _Mat );
00233   _Mat = m_get(_NoColumns, _NoLines);
00234   //- std::cout << "transposed"  <<_NoLines<<_NoColumns;
00235   for( uint lin=0; lin < _NoColumns; lin++ ) {
00236     for( uint col=0;  col < _NoLines; col++ ) {
00237       //-  std::cout << "setting mat "  << lin << " " << col << std::endl;
00238       _Mat->me[lin][col] = tempmat->me[lin][col];
00239     }
00240   }
00241   //  m_copy( tempmat, _Mat );
00242   //-  std::cout << "transposed"  <<_NoLines<<_NoColumns;
00243   int ntemp = _NoLines;
00244   _NoLines = _NoColumns;
00245   _NoColumns = ntemp;
00246   M_FREE(tempmat);
00247  
00248 }


Member Data Documentation

MAT* MatrixMeschach::_Mat [private]

Definition at line 77 of file MatrixMeschach.h.

Referenced by AddData(), copy(), EliminateColumns(), EliminateLines(), inverse(), Mat(), MatNonConst(), MatrixMeschach(), operator *=(), operator()(), operator+=(), operator=(), ostrDump(), setMat(), transpose(), and ~MatrixMeschach().

ALIint MatrixMeschach::_NoColumns [private]

Definition at line 75 of file MatrixMeschach.h.

Referenced by AddData(), copy(), EliminateColumns(), EliminateLines(), inverse(), MatrixMeschach(), NoColumns(), operator *=(), operator+=(), operator=(), ostrDump(), setNoColumns(), and transpose().

ALIint MatrixMeschach::_NoLines [private]

Definition at line 74 of file MatrixMeschach.h.

Referenced by AddData(), copy(), EliminateColumns(), EliminateLines(), inverse(), MatrixMeschach(), NoLines(), operator *=(), operator+=(), operator=(), ostrDump(), setNoLines(), and transpose().


The documentation for this class was generated from the following files:
Generated on Tue Jun 9 18:28:04 2009 for CMSSW by  doxygen 1.5.4