00001 #ifndef TRACKMCTOOLS_TRACKSELECTOR_H 00002 #define TRACKMCTOOLS_TRACKSELECTOR_H 1 00003 00004 // from Gaudi 00005 #include "GaudiAlg/GaudiTool.h" 00006 00007 // Event 00008 #include "Event/MCParticle.h" 00009 #include "Event/Track.h" 00010 00011 // from TrackInterfaces 00012 #include "TrackInterfaces/ITrackSelector.h" 00013 #include "TrackInterfaces/ITrackReconstructible.h" 00014 00015 // local 00016 //#include "TrackMCTools/TrackAcceptance.h" 00017 00040 class TrackSelector : public GaudiTool, virtual public ITrackSelector 00041 { 00042 public: 00044 TrackSelector( const std::string& type, 00045 const std::string& name, 00046 const IInterface* parent ); 00047 00049 virtual ~TrackSelector( ); 00050 00052 virtual StatusCode initialize(); 00053 00058 virtual bool select( Track* track ) const; 00059 00064 virtual bool select( MCParticle* mcParticle ); 00065 00070 virtual bool selectByTrackType( Track* track ) const; 00071 00076 virtual bool selectByTrackType( MCParticle* mcParticle ); 00077 00082 virtual unsigned int trackType( MCParticle* mcPart ); 00083 00089 virtual StatusCode setTrackType( MCParticle* mcPart, 00090 Track*& track ); 00091 00092 protected: 00093 00094 private: 00095 00096 // Reconstructibility tool 00097 ITrackReconstructible* m_mcParticleJudge; 00098 00099 // Store previously calculated values 00100 unsigned int m_previousTrackType; 00101 MCParticle* m_previousMCParticle; 00102 00103 // Job options 00104 bool m_uniqueFlag; 00105 bool m_validFlag; 00106 double m_minP; 00107 double m_maxP; 00108 std::vector<int> m_tracktypes; 00109 00110 std::string m_mcParticleJudgeName; 00111 00112 }; 00113 #endif // TRACKMCTOOLS_TRACKSELECTOR_H