00001
00002
00003
00004
00005
00006
00007 #ifndef __GLASTFIT_H
00008 #define __GLASTFIT_H 1
00009
00010 #include "GaudiKernel/MsgStream.h"
00011 #include "geometry/Ray.h"
00012 #include "TkrRecon/GFcontrol.h"
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 class GFdata
00024
00025 {
00026 public:
00027
00028 GFdata() : m_RCenergy(0.), m_quality(0.), m_firstLayer(0),
00029 m_nhits(0), m_itower(0)
00030 {ini();}
00031
00032 GFdata getGFdata() {return *this;}
00033
00034
00035 inline Point vertex() const {return m_vertex;}
00036 inline Vector direction() const {return m_direction.unit();}
00037 inline double RCenergy() const {return m_RCenergy;}
00038 inline double Q() const {return m_quality;}
00039 inline int firstLayer() const {return m_firstLayer;}
00040 inline int nhits() const {return m_nhits;}
00041 inline int tower() const {return m_itower;}
00042
00043 Ray ray() const {return Ray(m_vertex,m_direction);}
00044
00045
00046 void ini();
00047 bool empty() const;
00048 void writeOut(MsgStream& log) const;
00049
00050
00051 static Point doVertex(const Ray&, const Ray& );
00052 static Vector doDirection(const Vector& xdir, const Vector& ydir);
00053 static bool neighbourTowers(int itower, int jtower);
00054
00055 protected:
00056
00057
00058 Point m_vertex;
00059 Vector m_direction;
00060 double m_RCenergy;
00061 double m_quality;
00062 int m_firstLayer;
00063 int m_nhits;
00064 int m_itower;
00065
00066 };
00067
00068
00069 class GFbase: public GFdata
00070
00071 {
00072 public:
00073
00074
00075 inline double sigmaCut() const {return m_sigmaCut;}
00076 inline bool alive() const {return m_alive;}
00077 inline Point inputVertex() const {return m_inVertex;}
00078 inline Vector inputDirection() const {return m_inDirection;}
00079 inline int inputLayer() const {return m_iniLayer;}
00080 inline double inputEnergy() const {return m_iniEnergy;}
00081
00082 inline Ray inputRay() const {return Ray(m_inVertex,m_inDirection);}
00083
00084
00085 virtual void flagAllHits(int iflag=1) = 0;
00086 virtual void unFlagAllHits() = 0;
00087
00088 virtual bool empty() const = 0;
00089 virtual bool accept() const = 0;
00090 virtual void clear() = 0;
00091 virtual void writeOut(std::ostream& out=std::cout) const {};
00092
00093
00094 public:
00095
00096 enum StatusHit {EMPTY, FOUND, CRACK};
00097 enum StatusPair {TOGETHER, SPLIT, ONE, DONE};
00098
00099 protected:
00100
00101
00102 GFbase(double sigmaCut, double ene, int ist, const Ray& testRay);
00103 virtual ~GFbase() {}
00104
00105
00106 virtual void ini() = 0;
00107 virtual void doit();
00108 virtual void step(int kplane) = 0;
00109 virtual void anastep(int kplane) = 0;
00110 virtual void fit() = 0;
00111 virtual bool end() const = 0;
00112 virtual void kill() = 0;
00113 virtual void setAlive() = 0;
00114
00115 virtual void contability(int kplane) = 0;
00116 virtual void loadGFdata() = 0;
00117
00118 protected:
00119
00120
00121 double m_sigmaCut;
00122 bool m_alive;
00123
00124
00125 Point m_inVertex;
00126 Vector m_inDirection;
00127 double m_iniEnergy;
00128 int m_iniLayer;
00129
00130 };
00131
00132 #endif