#ifndef STCLUSTERTRACKMONITOR_H
#define STCLUSTERTRACKMONITOR_H 1
 
// Include files

#include <string>
#include <map>


// from Gaudi
#include "TrackMonitorTupleBase.h"

// from Kernel
#include "Kernel/ISTReadoutTool.h"
#include "Kernel/STToolBase.h"

// STTELL1Event
#include "Event/STTELL1Data.h"

namespace LHCb {
  class Track ;
  class State ;
}
class DeVelo ;
class DeOTDetector ;
class IHitExpectation;
class IVeloExpectation;
class ITrackExtraplator;
class DeSTDetector;

/** @class STClusterTrackMonitor STClusterTrackMonitor.h "TrackCheckers/TrackMonitor"
 * 
 * Class for monitoring of cluster association to tracks
 *  @author Ch. Elsasser
 *  @date   17-6-2013
 */                 
                                                           
class STClusterTrackMonitor : public TrackMonitorTupleBase {
                                                                             
 public:
                                                                             
  /** Standard construtor */
  STClusterTrackMonitor( const std::string& name, ISvcLocator* pSvcLocator );
                                                                             
  /** Destructor */
  virtual ~STClusterTrackMonitor();

  /** Algorithm initialize */
  virtual StatusCode initialize();

  /** Algorithm execute */
  virtual StatusCode execute();

 private:

  LHCb::StateVector* GetTTHit(const LHCb::Track* track);
  LHCb::StateVector* GetITHit(const LHCb::Track* track);

  double m_maxTrChi2NDF;
  

  std::string m_detType;
  std::string m_layer;
  std::string m_clusterLoc;
  std::string m_odinLoc;
  std::string m_trackLoc;
  
  ITrackExtrapolator* m_extrapolator;
  DeSTDetector* m_STDet;
  
  
  

  
  typedef  std::map<std::string, unsigned int> MultiplicityMap ;
  MultiplicityMap m_multiplicityMap;

  std::map<std::string, unsigned int> m_layerMap;
  
  
};


#endif // STCLUSTERTRACKMONITOR_H
