////////////////////////////////////////////////////////////////////////
// $Id: AlgTrackSR.h,v 1.10 2005/12/13 15:59:46 rhatcher Exp $
//
// AlgTrackSR.h
//
// AlgTrackSR is a concrete StripSR Algorithm class.
//
// Author:  R. Lee 2001.02.26
// Revised: B. Rebel 2004.03.31
//
////////////////////////////////////////////////////////////////////////

#ifndef ALGTRACKSR_H
#define ALGTRACKSR_H

#include "Algorithm/AlgBase.h"
#include "RecoBase/AlgReco.h"
#include "RecoBase/AlgTrack.h"
#include "Conventions/Detector.h"

class Track2DSR;
class UgliGeomHandle;
class CandStripHandleItr;
class CandTrackSRHandle;

class AlgTrackSR : public AlgBase, public AlgReco, public AlgTrack
{

public:
  AlgTrackSR();
  virtual ~AlgTrackSR();
  virtual void RunAlg(AlgConfig &ac, CandHandle &ch, CandContext &cx);
  virtual void Trace(const char *c) const;

 private:

  Int_t fParmNExtraStrip;
  Double_t fParmMinPlanePE;
  Int_t fParmIsCosmic;
  Detector::Detector_t fDetector;
  Double_t fParmMinStripPE;
  Double_t fParmMaxClusterSizeTimeFit;
  Double_t fParmMaxTimeFitRes;
  Int_t fParmMinTimeFitSize;
  Double_t fParmMaxTimeFitOutlier;

  Int_t FindNeighborIndex(Track2DSR *track, Int_t currentIndex,
			     Int_t direction);
  Int_t FindTimingDirection(CandTrackSRHandle &cth,
			    CandStripHandleItr &stripItr, 
			    Track2DSR *utrack,
			    Track2DSR *vtrack, 
			    Double_t *fitparm,
			    Double_t &maxPathLength, 
			    Double_t &timefitchi2);
 
 void FindStripsInTrack(Track2DSR *uTrack, Track2DSR *vTrack,
			 CandTrackSRHandle &cth);


ClassDef(AlgTrackSR,3)                            // TrackSR Algorithm Class

};

#endif                                                     // ALGTRACKSR_H
