00001 //-------------------------------------------------------------------------- 00002 // File and Version Information: 00003 // 00004 // Description: TrkMomVisitor is an implementation of the Visitor pattern 00005 // for use in calculating momenta for different types of 00006 // trajectories. (See the book _Design Patterns_ or one of the 00007 // authors for a definition of the Visitor pattern.) 00008 // 00009 // Environment: 00010 // Software developed for the BaBar Detector at the SLAC B-Factory. 00011 // 00012 // Author(s): Justin Albert, Steve Schaffner 00013 // 00014 //------------------------------------------------------------------------ 00015 #ifndef TRKMOMVISITOR_H 00016 #define TRKMOMVISITOR_H 00017 00018 #include "TrkBase/TrkVisitor.h" 00019 00020 class TrkSimpTraj; 00021 class HelixTraj; 00022 class TrkCircleTraj; 00023 class NeutTraj; 00024 class TrkDifLineTraj; 00025 00026 // Class interface // 00027 class TrkMomVisitor : public TrkVisitor { 00028 00029 public: 00030 00031 TrkMomVisitor(const TrkSimpTraj&); 00032 00033 virtual ~TrkMomVisitor(); 00034 00035 // ****************** 00036 // data member access 00037 // ****************** 00038 00039 const HelixTraj* helix() const {return _ht;} 00040 const TrkCircleTraj* circle() const {return _ct;} 00041 const NeutTraj* neut() const {return _nt;} 00042 const TrkDifLineTraj* line() const {return _lt;} 00043 00044 //******************************** 00045 // The visitor functions: 00046 //******************************** 00047 00048 virtual void trkVisitHelixTraj(const HelixTraj*); 00049 virtual void trkVisitCircleTraj(const TrkCircleTraj*); 00050 virtual void trkVisitNeutTraj(const NeutTraj*); 00051 virtual void trkVisitLineTraj(const TrkDifLineTraj*); 00052 00053 private: 00054 00055 const HelixTraj* _ht; 00056 const TrkCircleTraj* _ct; 00057 const NeutTraj* _nt; 00058 const TrkDifLineTraj* _lt; 00059 00060 }; 00061 00062 #endif