Line Code
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>&kappa;</i>: signed transverse curvature: <i>&kappa = -<font face="Times New Roman, Times">q &bull; B<sub>z</sub>/p<sub>t</sub></font></i>.
<li> <b><i>&theta;</i></b>: polar angle of the momentum vector.
<li> <b><i>&phi;<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
*/