]>
Commit | Line | Data |
---|---|---|
0e318744 | 1 | #ifndef AliAODRedCov_H |
2 | #define AliAODRedCov_H | |
df9db588 | 3 | /* Copyright(c) 1998-2007, ALICE Experiment at CERN, All rights reserved. * |
4 | * See cxx source for full Copyright notice */ | |
5 | ||
6 | /* $Id$ */ | |
7 | ||
8 | //------------------------------------------------------------------------- | |
9 | // Reduced Cov Matrix | |
10 | // Author: fca | |
11 | //------------------------------------------------------------------------- | |
12 | ||
13 | #include <Rtypes.h> | |
4d209fca | 14 | #include <TMath.h> |
df9db588 | 15 | |
0e318744 | 16 | template <Int_t N> class AliAODRedCov { |
df9db588 | 17 | |
18 | ||
19 | // | |
20 | // Class containing reduced cov matrix, see example here for a track | |
21 | // | |
22 | // X Y Z Px Py Pz | |
23 | // | |
24 | // X fDiag[ 0] | |
25 | // | |
26 | // Y fOdia[ 0] fDiag[ 1] | |
27 | // | |
28 | // Z fOdia[ 1] fOdia[ 2] fDiag[ 2] | |
29 | // | |
30 | // Px fOdia[ 3] fOdia[ 4] fOdia[ 5] fDiag[ 3] | |
31 | // | |
32 | // Py fOdia[ 6] fOdia[ 7] fOdia[ 8] fOdia[ 9] fDiag[ 4] | |
33 | // | |
34 | // Pz fOdia[10] fOdia[11] fOdia[12] fOdia[13] fOdia[14] fDiag[ 5] | |
35 | // | |
36 | ||
4d209fca | 37 | public: |
38 | AliAODRedCov() {} | |
39 | virtual ~AliAODRedCov() {} | |
40 | template <class T> void GetCovMatrix(T *cmat) const; | |
41 | template <class T> void SetCovMatrix(T *cmat); | |
42 | ||
43 | private: | |
44 | Double32_t fDiag[N]; // Diagonal elements | |
45 | Double32_t fODia[N*(N-1)/2]; // [-1, 1,8] 8 bit precision for off diagonal elements | |
46 | ||
47 | ClassDef(AliAODRedCov,1) | |
df9db588 | 48 | |
4d209fca | 49 | }; |
df9db588 | 50 | |
c98a50a1 | 51 | //Cint craps out here, we protect this part |
4d209fca | 52 | #if !defined(__CINT__) && !defined(__MAKECINT__) |
c98a50a1 | 53 | |
b4116488 | 54 | //#define DEBUG |
c98a50a1 | 55 | |
4d209fca | 56 | //______________________________________________________________________________ |
c98a50a1 | 57 | template <Int_t N> template <class T> inline void AliAODRedCov<N>::GetCovMatrix(T *cmat) const |
4d209fca | 58 | { |
59 | // | |
60 | // Returns the external cov matrix | |
61 | // | |
62 | ||
63 | for(Int_t i=0; i<N; ++i) { | |
64 | // Off diagonal elements | |
65 | for(Int_t j=0; j<i; ++j) { | |
c98a50a1 | 66 | #ifdef DEBUG |
4d209fca | 67 | printf("cmat[%2d] = fODia[%2d]*fDiag[%2d]*fDiag[%2d];\n", |
68 | i*(i+1)/2+j,(i-1)*i/2+j,j,i); | |
c98a50a1 | 69 | #endif |
4d209fca | 70 | cmat[i*(i+1)/2+j] = fODia[(i-1)*i/2+j]*fDiag[j]*fDiag[i];} |
71 | ||
72 | // Diagonal elements | |
c98a50a1 | 73 | #ifdef DEBUG |
4d209fca | 74 | printf("cmat[%2d] = fDiag[%2d]*fDiag[%2d];\n", |
75 | i*(i+1)/2+i,i,i); | |
c98a50a1 | 76 | #endif |
4d209fca | 77 | cmat[i*(i+1)/2+i] = fDiag[i]*fDiag[i]; |
78 | } | |
79 | } | |
df9db588 | 80 | |
df9db588 | 81 | |
4d209fca | 82 | //______________________________________________________________________________ |
c98a50a1 | 83 | template <Int_t N> template <class T> inline void AliAODRedCov<N>::SetCovMatrix(T *cmat) |
4d209fca | 84 | { |
85 | // | |
86 | // Sets the external cov matrix | |
87 | // | |
df9db588 | 88 | |
4d209fca | 89 | if(cmat) { |
90 | // Diagonal elements first | |
91 | for(Int_t i=0; i<N; ++i) { | |
c98a50a1 | 92 | #ifdef DEBUG |
4d209fca | 93 | printf("fDiag[%2d] = TMath::Sqrt(cmat[%2d]);\n", |
94 | i,i*(i+1)/2+i); | |
c98a50a1 | 95 | #endif |
4d209fca | 96 | fDiag[i] = TMath::Sqrt(cmat[i*(i+1)/2+i]);} |
97 | ||
98 | // ... then the ones off diagonal | |
99 | for(Int_t i=0; i<N; ++i) | |
100 | // Off diagonal elements | |
101 | for(Int_t j=0; j<i; ++j) { | |
c98a50a1 | 102 | #ifdef DEBUG |
4d209fca | 103 | printf("fODia[%2d] = cmat[%2d]/(fDiag[%2d]*fDiag[%2d]);\n", |
104 | (i-1)*i/2+j,i*(i+1)/2+j,j,i); | |
c98a50a1 | 105 | #endif |
4d209fca | 106 | fODia[(i-1)*i/2+j] = cmat[i*(i+1)/2+j]/(fDiag[j]*fDiag[i]); |
107 | } | |
108 | } else { | |
109 | for(Int_t i=0; i< N; ++i) fDiag[i]=-999.; | |
110 | for(Int_t i=0; i< N*(N-1)/2; ++i) fODia[i]=0.; | |
111 | } | |
112 | } | |
113 | ||
c98a50a1 | 114 | #undef DEBUG |
115 | ||
4d209fca | 116 | #endif |
df9db588 | 117 | #endif |