00001 #ifndef ANALYTICFIELDSVC_H 00002 #define ANALYTICFIELDSVC_H 1 00003 00004 // Include files 00005 #include "GaudiKernel/Service.h" 00006 00007 #include "GaudiKernel/IMagneticFieldSvc.h" 00008 #include "GaudiKernel/Vector3DTypes.h" 00009 #include "GaudiKernel/Point3DTypes.h" 00010 #include "MagVec.h" 00011 #include "MagMat.h" 00012 00013 // Forward declarations 00014 template <class TYPE> class SvcFactory; 00015 00016 00027 class AnalyticFieldSvc : public Service, 00028 virtual public IMagneticFieldSvc { 00029 00030 protected: 00031 00035 AnalyticFieldSvc( const std::string& name, ISvcLocator* svc ); 00036 00038 virtual ~AnalyticFieldSvc(); 00039 00040 public: 00041 00043 virtual StatusCode initialize(); 00044 00046 virtual StatusCode finalize(); 00047 00053 virtual StatusCode queryInterface( const InterfaceID& riid, 00054 void** ppvInterface ); 00055 00061 virtual StatusCode fieldVector( const Gaudi::XYZPoint& xyz, 00062 Gaudi::XYZVector& fvec ) const; 00063 00064 private: 00065 00067 friend class SvcFactory<AnalyticFieldSvc>; 00068 00070 // void fieldGrid( const Gaudi::XYZPoint& xyz, Gaudi::XYZVector& fvec ) const; 00071 00072 StatusCode GetParam(); 00073 void Bcalculation(const Gaudi::XYZPoint& point, 00074 Gaudi::XYZVector& bf ) const; 00075 double EvaluateField(MagVec& pos, MagMat& bmap) const; 00076 00077 void ClearMaps(); 00078 00079 00080 std::string m_filename[3]; 00081 std::vector<MagMat*> Bxmap; 00082 std::vector<MagMat*> Bymap; 00083 std::vector<MagMat*> Bzmap; 00084 00085 std::vector<double> zmin; 00086 std::vector<double> zmax; 00087 00088 double m_zOffSet; 00089 00090 00091 bool m_useConstField; 00092 std::vector<double> m_constFieldVector; 00093 double m_scaleFactor; 00094 00095 int m_nREG,m_nREGmin,m_nREGmax; 00096 00097 }; 00098 00099 #endif // ANALYTICFIELDSVC_H