README TRACKING
Sept. 22, 2008  David Lawrence

NOTE: This is a 2nd version of this README which completely discards the
1st version. The 1st version is available in svn in revison 1921.


The charged particle tracking reconstruction is broken up into 3
main stages:

1.) Track finding with helical fit (DTrackCandidate class)

2.) Track fitting to wire position (DTrack class)

3.) Track fitting to drift times (DParticle class)


The DTrackCandidate objects are created separately for the
FDC and CDC in their respective tagged factories. The
default DTrackCandidate factory combines the two lists
into a single list. Candidates from the 2 systems that appear
to be the same physical track are combined so that the
track isn't fit twice.

The DTrack and DParticle objects are fits based on wire-position
only and fits based on drift times respectively. Both will
use the same DTrackFitter based object to do the heavy lifting
in fitting the track. The hit selection for the wire-based fits
is done in the DTrack_factory class. The hits used in the fit
(DCDCTrackHit and DFDCPseudo objects) are added as associated
objects to the DTrack object. The DParticle_factory class
currently uses the hit list from the DTrack associated objects.
This means the time-based fits are done using the exact same list
of hits used for the wire-based fits. DParticle objects also have
the hit objects added as  associated objects so the hits used in
the fit can always be recovered.

The fitting itself is done in a couple of ways:

Helical fitters:
----------------

The DQuickFit and DRiemannFit classes do (essentially) helical
fits using 2 different techniques. Both are used in the current
track finders. A 3rd method is in the DHoughFind class which also
does an effective helical fit, but is considerably slower. The
DHough class is not currently used.


Non-helical fitters:
--------------------

The DTrackFitter class is meant as a base class for the "full"
(i.e. respecting the inhomgenous field) track fitters. Currently,
only one fitter is implemented in this framework (DTrackFitterALT1),
but others are expected soon. This allows the algorithm
to be easily swapped out for both wire-based and time-based tracks.
The DKalmanFilter class implements another algorithm currently
being developed.

The ALT1 fitter is a global fitter using a non-standard 
parameterization of the momentum parameters. Most spcifically,
it uses total momentum and polar angle theta as 2 of the parameters.
The ALT2 fitter is identical to ALT1 except that it uses a more
standard parameterization that includes 1/p and dip angle.

The ALT3 fitter implements the DKalmanFilter class to fit via
the Kalman filter technique.

The DReferenceTrajectory and DMagneticFieldStepper classes are
utility classes used to swim tracks through the inhomogeneous
magnetic field. They do not currently account for energy loss.