#ifndef fxtTrackCutMonitor_hh
#define fxtTrackCutMonitor_hh

class StHbtTrack;

#include "StHbtMaker/Infrastructure/StHbtHisto.hh"
#include "StHbtMaker/Base/StHbtCutMonitor.hh"

//_________________
class fxtTrackCutMonitor : public StHbtCutMonitor {

 private:
  StHbt1FHisto* mDCAGlobal;
  StHbt1FHisto* mNhits;
  StHbt1FHisto* mP;
  StHbt1FHisto* mPt;
  StHbt2FHisto* mPtVsNsigmaPion;
  StHbt2FHisto* mPtVsNsigmaKaon;
  StHbt2FHisto* mPtVsNsigmaProton;
  StHbt2FHisto* mPvsDedx;
  StHbt1FHisto* mRapidity;
  StHbt1FHisto* mPseudoRapidity;
  StHbt2FHisto* mPvsMassSqr;
  StHbt2FHisto* mPvsInvBeta;
#ifdef TPC_DNDX
  StHbt2FHisto* mPtVsDndxNsigmaPion;
  StHbt2FHisto* mPtVsDndxNsigmaKaon;
  StHbt2FHisto* mPtVsDndxNsigmaProton;
  StHbt2FHisto* mPvsDndx;
#endif
  double monMass;
  
public:
  fxtTrackCutMonitor(const char*, const double);   // default constructor
  fxtTrackCutMonitor( const  fxtTrackCutMonitor& cutMoni);
  virtual ~fxtTrackCutMonitor();

  virtual void Fill(const StHbtTrack* track);

  // These dummy Fill() functions were introduced to remove a compiler
  //   warning related to overloaded base-class Fill() functions being 
  //   hidden by a single version of Fill() in this derived class
  void Fill(const StHbtParticleCollection* d) {;}
  void Fill(const StHbtEvent *d1, const StHbtParticleCollection* d2) {;}
  void Fill(const StHbtPair* d) {;}
  void Fill(const StHbtKink* d) {;}
  void Fill(const StHbtV0* d) {;}
  void Fill(const StHbtEvent* d) {;}
  
  StHbt1FHisto* DCAGlobal() { return mDCAGlobal; }
  StHbt1FHisto* Nhits() { return mNhits; }
  StHbt1FHisto* P() { return mP; }
  StHbt1FHisto* Pt() { return mPt; }
  StHbt2FHisto* PtVsNsigmaPion() { return mPtVsNsigmaPion; }
  StHbt2FHisto* PtVsNsigmaKaon() { return mPtVsNsigmaKaon; }
  StHbt2FHisto* PtVsNsigmaProton() {return mPtVsNsigmaProton; }
  StHbt2FHisto* PvsDedx() { return mPvsDedx; }
  StHbt1FHisto* Rapidity() { return mRapidity; }
  StHbt1FHisto* PseudoRapidity() { return mPseudoRapidity; }
  StHbt2FHisto* PvsMassSqr() { return mPvsMassSqr; }
  StHbt2FHisto* PvsInvBeta() {return mPvsInvBeta; }

#ifdef TPC_DNDX
  StHbt2FHisto* PtVsDndxNsigmaPion()   { return mPtVsDndxNsigmaPion;}
  StHbt2FHisto* PtVsDndxNsigmaKaon()   { return mPtVsDndxNsigmaKaon;}
  StHbt2FHisto* PtVsDndxNsigmaProton() { return mPtVsDndxNsigmaProton;}
  StHbt2FHisto* PvsDndx() { return mPvsDndx;}
#endif
  
#ifdef __ROOT__  
 ClassDef(fxtTrackCutMonitor, 2)
#endif
};

#endif
