1 |
//--------------------------------------------------------------------------------------------------
|
2 |
// $Id: TrackParameters.h,v 1.2 2008/08/29 00:27:22 loizides Exp $
|
3 |
//
|
4 |
// Description: class TrackParameters
|
5 |
//
|
6 |
// Class to manage track parameters of different conventions and convert one into the other. This is
|
7 |
// not really done very well and could be done more efficient but this is what it is for the moment.
|
8 |
//
|
9 |
// Original Author: Christoph Paus
|
10 |
// Created: Thu Aug 21 02:29:00 CEST 2008
|
11 |
//
|
12 |
// -------------------------------------------------------------------------------------------------
|
13 |
// CMS parameter ordering for the vector/matrix, which is assumed here:
|
14 |
//
|
15 |
// qoverp, lambda, phi0, dxy, dsz; (lambda = pi/2 - theta)
|
16 |
// mapping to CDF is therefore { 1*, 0*, 4, 3, 2* }, where * indicates that a transformation is
|
17 |
// needed
|
18 |
//
|
19 |
// Note that the radius of curvature (in cm) is then:
|
20 |
//
|
21 |
// Rc = cos(theta) / [ 0.0029979.... * (q/p) * B ],
|
22 |
//
|
23 |
// where B is the magnetic field in Tesla and tht is the angle between the field and the
|
24 |
// direction. With p * cos(theta) = pT it follows:
|
25 |
//
|
26 |
// Rc = pT / [ 0.0029979.... * q * B ],
|
27 |
// fullCurvature = 1 / Rc = 0.0029979 * q * B / pT = - 0.0029979 * B / pT.
|
28 |
//
|
29 |
// see the conventions for the MultiVertexFitter in its own header file.
|
30 |
//
|
31 |
// Author: C.Paus
|
32 |
//--------------------------------------------------------------------------------------------------
|
33 |
|
34 |
#ifndef MITEDM_VERTEXFITINTERFACE_TRACKPARAMETERS_H
|
35 |
#define MITEDM_VERTEXFITINTERFACE_TRACKPARAMETERS_H
|
36 |
|
37 |
#include <TMatrixDSym.h>
|
38 |
#include <TVectorD.h>
|
39 |
#include "DataFormats/TrackReco/interface/Track.h"
|
40 |
|
41 |
namespace mitedm
|
42 |
{
|
43 |
// Define existing track parameter conventions
|
44 |
enum TrackConvention { iCms, iMvf };
|
45 |
|
46 |
// Declare the track parameter class
|
47 |
class TrackParameters
|
48 |
{
|
49 |
public:
|
50 |
TrackParameters() {}
|
51 |
TrackParameters(const reco::Track *trk, TrackConvention tcv = iCms, double bField = 3.8);
|
52 |
TrackParameters(const TrackParameters &trk);
|
53 |
~TrackParameters() {};
|
54 |
|
55 |
// Access the specific contents
|
56 |
const TVectorD *pars () const { return &pars_; };
|
57 |
double pars (int i) const { return pars_[i]; };
|
58 |
const TMatrixDSym *cMat () const { return &cMat_; };
|
59 |
double cMat (int i, int j) const { return cMat_(i,j); };
|
60 |
|
61 |
// Access the different parametrizations independently of the local storage
|
62 |
TrackParameters cmsTrack() const;
|
63 |
TrackParameters mvfTrack() const;
|
64 |
|
65 |
void setPars (int i, double v) { pars_(i) = v; }
|
66 |
void setCMat (int i, int j, double v) { cMat_(i,j) = v; }
|
67 |
void addCMat (int i, int j, double v) { cMat_(i,j) += v; }
|
68 |
|
69 |
// Utilities
|
70 |
void print () const;
|
71 |
|
72 |
private:
|
73 |
TrackConvention iConvention_; // track parameter convention (def. CMS)
|
74 |
double bField_; // magnetic field in Tesla
|
75 |
double fCurv_; // combined curvature constant
|
76 |
TVectorD pars_; // track paramters (helix)
|
77 |
TMatrixDSym cMat_; // corresponding covariance matrix (sig_i * sig_j)
|
78 |
};
|
79 |
}
|
80 |
#endif
|