1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
|
/*!
\page DataFormats_TrackReco Package DataFormats/TrackReco
<center>
<small>
<a href=http://cmsdoc.cern.ch/swdev/viewcvs/viewcvs.cgi/CMSSW/DataFormats/TrackReco/?cvsroot=CMSSW>CVS head for this package</a> -
<a href=http://cmsdoc.cern.ch/swdev/viewcvs/viewcvs.cgi/CMSSW/DataFormats/TrackReco/.admin/developers?rev=HEAD&cvsroot=CMSSW&content-type=text/vnd.viewcvs-markup>Administrative privileges</a>
</small>
</center>
\section desc Description
Persistent classes for Track Reco data format.
\subsection interface Public interfaces
- reco::Track: reconstructed Track. Objects of this type are ment to be stored in the AOD.
<br>Contains a reference to an object of type reco::TrackExtra.
- reco::TrackExtra: Track extension. Objects of this type are ment to be stored in the RECO.
\subsection interface_base Auxiliary base classes
- reco::TrackBase: common base class to reco::Track and reco::Muon
- reco::TrackExtraBase: common base class to reco::TrackExtra and reco::MuonExtra.
Contains references to objects of type TrackingRecHit.
\subsection typedefs
- reco::TrackCollection: collection of reco::Track objects
- reco::TrackRef: persistent reference to a reco::Track object
- reco::TrackRefProd: reference to a reco::Track collection
- reco::TrackRefVector: vector of references to reco::Track objects in the same collection
- reco::track_iterator: iterator over a vector of references to reco::Track objects in the same collection
- reco::TrackExtraCollection: collection of reco::TrackExtra objects
- reco::TrackExtraRef: persistent reference to a reco::TrackExtra object
- reco::TrackExtraRefProd: reference to a reco::TrackExtra collection
- reco::TrackExtraRefVector: vector of references to reco::TrackExtra objects in the same collection
- reco::trackExtra_iterator: iterator over a vector of references to reco::TrackExtra objects in the same collection
\section tiers Track object "Tiers"
The complete track information is stored in two different object:
reco::Track and reco::TrackExtra, that are stored in two different
collection, physically written to fine into two
different ROOT branches. This modularity allows the freedom to "drop"
the reco::TrackExtra component, if not needed, and leave only
reco::Track, in order to save disk space. This could be done,
for instance while writing only the AOD component of a RECO collection.
A reco::Track has a reference (edm::Ref) to a reco::TrackExtra object that
allows to access the information in the "extra" tier. Users don't
necessarily have to dereference this persistent reference, since
reco::Track has two sets of methods:
- inherited from the base class reco::TrackBase, that only
access data stored in the reco::Track object
- specific to reco::Track, that return quantities
derived from reco::TrackExtra information, dereferencing
the corresponding reference.
For instance, the following methods
will only access reco::TrackBase data members:
\htmlonly
<pre>
reco::Track trk;
double pt = trk.pt();
double eta = trk.eta();
</pre>
\endhtmlonly
The following instead access data members contained in reco::TrackExtra:
\htmlonly
<pre>
reco::Track trk;
double outerPt = trk.outerPt();
math::XYZPoint p = trk.outerPosition();
</pre>
\endhtmlonly
and are equivalent to:
\htmlonly
<pre>
reco::Track trk;
const reco::TrackExtraRef & trkExtra = trk.extra();
double outerPt = trkExtra.outerPt();
math::XYZPoint p = trkExtra.outerPosition();
</pre>
\endhtmlonly
<br>
<b>Warning:</b> collections of those two data types are potentially stored in different data tiers.
So, if a reco::TrackExtra is not stored on disk dereferencing the reference contained in
reco::Track may result in an exception.
\section parms Track Parametrization
Track helix parametrization follows the perigee model described
in the internal CMS note <a href="https://cmsdoc.cern.ch/documents/03/in/in03_008.pdf">CMS IN-2003/008</a>.
The five parameters are:
\htmlonly
<ul>
<li> <b><i>κ</i>: signed transverse curvature: <i>&kappa = -<font face="Times New Roman, Times">q • B<sub>z</sub>/p<sub>t</sub></font></i>.
<li> <b><i>θ</i></b>: polar angle of the momentum vector.
<li> <b><i>φ<sub>0</sub></i></b>: azimuthal angle of the momentum vector at the PCA to the beam line.
<li> <b><i><font face="Times New Roman, Times">d<sub>0</sub></font></i></b>: signed transverse distance of the PCA. By convention, the
sign is positive if the reference point is at the left of the PCA.
<li> <b><i><font face="Times New Roman, Times">d<sub>z</sub></font></i></b>: longitudinal distance of the PCA.
</ul>
\endhtmlonly
The five parameters are stored internally in a vector whose index
varies from 0 to 4, in the order listed above. The indices are
also defined as the enumerator <tt>index</tt> defined in the
namespace reco::helix:
\htmlonly
<pre>
enum index { i_transverseCurvature = 0 , i_theta, i_phi0, i_d0, i_dz };
</pre>
\endhtmlonly
So, for instance, in order to access specific track parameters a user
can write the following code that requires no explicit numeric index:
\htmlonly
<pre>
using namespace reco::perigee;
reco::TrackRef track = ... ;
double d0 = track->parameter( i_d0 );
double covThetaPhi = track->covariance( i_theta, i_phi0 );
</pre>
\endhtmlonly
\subsection modules Modules
None.
\subsection tests Unit tests and examples
None.
\section status Status and planned development
To be reviewed.
<hr>
Last updated: @DATE@ L. Lista, Th. Speer
*/
|