00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00014 #ifndef BFLDMESHRECT2D_H
00015 #define BFLDMESHRECT2D_H
00016
00017 #include "BField/BfldMesh.h"
00018 #include "BField/BfldMapRect2d.h"
00019
00020 class BfldMeshRect2d : public BfldMesh {
00021 public:
00022 BfldMeshRect2d();
00023 BfldMeshRect2d(BfldMapRect2d* map);
00024 virtual ~BfldMeshRect2d();
00025
00026 virtual TVector3 GetGeneratorPosition(Int_t generator);
00027
00028
00029
00030 virtual Bool_t InBounds(Float_t x, Float_t y);
00031 virtual Int_t InQuadrant(Float_t x, Float_t y);
00032
00033 virtual Int_t GetQuadFlag(Int_t iquadrant)
00034 { return fQuadFlags[iquadrant]; }
00035 virtual Int_t GetQuadFlag(Float_t x, Float_t y)
00036 { return fQuadFlags[InQuadrant(x,y)]; }
00037
00038 virtual void Pick3Generators(Float_t x, Float_t y, Int_t& gen_near,
00039 Int_t& gen_cw, Int_t& gen_ccw);
00040
00041
00042 virtual void Pick4Generators(Float_t x, Float_t y,
00043 Int_t& gen_ll, Int_t& gen_lr,
00044 Int_t& gen_ur, Int_t& gen_ul);
00045
00046 virtual Int_t IndicesToGenerator(Int_t ix, Int_t iy);
00047 virtual void GeneratorToIndices(Int_t gen, Int_t &ix, Int_t &iy);
00048
00049 virtual Int_t NearestGenerator(Float_t x, Float_t y);
00050 virtual Int_t NearestGenerator(TVector3 xyz);
00051 virtual Int_t LowerLeftGenerator(Float_t x, Float_t y);
00052 virtual Int_t LowerLeftGenerator(TVector3 xyz);
00053
00054 virtual Int_t NeighborGenerator(Int_t gen, Int_t dnx, Int_t dny);
00055
00056 protected:
00057
00058 virtual void CopyMapRect2d(BfldMapRect2d *map);
00059 virtual void GeneratorToXY(Int_t gen, Float_t &x, Float_t &y);
00060
00061 Float_t fX0;
00062 Float_t fDx;
00063 Int_t fNx;
00064 Float_t fXmax;
00065
00066 Float_t fY0;
00067 Float_t fDy;
00068 Int_t fNy;
00069 Float_t fYmax;
00070
00071 Bool_t fQuadrant;
00072 Int_t fQuadFlags[4];
00073
00074 private:
00075
00076 ClassDef(BfldMeshRect2d,1)
00077 };
00078 #endif // BFLDMESHRECT2D_H