ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/IPHCalignment2/Alignment/TwoBodyDecay/interface/TwoBodyDecayUncertainty.h
Revision: 1.1
Committed: Fri Nov 25 17:10:51 2011 UTC (13 years, 5 months ago) by econte
Content type: text/plain
Branch: MAIN
CVS Tags: TBD2011, TBD_2011, HEAD
Log Message:
TwoBodyDecay modif

File Contents

# Content
1 #ifndef Alignment_TwoBodyDecay_TwoBodyDecayUncertainty_h
2 #define Alignment_TwoBodyDecay_TwoBodyDecayUncertainty_h
3
4 #include <iomanip>
5 #include "Alignment/TwoBodyDecay/interface/TwoBodyDecay.h"
6 #include "Alignment/TwoBodyDecay/interface/TwoBodyDecayParameters.h"
7
8 class TwoBodyDecayUncertainty
9 {
10 public:
11
12 enum ParameterName { X = 0, Y = 1, Z = 2, PX = 3, PY = 4, PZ = 5, THETA = 6, PHI = 7, MASS = 8 };
13
14 TwoBodyDecayUncertainty(const TwoBodyDecay& info, const double & mass):
15 m_(mass), parameters_(info.parameters()), covariance_(info.covariance()) {init();}
16
17 std::pair<AlgebraicVector, AlgebraicVector> cartesianSecondaryMomenta()
18 { AlgebraicVector a(3); a[0]=plusPx(); a[1]=plusPy(); a[2]=plusPz();
19 AlgebraicVector b(3); b[0]=minusPx(); b[1]=minusPy(); b[2]=minusPz();
20 return std::make_pair(a, b);
21 }
22
23 std::pair<double,double> errorSecondaryMomentaP();
24 std::pair<double,double> errorSecondaryMomentaPT();
25
26 std::pair<double,double> errorSecondaryMomentaPx()
27 { return errorSecondaryMomentaComponent(1); }
28 std::pair<double,double> errorSecondaryMomentaPy()
29 { return errorSecondaryMomentaComponent(2); }
30 std::pair<double,double> errorSecondaryMomentaPz()
31 { return errorSecondaryMomentaComponent(3); }
32
33 std::pair<double,double> errorSecondaryMomentaComponent(unsigned char k)
34 {
35 double p = 0;
36 double m = 0;
37 for (unsigned int i=0;i<9;i++)
38 for (unsigned int j=0;j<9;j++)
39 {
40 p += (finalPlusP_[i])[k][0] *(finalPlusP_[j])[k][0] *covariance_[i][j];
41 m += (finalMinusP_[i])[k][0]*(finalMinusP_[j])[k][0]*covariance_[i][j];
42 }
43 return std::make_pair(p,m);
44 }
45
46 double plusPx() const {return finalPlus_[1][0];}
47 double plusPy() const {return finalPlus_[2][0];}
48 double plusPz() const {return finalPlus_[3][0];}
49 double plusP() const {return sqrt(plusPx()*plusPx()+plusPy()*plusPy()+plusPz()*plusPz()); }
50
51 double minusPx() const {return finalMinus_[1][0];}
52 double minusPy() const {return finalMinus_[2][0];}
53 double minusPz() const {return finalMinus_[3][0];}
54 double minusP() const {return sqrt(minusPx()*minusPx()+minusPy()*minusPy()+minusPz()*minusPz()); }
55
56
57
58 private:
59 double m_;
60 AlgebraicVector parameters_;
61 AlgebraicSymMatrix covariance_;
62 double pT2_;
63 double p2_;
64 double pT_;
65 double p_;
66
67 AlgebraicMatrix rotationA_;
68 AlgebraicMatrix rotationB_;
69 AlgebraicMatrix rotation_;
70 AlgebraicMatrix lorentz_;
71 std::vector<AlgebraicMatrix> rotationAp_;
72 std::vector<AlgebraicMatrix> rotationBp_;
73 std::vector<AlgebraicMatrix> rotationp_;
74 std::vector<AlgebraicMatrix> lorentzP_;
75
76 AlgebraicMatrix momentumPlus_;
77 AlgebraicMatrix momentumMinus_;
78 std::vector<AlgebraicMatrix> momentumPlusP_;
79 std::vector<AlgebraicMatrix> momentumMinusP_;
80
81 AlgebraicMatrix finalPlus_;
82 AlgebraicMatrix finalMinus_;
83 std::vector<AlgebraicMatrix> finalPlusP_;
84 std::vector<AlgebraicMatrix> finalMinusP_;
85
86
87 void init();
88 void RotationMatrixA();
89 void RotationMatrixB();
90 void Momentum();
91 void LorentzMatrix();
92
93 void displayMatrix(const std::string& name, const AlgebraicMatrix& mat)
94 {
95 std::cout << "Matrix called '" << name << "'"<<std::endl;
96 for (int i=0;i<mat.num_row();i++)
97 {
98 for (int j=0;j<mat.num_col();j++)
99 {
100 std::cout.width(13);
101 std::cout << mat[i][j];
102 }
103 std::cout<<std::endl;
104 }
105 }
106
107 };
108
109 #endif