StRoot  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
TRDiagMatrix.cxx
1 #include <iomanip>
2 #include "TRVector.h"
3 #include "TRDiagMatrix.h"
4 #include "TError.h"
5 ClassImp(TRDiagMatrix);
6 //________________________________________________________________________________
7 TRDiagMatrix::TRDiagMatrix(Int_t nrows,Double_t a0, ...) :
8  TRArray(nrows), fNrows(nrows) {
9  __VA_LIST__(a0);
10 }
11 //________________________________________________________________________________
12 TRDiagMatrix::TRDiagMatrix(const TRDiagMatrix& S,ETRMatrixCreatorsOp kop) {
13  Int_t i;
14  switch (kop) {
15  case kInvertedPosDef:
16  case kInverted:
17  case kInvertedA:
18  fNrows = S.GetNcols();
19  Set(fNrows*(fNrows+1)/2);
20  for (i = 0; i < fNrows; i++) if (fArray[i] != 0) fArray[i] = 1./fArray[i];
21  break;
22  default:
23  Error("TRDiagMatrix(ETRMatrixCreatorsOp)", "operation %d not yet implemented", kop);
24  }
25 }
26 //________________________________________________________________________________
27 Double_t TRDiagMatrix::Product(const TRVector& A,ETRMatrixCreatorsOp kop) {
28  Int_t M, N; // N == 1
29  Double_t Value = 0;
30  Int_t i;
31  switch (kop) { //
32  case kAxSxAT: //A[M,N]*D[N,N]*AT[M,N] => R[M,M];
33  case kATxSxA: //BT[N,M]*S[N,N]*B[N,M] => R[M,M];
34  M = A.GetNrows();
35  N = GetNrows();
36  assert(N == A.GetNcols() || M == N);
37  for (i = 0; i < N; i++) Value += A[i]*fArray[i]*A[i];
38  break;
39  break;
40  default:
41  Error("TRDiagMatrix(ETRMatrixCreatorsOp)", "operation %d not yet implemented", kop);
42  }
43  return Value;
44 }
45 //________________________________________________________________________________
46 ostream& operator<<(ostream& s,const TRDiagMatrix &target) {
47  static const int width = 10;
48  static const Double_t zero = 0;
49  Int_t Nrows = target.GetNrows();
50  const Double_t *Array = target.GetArray();
51  s << "Diagonal Matrix Size \t["
52  << Nrows << "," << Nrows << "]" << endl;
53  if (Array) {
54  s.setf(std::ios::fixed,std::ios::scientific);
55  s.setf(std::ios::showpos);
56  for (int i = 0; i< Nrows; i++) {
57  for (int j = 0; j <= i; j++)
58  if (i == j)
59  s << std::setw(width) << std::setprecision(width-3) << Array[i] << ":\t";
60  else
61  s << std::setw(width) << std::setprecision(width-3) << zero << ":\t";
62  s << endl;
63  }
64  s.unsetf(std::ios::showpos);
65  }
66  else s << " Empty";
67  return s;
68 }
69 //________________________________________________________________________________
70 void TRDiagMatrix::Print(Option_t *opt) const {if (opt) {}; cout << *this << endl;}
Definition: FJcore.h:367