ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitEdm/VertexFitInterface/src/TrackParameters.cc
Revision: 1.2
Committed: Sat Sep 27 05:48:26 2008 UTC (16 years, 7 months ago) by loizides
Content type: text/plain
Branch: MAIN
CVS Tags: Mit_012h, Mit_012g, Mit_012f, Mit_012e, Mit_012d, Mit_012c, Mit_012b, Mit_012a, Mit_012, Mit_011a, Mit_011, Mit_010a, Mit_010, Mit_009c, Mit_009b, Mit_009a, Mit_009, Mit_008, Mit_008pre2, Mit_008pre1, Mit_006b, Mit_006a, Mit_006, Mit_005, Mit_004
Changes since 1.1: +18 -3 lines
Log Message:
Cleanup

File Contents

# Content
1 // $Id:$
2
3 #include "MitEdm/VertexFitInterface/interface/TrackParameters.h"
4 #include "TMath.h"
5 #include "MitEdm/DataFormats/interface/Types.h"
6
7 using namespace std;
8 using namespace TMath;
9 using namespace reco;
10 using namespace mitedm;
11
12 //--------------------------------------------------------------------------------------------------
13 TrackParameters::TrackParameters(const Track* trk, const TrackConvention cv, double bField) :
14 iConvention_(cv),
15 bField_ (bField),
16 fCurv_ (0.5 * 0.0029979 * bField_ * -1.0)
17 {
18 // Constructor.
19
20 pars_.ResizeTo(5);
21 cMat_.ResizeTo(5,5);
22 if (cv == iCms) {
23 pars_[0] = trk->qoverp();
24 pars_[1] = trk->lambda();
25 pars_[2] = trk->phi();
26 pars_[3] = trk->dxy();
27 pars_[4] = trk->dsz();
28 for (int i=0; i<5; i++) {
29 for (int j=0; j<5; j++)
30 cMat_(i,j) = trk->covariance(i,j);
31 }
32 }
33 else {
34 cout << "TrackParameters::TrackParameters -- Requested transfer: CMS -> MVF convention"
35 << " not yet implemented.\n";
36 }
37 }
38
39 //--------------------------------------------------------------------------------------------------
40 TrackParameters::TrackParameters(const TrackParameters &trk) :
41 iConvention_(trk.iConvention_),
42 bField_ (trk.bField_),
43 fCurv_ (trk.fCurv_)
44 {
45 // Constructor.
46
47 pars_.ResizeTo(5);
48 cMat_.ResizeTo(5,5);
49 for (int i=0; i<5; i++) {
50 pars_(i) = trk.pars(i);
51 for (int j=0; j<5; j++)
52 cMat_(i,j) = trk.cMat(i,j);
53 }
54 }
55
56 //--------------------------------------------------------------------------------------------------
57 TrackParameters TrackParameters::mvfTrack() const
58 {
59 // Return a new set of track parameters in the required MVF convention.
60
61 TrackParameters outTk;
62 outTk.pars_.ResizeTo(5);
63 outTk.cMat_.ResizeTo(5,5);
64
65 if (iConvention_ == iCms) {
66 outTk.setPars(0,1.0/Tan(PiOver2() - pars_[1])); // cotTheta
67 outTk.setPars(1,fCurv_*pars_[0]/Cos(pars_[1])); // curvature
68 outTk.setPars(2,pars_[4]/Cos(pars_[1])); // z0
69 outTk.setPars(3,pars_[3]); // d0
70 outTk.setPars(4,pars_[2]); // phi0
71 if (outTk.pars()[4]<0.0)
72 outTk.setPars(4,pars_[2] + 2*Pi()); // phi0 [0,2pi)
73 // dPidQj(i,j) gives partial dP_i/dQ_j where Pi are the new parameters and Qj are the old ones
74 TMatrixD dPidQj(5,5);
75 dPidQj(0,1) = 1.0/(Sin(PiOver2() - pars_[1])*Sin(PiOver2() - pars_[1]));
76 dPidQj(1,0) = fCurv_/Cos(pars_[1]);
77 dPidQj(1,1) = fCurv_*pars_[0]*Tan(pars_[1])/Cos(pars_[1]);
78 dPidQj(2,1) = pars_[4]*Tan(pars_[1])/Cos(pars_[1]);
79 dPidQj(2,4) = 1.0/Cos(pars_[1]);
80 dPidQj(3,3) = 1.0;
81 dPidQj(4,2) = 1.0;
82 for (int i=0; i<5; i++)
83 for (int j=0; j<5; j++) {
84 outTk.setCMat(i,j,0.0);
85 for (int k=0; k<5; k++)
86 for (int l=0; l<5; l++)
87 outTk.addCMat(i,j,dPidQj(i,k)*dPidQj(j,l)*cMat_(k,l));
88 }
89 }
90 else {
91 outTk.setPars(0,pars_[0]);
92 outTk.setPars(1,pars_[1]);
93 outTk.setPars(2,pars_[2]);
94 outTk.setPars(3,pars_[3]);
95 outTk.setPars(4,pars_[4]);
96 for (int i=0; i<5; i++)
97 for (int j=0; j<5; j++) {
98 outTk.setCMat(i,j,cMat_(i,j));
99 }
100 }
101 return outTk;
102 }
103
104 TrackParameters TrackParameters::cmsTrack() const
105 {
106 // Return a new set of track parameters in the required CMS convention.
107
108 TrackParameters outTk;
109 outTk.pars_.ResizeTo(5);
110 outTk.cMat_.ResizeTo(5,5);
111
112 if (iConvention_ == iCms) {
113 outTk.setPars(0,pars_[0]);
114 outTk.setPars(1,pars_[1]);
115 outTk.setPars(2,pars_[2]);
116 outTk.setPars(3,pars_[3]);
117 outTk.setPars(4,pars_[4]);
118 for (int i=0; i<5; i++)
119 for (int j=0; j<5; j++) {
120 outTk.setCMat(i,j,cMat_(i,j));
121 }
122 }
123 else {
124 // Apply MVF to CMS conversion
125 outTk.setPars(1,ATan(pars_[0])); // lambda
126 outTk.setPars(0,pars_[1]*Cos(outTk.pars(1))/fCurv_); // qoverp
127 outTk.setPars(2,pars_[4]); // phi
128 outTk.setPars(3,pars_[3]); // dxy
129 outTk.setPars(4,Cos(outTk.pars(1))*pars_[2]); // dsz
130 if (outTk.pars(2)>Pi())
131 outTk.setPars(2,pars_[4]-2*Pi()); // phi0 [-pi,pi)
132 // dPidQj(i,j) gives partial dP_i/dQ_j where Pi are the new parameters and Qj are the old ones
133 TMatrixD dPidQj(5,5);
134 dPidQj(1,0) = 1.0/(1.0+pars_[0]*pars_[0]);
135 dPidQj(0,0) = pars_[1]*Sin(outTk.pars(1))*dPidQj(1,0)/fCurv_;
136 dPidQj(0,1) = Cos(outTk.pars(1))/fCurv_;
137 dPidQj(2,4) = 1.0;
138 dPidQj(3,3) = 1.0;
139 dPidQj(4,0) = -pars_[2]*Sin(outTk.pars(1))*dPidQj(1,0);
140 dPidQj(4,2) = Cos(outTk.pars(1));
141 for (int i=0; i<5; i++)
142 for (int j=0; j<5; j++) {
143 outTk.setCMat(i,j,0.0);
144 for (int k=0; k<5; k++)
145 for (int l=0; l<5; l++)
146 outTk.addCMat(i,j,dPidQj(i,k)*dPidQj(j,l)*cMat_(k,l));
147 }
148 }
149 return outTk;
150 }
151
152 //--------------------------------------------------------------------------------------------------
153 void TrackParameters::print() const
154 {
155 // Print track parameters.
156
157 printf("\n==== Show track ====\n Track parameters with convention %1d.\n",int(iConvention_));
158 for (int i=0; i<5; i++)
159 printf(" Parameter [%1d]: %8.4f\n",i,pars_[i]);
160 printf("Track covariance matrix");
161 for (int i=0; i<5; i++) {
162 printf("\n CV[%1d,0-4] ",i);
163 for (int j=0; j<5; j++)
164 printf(" %8.4f",cMat_(i,j));
165 }
166 printf("\n");
167 }