////////////////////////////////////////////////////////////////////////
// $Id: CandTrackSRHandle.h,v 1.13 2003/03/27 18:33:58 rlee Exp $
//
// CandTrackSRHandle
//
// CandTrackSRHandle is the specialized access handle to CandTrackSR.
//
// Each concrete CandHandle must define a DupHandle function.
//
// Author:  R. Lee 2001.02.26
//
////////////////////////////////////////////////////////////////////////

#ifndef CANDTRACKSRHANDLE_H
#define CANDTRACKSRHANDLE_H

#include "TObjArray.h"

#include "Navigation/XxxItr.h"
#include "RecoBase/CandTrackHandle.h"
class CandTrackSR;
#include "CandDigit/CandDigitHandle.h"
#include "CandDigit/CandDigitListHandle.h"

class CandClusterHandle;
class Track2DSR;
class CandContext;

class CandTrackSRHandle : public CandTrackHandle
{

public:
  CandTrackSRHandle();
  CandTrackSRHandle(const CandTrackSRHandle &csh);
  CandTrackSRHandle(CandTrackSR *cs);
  virtual ~CandTrackSRHandle();
  virtual CandTrackSRHandle *DupHandle() const;

  virtual void Trace(const char *c = "") const;

  TObjArray *GetClusterList();

  void AddCluster(CandClusterHandle *);

  void SetUTrack(Track2DSR *);
  void SetVTrack(Track2DSR *);

  Track2DSR *GetUTrack() const;
  Track2DSR *GetVTrack() const;

  Double_t GetDirCosU(Int_t) const; // at specified plane
  Double_t GetDirCosV(Int_t) const;
  Double_t GetDirCosZ(Int_t) const;

  Double_t GetDirCosU() const; // call CandRecoHandle
  Double_t GetDirCosV() const;
  Double_t GetDirCosZ() const;

  Double_t GetHoughDirCosU() const;
  Double_t GetHoughDirCosV() const;
  Double_t GetHoughDirCosZ() const;

  Double_t GetHoughResid2() const;

  virtual Double_t GetScore() const;

  virtual Double_t GetTimeWeight(const CandDigitHandle *) const;

  Int_t GetNTrackPlane(PlaneView::PlaneView_t = PlaneView::kUnknown) const;

  void SetNTrackStrip(Int_t);
  void SetNTrackDigit(Int_t);
  void SetNTimeFitDigit(Int_t);
  void SetTimeFitChi2(Double_t);

  Int_t GetNTrackStrip() const;
  Int_t GetNTrackDigit() const;
  Int_t GetNTimeFitDigit() const;
  Double_t GetTimeFitChi2() const;


private:

  Double_t GetDirCos(Int_t,Int_t) const;

ClassDef(CandTrackSRHandle,2)         // User access handle to CandTrackSR

};

XXXITRDEF(CandTrackSRHandle)

#endif                                              // CANDTRACKSRHANDLE_H
