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

# User Rev Content
1 loizides 1.2 // $Id:$
2    
3     #include "MitEdm/VertexFitInterface/interface/TrackParameters.h"
4 paus 1.1 #include "TMath.h"
5     #include "MitEdm/DataFormats/interface/Types.h"
6 loizides 1.2
7 paus 1.1 using namespace std;
8     using namespace TMath;
9     using namespace reco;
10     using namespace mitedm;
11    
12 loizides 1.2 //--------------------------------------------------------------------------------------------------
13 paus 1.1 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 loizides 1.2 // Constructor.
19    
20 paus 1.1 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 loizides 1.2 //--------------------------------------------------------------------------------------------------
40 paus 1.1 TrackParameters::TrackParameters(const TrackParameters &trk) :
41     iConvention_(trk.iConvention_),
42     bField_ (trk.bField_),
43     fCurv_ (trk.fCurv_)
44     {
45 loizides 1.2 // Constructor.
46    
47 paus 1.1 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 loizides 1.2 //--------------------------------------------------------------------------------------------------
57 paus 1.1 TrackParameters TrackParameters::mvfTrack() const
58     {
59 loizides 1.2 // Return a new set of track parameters in the required MVF convention.
60    
61 paus 1.1 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 loizides 1.2 // Return a new set of track parameters in the required CMS convention.
107    
108 paus 1.1 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 loizides 1.2 //--------------------------------------------------------------------------------------------------
153 paus 1.1 void TrackParameters::print() const
154     {
155 loizides 1.2 // Print track parameters.
156    
157 paus 1.1 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     }